Hi Ich habe da mal ein kleines Problem. Unzwar betreibe ich ein ATmega8 mit 16MHz. An Pc0 und PC1 will ich Analoge Werte einlesen und an PC2 - PC5 liegen Schalter an. da es sich bei meinem Programm um Zeitkritische Sachen handelt, kann ich mir keine Interrupts und warten bis Flags gesetzt sind leisten. Die Zyclen müssen immer gleich bleiben und demzufolge berechenbar sein. Hier mal meine Routine: ;-------setze Stackpointer (045F)---------- ldi r17, 0x5F out SPL, r17 ldi r17, 0x04 out SPH, r17 ;------------------------------------------ ;------setze tasten PORTS ---------------- ldi r17, 0x00 out DDRC, r17 ldi r17, 0xfC out PORTC, r17 ;------------------------------------------ . . Hier frage ich nun PC0 ab und speichere die Daten in 0x0300 + 0x0301 . . ldi r17, 0x20 ;1----------------------- out ADMUX, r17 ;1 ldi r17, 0xE0 ;1 out ADCSRA, r17 ;1 ldi r17,0x16 ;---- hx0: dec r17 ; 66 brne hx0 ;---- in r17, ADCH ;1 110 sts 0x300, r17 ;2 in r17, ADCL ;1 sts 0x301, r17 ;2 Nun will ich jedoch den PC1 abfragen und mach dann folgendes: ldi r17, 0x21 ;1----------------------- out ADMUX, r17 ;1 ldi r17,0x16 ;---- hx1: dec r17 ; 66 brne hx1 ;---- in r17, ADCH ;1 sts 0x302, r17 ;2 in r17, ADCL ;1 sts 0x303, r17 ;2 Diese Werte sollen dann in 0x0302 - 0x0303 rein. Zum Schluss Disable ich die Analogen eingänge wieder um PC2- PC5 als INPUT zu nutzen: ldi r17, 0x0 ;1 out ADMUX, r17 ;1 ldi r17, 0x0 ;1 out ADCSRA, r17 ;1--------------------- danach passiert ersteinmal ganz viele Takte nichts mehr, bis er wieder zu dieser Routine zurück kehrt. Das problem ist nun, dass ich immer nur den Wert aus der erten Routine erhalte (PC0). Also beim zweiten mal einlesen (PC1) hat sich nichts verändert. Da ich den Analog Teil als im Free Run mode betreibe, sollten doch eigentlich zwischen wechsel der Ports nur 13 Takte nötig sein, damit der neue Wert in ADCH ADCL drinn steht ? Aber der Wert ändert sich nicht :-(. Und was ist eigentlich der unterschied zwischen Free Run Mode und Single Mode ? Irgendwie verstehe ich das so, das im Single Mode mit max. 200KHz gescannt wird ? Was aber bei 16MHz Grundtakt und max. Teiler von 128 überhaupt nicht möglich wäre.
Ok..... Hat sich wohl erledigt, ich habe nun die Initialiesierung ganz zum Anfang gepackt und frage in den Routinen nur noch die I/O Register ab. Man muss wohl nicht immer umschalten um die Schalter an PC2-PC5 abzufragen. das wird wohl auch parallel dazu erledigt. Aber eine Frage wäre da noch. ich habe Masse und AVcc an die normale Spannung mit angeschlossen, genau so Aref. Wieso wird bei High nur 0x03CF angezeigt und bei Low 0x001F ???? Da die PIN's ja die volle Aref Spannung bekommen, sollten die doch 0x03FF anzeigen, genau so wie bei Low (Masse) die 0x0000 ?
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.