Guten Abend! Habe folgendes Problem: Möchte am ADC0 vom Mega8 Controller eine Spannung einlesen vom Temperatur fühler und diese erstmal nicht um gewandelt ausgeben Z.B ADC = 512 512 sol dann später um gerechnet werden. wie mache ich das am esten welchen befehl verwende ich dazu adc_read ? programmiere mit CodeVision LCD display läuft schon nur mit dem adc kenne ich mich nicht aus weil mir das befehl zum lesen fehlt.... #include <mega8.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x12 ;PORTD #endasm #include <lcd.h> #include <delay.h> // Declare your global variables here void main(void) { lcd_init(20); while (1) { lcd_gotoxy(0,0); delay_ms(100); lcd_putsf("Test"); delay_ms(100); }; }
Hallo Peter, Du hast vergessen den AD Wandler zu initialisieren; -( Der AD Wandler muss in main() zuerst konfiguriert werden: Am Besten siehst Du Dir das Example Programm ADC8535.c (EXAMLES)an. Studier das Programm gleichzeitig mit dem Datenblatt und lese alles durch bis Du genau jede Programmzeile die sich mit dem Gebrauch des AD-Wandlers befasst, verstehst. Grundsaetzlich muessen alle Peripherien vor dem Einsatz immer konfiguriert werden. Zum BEispiel: // ADC initialization // ADC Clock frequency: 57.600 kHz // ADC Voltage Reference: AREF pin // ADC High Speed Mode: Off // ADC Auto Trigger Source: None // Only the 8 most significant bits of // the AD conversion result are used // Select ADC input 0 ADMUX=ADC_VREF_TYPE; ADCSRA=0x8E; SFIOR&=0xEF; In vielen Programmen wird der AD-Wandler am Besten im Interruptbetrieb verwendet um den CPU nicht waeherend der Messung aufzuhalten.(Ist wie Du im Beispiel siehst nicht schwierig) Falls keine Interrupts gewuenscht sind, dann musst Du eine bestimmte Zeit die von der Clock abhaengig ist, warten. Die AD-Konvertierung muss normalerweise immer mit einem Befehl gestartet werden. Im einfachsten Fall als Beispiel: // Starte the first AD-Messung: ADCSRA|=0x40; Warten bis die AD Wandlung fertig ist oder pollen delay_ms(20); (Normalerweise nur ein paar zig us) Resultat lesen: Resultat = ADCW; Das ist im Prinzip was notwendig ist. In der Praxis ist der Interruptbetrieb am Besten, da der CPU waeherende der Messung keine Zeit vergeuden muss um auf das Resultat zu warten. Der Wandler kann in "Single Conversion Mode" und im "Auto Trigger" Modus betrieben werden. (Steht alles genau im Datenblatt) Sonst wuerde ich Dir noch raten die einschlaegigen Tutorials hier im Formum durchzugehen. Viel Erfolg! MFG, Gerhard
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.