hallo zusammen ich brauch noch mal ne Info. Ich bekomme aus dem Kanal 5 ADC Info und weiß nicht genau wie ich die anderen Kanäle ansprechen muss. Habe schon Interrupt Routiene und Free Run propiert.Der ADC_MUX Kanal 05 und 04 sollen ausgelesen werden, aber ist immer der selbe Wert. Zur Zeit Free Run Modus am laufen. Läst sich besser timen. Danke Berny
Bei allgemeinen fragen zu abläufen sollte man als erstes ins Datenblatt des Controllers gucken, da gibt eine kurze ausführung und eine lange, lies die dir mal durch, da findest du bestimmt eine Antwort. http://www.atmel.com/dyn/resources/prod_documents/1042s.pdf (kurz) http://www.atmel.com/dyn/resources/prod_documents/doc1042.pdf (lang) gruß Chris
@Chris danke, habe es gelesen, verstanden und geht nicht????? Wie so oft eine einfache Sache, wenn sie richtig erklärt wurde!!!:) ;ADC initialisieren ;ADEN (ADC Enable) = 1 ;ADSC (ADC Start Conversion) = 1 ;ADFR (ADC Free Run Select) = 1 ;ADIF (ADC Interrupt Flag) = 1 ;ADIE (ADC Interrupt Enable) = 0 ;ADPS2..0 (ADC Prescaler Selct Bits XTAL /2..128)= 64 ;ldi temp, ((1<<ADEN)|(1<<ADSC)|(1<<ADFR))+7 ;free Run convert ;out ADCSR, temp ldi temp, ((1<<ADEN)|(1<<ADSC)|(1<<ADFR))+7 out ADCSR, temp Die Beispiele hier haben mich auf den Weg gebracht, doch leider nicht ans Ziel. Wäre klasse wenn jemand der Plan hat eine Antwort hätte. Wie in anderen Beiträgen zu sehen ist, hängt es immer wieder. Gruß Berny und hilfe wäre echt klasse, zumindest einen Wegweise, den Rest finden ich schon raus.
Du mußt dem Wandler auch mitteilen, welchen Kanal Du lesen möchtest.... Register ADMUX
@ Bernhard danke erstmal. Habe das Programm bis auf sbi ADCSR, ADSC hatte ich diesen Teil gleich. Doch ein Problem bleibt. Ich erhalte auf Kanal 5 den Wert von 4 und umgekehrt? ldi temp, ((1<<ADEN)|(1<<ADFR)|(1<<ADPS2))+(1<<ADPS1) out ADCSR, temp z.B. LDI temp,0x05 ADC_IN: ; Temp = MUX = Kanal Messung Rück r1-r2 out ADMUX,temp sbi ADCSR, ADIF sbi ADCSR, ADSC ADC_IN_l01: ; warte auf Conversion complet sbis ADCSR,ADIF ; ADIF Iterrupt flag prüfen rjmp ADC_IN_l01 ldi count,128 ; warten falls Daten nicht ok ADC_IN_l02: ; nur zum testen eingefügt dec count brne ADC_IN_l02 in r1, ADCL ; ADC einlesen in r2, ADCH ret Ich weiss nicht, was hier falsch läuft, wenn die Werte immer getdreht währen, hatte ich die Kanäle einfach vertauscht, aber manchmal klappts???? Hilfeeee und Gruß Berny
Das liegt evtl. am free-run Modus. Es kann da zu interessanten Effekten kommen, wenn man mehrere Kanäle abfragen will, denn wenn das Schreiben des ADMUX-Registers nicht synchron ist, klapperts. Ich nutze den Interrupt des A/D-Wandlers. Code-Beispiel siehe: http://www.mikrocontroller.net/forum/read-1-35558.html#36904 Mit ein paar kleineren Änderungen sollte das auch bei Dir laufen.
also wenn du meinen code nimmst (ad kanäle halt umbenennen) müsste es eigentlich funktionieren...;)...naja, hab auch ziemlich lang herumgebastelt und nette effekte mit der atmel ad wandlung erlebt ;)
Danke für die Info, das funzt prima, habe ich schon probiert, doch kann ich den Interrupt Modus nicht verwenden, da das auslesen zu einem ganz bestimmten Zeitpunkt bei Kanal 5 statt finden muss und im Ausnahmezustand des Timers stattfindet. Ich bekomme die falsche Spannung des Akkus zurück, halt die Ladespannung und nicht die Leerlaufspannung. Wie kann ich den den MUX Befehl syconisieren??? Gruß Berny ??????
moment mein wg mitbewohner sagt ich soll mal mit ihm ein bier trinken ;))..danach, werd ich mal zurückposten ;)
War plötzlich ganz einfach, Dank an alle, ich hoffe die Routine zickt nich noch mal rum, Der Hinweis Sycronisieren war super klassen, Ich habe einfach den Interrupt verwendet um die MUX zu sycronisieren und siehe da es läuft stabil. Dank an alle und Gruß Berny ADC_IN: ; Temp = MUX = Kanal Messung Rück r1-r2 out ADMUX,temp sbi ADCSR, ADIF out ADMUX,temp sbi ADCSR, ADSC ADC_IN_l01: ; warte auf Conversion complet sbis ADCSR,ADIF ; ADIF Iterrupt flag prüfen rjmp ADC_IN_l01 ldi count,128 ADC_IN_l02: dec count brne ADC_IN_l02 out ADMUX,temp sbi ADCSR, ADSC ADC_IN_l03: dec count brne ADC_IN_l03 in r1, ADCL ; ADC einlesen in r2, ADCH cbi ADCSR,ADSC ;Stop ADC Conversion ret
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.