Do small steps.
You have the LCD working.
Now make the ADC work with 8 bit resolution.
Then do two ADC channels.
Then work on 10 bit for more accuracy.
Then work on the bar graph.
Do small steps.
You have the LCD working.
Now make the ADC work with 8 bit resolution.
Then do two ADC channels.
Then work on 10 bit for more accuracy.
Then work on the bar graph.
Dave
Always wear safety glasses while programming.
Okay ,
for ADC :
I tried to read the voltage from LM358 and to write the LCD as Volt.Mvolt
PORTA = %00000001
RAW var word ' the input voltage
volt var word
Mvolt var byte
START:
ADCIN 0,RAW ' Analog read from #ch0 and move it to RAW
LOOK : IF ADCON0.2=1 THEN LOOK ' when ADC finished ADCON0.2=0
' for 0-5V , 0-1024 - > 5/1024 = 0.0048828 = very small number
'0.0048828*1000 = 4.8828 ( raw/V)
'4.8828 * 256 = 1250 ( 1250 = 5/1024 * 256*1000 ) we made 32bits calculation
Volt=(Raw*/1250)/100
MVolt=Volt//10 ' Mvolt = Volt mod 10
Volt=Volt/10
LCDOUT $FE,2,"VOLT=",#VOLT,",",#Mvolt
PAUSE 500
GOTO START
I'm waiting for help.
Thanks.
Last edited by karamastik; - 19th March 2008 at 23:03.
Sorry for the flood , but i must ;
i changed the ADC codes , but volt variable does not accept floating numbers :
START:
ADCIN 0,RAW
LOOK : IF ADCON0.2=1 THEN LOOK
Volt=(0,0048828125*RAW)*1000
MVolt=Volt//10 ' Mvolt = Volt mod 10
LCDOUT $FE,2,"VOLT=",#VOLT,",",#Mvolt
PAUSE 500
GOTO START
Last edited by karamastik; - 20th March 2008 at 00:54.
Neither does anything else in PBP...
PORTA=1 : RAW var word : volt var long
START: ADCIN 0,RAW : IF ADCON0.2=1 THEN START
Volt = Raw * 4882813 'round up
LCDOUT $FE , 2 , "V=" , DEC ( volt dig 9 ) , "." , DEC ( volt dig 8 ) , DEC ( volt dig 7 )
LCDOUT DEC ( volt dig 6 ) , DEC ( volt dig 5 ) , DEC ( volt dig 4 ) , DEC ( volt dig 3 )
LCDOUT DEC ( volt dig 2 ) , DEC ( volt dig 1 ) , DEC ( volt dig 0 ) 'get all them digits in there
PAUSE 500
GOTO START
I was at school ,sorry for the delay.
Thanks for the help but in pbp , i saw that there is no " long " .
It gives error.
Hello again !
I changed my code like that :
(Arkadaşlar yok mu yardımcı olacak ? )
Is the idea correct , isn't it ?@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_on
@ DEVICE pic16F877, PWRT_ON
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, HS_OSC
TRISA=%00000001
TRISB=0
TRISE=0
LCDOUT $FE, $40, $00, $1F, $1F, $1F, $1F, $1F, $1F, $00
bar var byte
raw var word
I var byte
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTE
DEFINE LCD_RSBIT 1
DEFINE LCD_EREG PORTE
DEFINE LCD_EBIT 0
DEFINE LCD_RWREG PORTE
DEFINE LCD_RWBIT 2
DEFINE LCD_BITS 8
DEFINE LCD_LINES 2
DEFINE LCD_COMMANDUS 1000
DEFINE LCD_DATAUS 225
DEFINE ADC_BITS 10
DEFINE ADC_CLOCK 2
DEFINE ADC_SAMPLEUS 100
ADCON1=%10001110
LOW PORTE.2
LCDOUT $FE,1
PAUSE 200
ADCIN 0,raw
bar=(1023-raw)/64
lcdout $fe,2
for I=1 to bar
lcdout ,255
next
END
But it does not work![]()
Last edited by karamastik; - 21st March 2008 at 11:12.
Bookmarks