Hallo, Ich habe ein kleines problem und zwar will ich mit dem 4433 2 Messwerte mit dem ADC einlesen und auf einem LCD ausgeben, was soweit auch ganz gut klappt, nur wird der wert der an ADC0 anliegt auf der zweiten Zeile im LCD ausgegeben und der von ADC1 in Zeile 1. Ich könnte jetzt ja die beiden leitungen tauschen, aber das wäre nicht sinn der sache. Beim suchen hier im Forum habe ich genau die gleiche frage schonmal gefunden, nur leider ohne antwort, kann mir bitte jemand einen tipp geben was ich falsch gemacht habe. Einen auszug aus meinem programm habe ich angehängt. Vielen Dank schin im Vorraus, Jürgen Müller. loop1: ldi temp, 0b00000000 out ADMUX, temp rcall messen rcall lcd_1zeile mov temp1, r26 ;1.Zeichen anzeigen rcall lcd_data ldi temp1, '.' ;2.Zeichen anzeigen rcall lcd_data mov temp1, r27 ;3.Zeichen anzeigen rcall lcd_data mov temp1, r28 ;4.Zeichen anzeigen rcall lcd_data loop2: ldi temp,0b00000001 out ADMUX, temp rcall messen rcall lcd_2zeile mov temp1, r26 ;1.Zeichen anzeigen rcall lcd_data ldi temp1, '.' ;2.Zeichen anzeigen rcall lcd_data mov temp1, r27 ;3.Zeichen anzeigen rcall lcd_data rjmp loop1
Hi... Du musst dem ADC zwischen Umschalten der Quelle genug Zeit zum Arbeiten lassen... Also erst "Messen" aufrufen, danach vorausschauend die nächste Quelle wählen. Und das Ganze nicht unbedingt in einer direkten Endlosschleife, sondern von einem Timer-Int "angeschubst". Dann hast du die Sicherheit, dass genügend Zeit für die Wandlung bleibt. Oder Einzelmessungen mit Interrupt (wenn fertig), also admux setzen, adc mit Int aktivieren und "schlafen gehen", ADC-Int weckt AVR auf und du kannst Ergebnis auslesen und verarbeiten... Es gibt viele Lösungen, aber: out admux,quelle in wertl,adcl in werth,adch ist eine der schlechtesten... Gruß... ...HanneS...
Kann man nun nicht viel helfen ohne die UP´s 'messen', 'lcd_1zeile' und 'lcd_2zeile'. Zumindest ist es beim LCD so, das im 1-Line-Mode die erste Zeile von Adresse 0 bis 39 und die zweite von 40 bis 79 ist. Im 2-Line-Mode beginnt die erte bei 0 und die 2. bei 64. Wartest Du im UP 'messen' auch, bis ein Scan fertig ist (Bit ADSC auf 0 testen, dann Scan fertig)?. Gruß Andi
Jawohl, jetzt geht es, einfach ein paar pausen von 5ms einbauen und es geht. Danke für die schnellen Antworten. Jürgen.
Hi... @Jürgen: Oder schau mal hier... http://www.brummbaerhannes.de/hannes/avr/7ksend/7ksend01.html ...HanneS...
Das mit den 5mS Pause ist ne sehr lange Wartezeit. Wenn Deine ADC-Rotine 'messen' ohne ADC-IRQ läuft, versuchs doch mal mit folgendem: sbi adcsr,adsc ;ADC starten WaitADC: sbic adcsr,adsc ;Wenn ADC fertig, ist das Bit ADSC gelöscht ;und folgender Befehl wird übersprungen rjmp WaitADC ;Solange warten, bis ADC fertig ist Das meinte ich mit warten bis eine ADC fertig ist. Gruß Andi
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.