www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC vertauscht kanäle.


Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jawohl, jetzt geht es, einfach ein paar pausen von 5ms einbauen und es
geht.

Danke für die schnellen Antworten. Jürgen.

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi...

@Jürgen: Oder schau mal hier...
http://www.brummbaerhannes.de/hannes/avr/7ksend/7k...
...HanneS...

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.