As requested ...
want proof ??? Ok ... let's go !
1St attempt : Mikrobasic 7.2 ...
1:1 E-0 Linker error: NOT ENOUGH ROMCode:program Gouvernail ' program PiloteAT50 '************************************************* **************************** ' microcontroleur : 16F819 sur EasyPic 5 ' ' Projet : PPE 2010 ' ' En entree : A0 Up3 = entree analogique ' ' En sortie : portB Affichage des consignes "Babord et Tribord" sur lcd ' '************************************************* **************************** 'program PiloteAT50 symbol Up3 = PORTA.0 ' tension analogique (<5V) ' déclaration des variables dim result as word dim tension as longint dim angle as longint dim text as string[9] dim valeur as string[11] const Vref = 5000 '****************************************************************************** sub Procedure Init ' Initialisation 'CMCON = 7 trisb = %00000000 ' portB en sortie trisa = %11111111 ' portA en entrée Delay_ms(500) Lcd_Config(PORTB, 3, 2, 1, 0, PORTB, 4, 6, 5) ' Initialize LCD connected to PORTB 'LCD_init(PORTB) ' initialisation Lcd sur PortB Lcd_Cmd(lcd_Clear) Lcd_Cmd(lcd_cursor_off) end sub '******************************************************************************* main: ' ********* Principal ********* '******************************************************************************* Init ' config. et init. du PIC while true ' début de la boucle result = adc_read(0) tension = result * Vref /1024 ' en mv !!! '************************************************************************** ' < ou > 4.02 v ??? ( 1024 * 4.02/5 = 823 !!! ) if tension < 4020 then text = " Tribord " else Text = " Babord " end if '***************************************************************************** ' Calcul de l'angle angle = 3133 * Fabs(tension - 4020) / 120000 '***************************************************************************** ' Affichage LongintTostr(angle,valeur) Lcd_out(1, 1, text) Lcd_out(2,1,valeur) delay_ms(100) wend end.
NOTA: 2504 Words compiled for a 16F877A
2nd Attempt : MikroBasic 7.2 ... NOT USING Fabs () ... = PbP ABS()
0:0 S-100 Success (Release build) - Timestamp: 10:15:57Code:program Gouvernail ' program PiloteAT50 '************************************************* **************************** ' microcontroleur : 16F877A sur EasyPic 5 ' ' Projet : PPE 2010 ' ' En entree : A0 Up3 = entree analogique ' ' En sortie : portB Affichage des consignes "Babord et Tribord" sur lcd ' '************************************************* **************************** 'program PiloteAT50 symbol Up3 = PORTA.0 ' tension analogique (<5V) ' déclaration des variables dim result as word dim tension as longint dim angle as longint dim text as string[9] dim valeur as string[11] const Vref = 5000 '****************************************************************************** sub Procedure Init ' Initialisation ' CMCON = 7 trisb = %00000000 ' portB en sortie trisa = %11111111 ' portA en entrée Delay_ms(500) Lcd_Config(PORTB, 3, 2, 1, 0, PORTB, 4, 6, 5) ' Initialize LCD connected to PORTB 'LCD_init(PORTB) ' initialisation Lcd sur PortB Lcd_Cmd(lcd_Clear) Lcd_Cmd(lcd_cursor_off) end sub '******************************************************************************* main: ' ********* Principal ********* '******************************************************************************* Init ' config. et init. du PIC while true ' début de la boucle result = adc_read(0) tension = result * Vref /1024 ' en mv !!! '************************************************************************** ' < ou > 4.02 v ??? ( 1024 * 4.02/5 = 823 !!! ) if tension < 4020 then text = " Tribord " angle = 3133 * (4020 - tension ) / 120000 else Text = " Babord " angle = 3133 * (tension - 4020) / 120000 end if '***************************************************************************** ' Calcul de l'angle ' angle = 3133 * Fabs(tension - 4020) / 120000 '***************************************************************************** ' Affichage LongintTostr(angle,valeur) Lcd_out(1, 1, text) Lcd_out(2,1,valeur) delay_ms(100) wend end.
0:0 W-101 Used ROM: 1774 (86%) Used RAM: 80 (31%)
0:0 W-102 Free ROM: 273 (14%) Free RAM: 176 (69%)
a small bit better ...
3rd attempt : MikroBasic PRO 3.2
0 133 Compiled Successfully C:\Program Files\Mikroelektronika\ProjetsBPro\Gouvernail\Gouv ernail.mbasCode:program Gouvernail ' program PiloteAT50 '************************************************* **************************** ' microcontroleur : 16F819 sur EasyPic 5 ' ' Projet : PPE 2010 ' ' En entree : A0 Up3 = entree analogique ' ' En sortie : portB Affichage des consignes "Babord et Tribord" sur lcd ' '************************************************* **************************** 'program PiloteAT50 ' Lcd module connections dim LCD_RS as sbit at RB4_bit LCD_EN as sbit at RB5_bit LCD_D4 as sbit at RB0_bit LCD_D5 as sbit at RB1_bit LCD_D6 as sbit at RB2_bit LCD_D7 as sbit at RB3_bit LCD_RS_Direction as sbit at TRISB4_bit LCD_EN_Direction as sbit at TRISB5_bit LCD_D4_Direction as sbit at TRISB0_bit LCD_D5_Direction as sbit at TRISB1_bit LCD_D6_Direction as sbit at TRISB2_bit LCD_D7_Direction as sbit at TRISB3_bit ' End Lcd module connections ' Symbol Up3 = PORTA.0 ' tension analogique (<5V) ' déclaration des variables dim resulta as word dim tension as longint dim angle as longint dim text as string[9] dim valeur as string[11] const Vref = 5000 '******************************************************************************* main: '******************************************************************************* ' Init ' config. et init. du PIC ' CMCON = 7 trisb = %00000000 ' portB en sortie trisa = %11111111 ' portA en entrée Delay_ms(500) 'Lcd_Config(PORTB, 3, 2, 1, 0, PORTB, 4, 6, 5) ' Initialize LCD connected to PORTB LCD_init() ' initialisation Lcd sur PortB Lcd_Cmd(_LCD_CLEAR) Lcd_Cmd(_Lcd_Cursor_Off) while true ' début de la boucle resulta = adc_read(0) tension = resulta * Vref /1024 ' en mv !!! '************************************************************************ ' < ou > 4.02 v ??? ( 1024 * 4.02/5 = 823 !!! ) if tension < 4020 then text = " Tribord " '********************************************************************* ' Calcul de l'angle angle = 3133 * ( 4020 - tension ) / 120000 else Text = " Babord " angle = 3133 * (tension - 4020) / 120000 end if '***************************************************************************** ' Affichage LongintTostr(angle,valeur) Lcd_out(1, 1, text) Lcd_out(2,1,valeur) delay_ms(100) wend end.
0 1143 Used ROM (program words): 1722 (84%) Free ROM (program words): 326 (16%)
0 1143 Used RAM (bytes): 44 (18%) Free RAM (bytes): 196 (82%)
a tiny little bit better ...
4Th attempt : Our favourite PicBasicPro v 2.60 / MPASM/ MCS ( left MkB lines commented besides PbP lines ...)
Success ; 461 Words ...Code:'**************************************************************** '* Name : UNTITLED.BAS * '* Author : [select VIEW...EDITOR OPTIONS] * '* Notice : Copyright (c) 2010 [select VIEW...EDITOR OPTIONS] * '* : All Rights Reserved * '* Date : 30/04/2010 * '* Version : 1.0 * '* Notes : * '* : * '**************************************************************** 'program Gouvernail ' program PiloteAT50 '************************************************* **************************** ' microcontroleur : 16F819 sur EasyPic 5 ' ' Projet : PPE 2010 ' ' En entree : A0 Up3 = entree analogique ' ' En sortie : portB Affichage des consignes "Babord et Tribord" sur lcd ' '************************************************* **************************** 'program PiloteAT50 @ ERRORLEVEL -306 @ __config _HS_OSC & _WDT_ON & _PWRTE_ON & _BODEN_ON & _LVP_OFF & _CP_OFF entree var PORTA.0 ' tension analogique (<5V) ' déclaration des variables ' dim result as word ' dim tension as longint ' dim angle as longint ' dim text as string[9] ' dim valeur as string[10] ' const Vref = 5000 result var word tension var word angle var word dummy var word vref con 5000 '************************************************* ***************************** 'sub Procedure Init ' Initialisation DEFINE OSC 8 CLEAR ;----[LCD definitions]------------------------------------------------------ DEFINE LCD_DREG PORTB ' LCD Data port DEFINE LCD_DBIT 0 ' starting Data bit (0 or 4) DEFINE LCD_EREG PORTB ' LCD Enable port DEFINE LCD_EBIT 5 ' Enable bit (on EasyPIC 5 LCD) DEFINE LCD_RSREG PORTB ' LCD Register Select port DEFINE LCD_RSBIT 4 ' Register Select bit (on EasyPIC 5 LCD) DEFINE LCD_BITS 4 ' LCD bus size (4 or 8 bits) DEFINE LCD_LINES 2 ' number of lines on LCD DEFINE LCD_COMMANDUS 2000 ' Command delay time in us DEFINE LCD_DATAUS 50 ' Data delay time in us ;----[LCD definitions]------------------------------------------------------ DEFINE ADC_BITS 10 ' set number of bits in result DEFINE ADC_CLOCK 3 ' set clock source ADCON1 = %10000000 ' right formatted ' CMCON = 7 trisb = %00000000 ' portB en sortie trisa = %11111111 ' portA en entrée 'Delay_ms(500) PAUSE 500 'Lcd_Config(PORTB, 3, 2, 1, 0, PORTB, 4, 6, 5) ' Initialize LCD connected to PORTB 'LCD_init(PORTB) ' initialisation Lcd sur PortB ' Lcd_Cmd(lcd_Clear) ' Lcd_Cmd(lcd_cursor_off) LCDOUT $FE,1 ' end sub '************************************************* ****************************** main: ' ********* Principal ********* '************************************************* ****************************** ' Init ' config. et init. du PIC 'while true ' début de la boucle while 1=1 ' result = adc_read(0) adcin 0, result dummy = result * Vref tension = DIV32 1024 ' en mv !!! '************************************************* ************************* ' < ou > 4.02 v ??? ( 1024 * 4.02/5 = 823 !!! ) if tension < 4020 then LCDOUT $FE,2, " Tribord " else LCDOUT $FE,2, " Babord " endif '************************************************* **************************** ' Calcul de l'angle ' angle = 3133 * abs(tension - 4020) / 120 / 1000 dummy = 3133 * abs(tension - 4020) angle = DIV32 12000 angle = angle /10 '************************************************* **************************** ' Affichage ' LongintTostr(angle,valeur) ' Lcd_out(1, 1, text) ' Lcd_out(2,1,valeur) LCDOUT $FE, $C0, dec3 angle ' delay_ms(100) PAUSE 100 wend end
Really astonishing for such a simple work !!!, don't you think ???
Alain
PS; as we are under the 2K limit EVERYONE can verify it with the Demo available versions of MikroBasic and MikroBasic Pro ...




Bookmarks