Moin Gemeinde,
hab ne Denkblockade und bitte um Hilfe...
Wenn ich bei einer 10Bit Auflösung des ADC Werte von 0 bis 1023 bekomme und dabei eine Eingangsspannung von 0 bis 5V habe, könnte die Berechnung wie folgt ausehen:
Code:
Dim A As Word
Dim B As Single
Dim C As Single
Config ADC = Single , Prescaler = Auto
Start Adc
Do
A = Getadc(7)
B = A * 0.48875
C = B / 100
Print C
Loop
Wie kommt der Autor dieses Codeschnipsels auf die "0.48875", anstatt 5 (für 5V) ?
Aber noch wichtiger für mich - wie kann ich diese Umrechnung ohne Fließkommazahlen erreichen?
In anderen Basic-Compilern, z.B. für PICs gibts ja nicht mal die Möglichkeit, mit Fließkommazahlen zu rechnen
Also muss es ja auch in Bascom ohne diese gehen - bloss wie?
Ich bin noch nie ne Mathe-Leuchte gewesen, darum bitte ich um Hilfe.
Hier mal ein Beispiel aus einem PIC-Basic Compiler, der den ADC-Wert in Volt auf ein LCD gibt:
Code:
'******************************************************************************
' microcontroller P16F877A
'
' Project: adconlcd
' This project is designed to work with PIC 16F877A
' with minor adjustments, it should work with any other PIC MCU
' that has ADC module.
'
' This code demonstrates how to use library function ADC_read, and library
' procedures and functions for LCD display (4 bit interface)
'
'******************************************************************************
program adconlcd
dim ch as byte
dim t as integer
dim a as string[20]
dim tlong as longint
main:
PORTB = 0 ' clear portb
TRISB = 0 ' designate portb as output (LCD is connected to portb)
intcon = 0 ' disable all interrupts
Lcd_init(PORTB) ' initialize (4-bit interface connection)
Lcd_Cmd(PORTB, LCD_CURSOR_OFF) ' send command to LCD (cursor off)
LCD_Cmd(PORTB,LCD_CLEAR) ' send command to LCD (clear LCD)
a = "mikroElektronika" ' assign text to string a
LCD_Out(PORTB,1,1,a) ' print string a on LCD, 1st row, 1st column
a = "LCD example" ' assign text to string a
LCD_Out(PORTB,2,1,a) ' print string a on LCD, 2nd row, 1st column
OPTION_REG = $80
ADCON1 = $82 ' configure VDD as Vref, and analog channels
TRISA = $FF ' designate porta as input
Delay_ms(2000)
a = "voltage:" ' assign text to string a
DoAdc:
t = ADC_read(2) ' get ADC value from 2nd channel
LCD_Out(PORTB,2,1,a) ' print string a on LCD, 2nd row, 1st column
tlong = t*5000
t = longint(tlong >> 10)
ch = t div 1000 ' prepare value for diplay
LCD_Chr(PORTB,2,9,48+ch) ' write ASCII at 2nd row, 9th column
LCD_Chr(PORTB,2,10,".")
ch = integer(t div 100) mod 10
LCD_Chr(PORTB,2,11,48+ch)
ch = integer(t div 10) mod 10
LCD_Chr(PORTB,2,12,48+ch)
ch = t mod 10
LCD_Chr(PORTB,2,13,48+ch)
LCD_Chr(PORTB,2,14,"V")
delay_ms(1)
goto DoAdc
end.
Ich kann dieses Verfahren aber leider nicht so richtig in Bascom übernehmen und bitte um Hilfe.
Viele Grüße,
Bruno
Lesezeichen