Hallo,
ich habe gerade ein bisschen mit meinem ATMega32 rumgespielt. Und zwar habe ich an den PA0 ein 25k-Poti als einstellbaren Spannungsteiler angeschlossen.
Der Wert wird eingelesen und dann auf das angeschlossene LCD ausgegeben, also zwischen 0 (=0V) und 1023 (=5V). Das funktioniert auch soweit.
Nur wollte ich jetzt das Programm erweitern, dass der Wert umgerechnet wird, sodass anstatt 1023 5,00V angezeigt wird.
Irgendwie klappt aber das Umwandeln der Variablen nicht,
kann mir da jemand von Euch weiterhelfen, bin noch ein Noob...
MfG, DaneCode:'-------------------------------------------------------------------- ' ADC_INT.BAS ' demonstration of GETADC() function in combintion with the idle mode ' for a better noise immunity ' Getadc() will also work for other AVR chips that have an ADC converter '-------------------------------------------------------------------- $regfile = "m32def.dat" 'ATMega32 $crystal = 12000000 'Quarz 12 MHz Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2 Config Lcd = 20 * 4 ' LCD mit 4 Zeilen und 20 Zeichen pro Zeile 'configure single mode and auto prescaler setting 'The single mode must be used with the GETADC() function 'The prescaler divides the internal clock by 2,4,8,16,32,64 or 128 'Because the ADC needs a clock from 50-200 KHz 'The AUTO feature, will select the highest clockrate possible Config Adc = Single , Prescaler = Auto 'Now give power to the chip On Adc Adc_isr Nosave Enable Adc Enable Interrupts Dim W As Word , V As Double , Spannung As Double , Channel As Byte Channel = 0 'now read A/D value from channel 0 Cls Do Channel = 0 'idle will put the micro into sleep. 'an interrupt will wake the micro. Start Adc Idle Stop Adc Locate 1 , 1 'springe in 1.Zeile 1.Spalte Cls 'Clear Screen vom LCD Lcd "Channel " ; Channel ; " value " ; W 'Ausgabe aufs LCD V = W 'Variablenwert von W in V übertragen Spannung = V / 204.6 'umrechnen, damit 1023 5V entspricht Lowerline 'springe in 2. Zeile Lcd "Spannung: " ; Spannung ; "V" 'Ausgabe aufs LCD Waitms 500 Loop End Adc_isr: push r24 in r24,sreg push r24 push r25 W = Getadc(channel) pop r25 pop r24 !out sreg,r24 pop r24 Return







Zitieren

Lesezeichen