Problem mit Analog Digital Converter beim AVR

Gast #46099
Hallo,

Ich schlage mich nun schon die ganze Nacht und den halben Tag mit
diesem Problem rum.

Ich habe einen Temperatursensor am ADC Wandler meines AVRs. Bis jetzt
habe ich einfach den freerun Modus angeschaltet und ab und zu mal die
Werte eingelesen. Die temperaturen stimmten alle und ich war glücklich.
Nun wollte ich aber auf den single conversion modus umstellen und immer
die Kanäle umschalten. Nun zeigt er nur noch mist an, selbst, wenn ich
alle sensoren abziehe. Wenn ich einen Sensor kalt mache, dann gehen
alle anderen auch runter. Die ausgelesenen werte scheinen völlig
beliebig zu sein. vielleicht mache ich was falsch. Hier der code, mit
dem ich die werte auslese.


Im Programm:

  ldi  mp,0x01
  out  ADMUX,mp
  RCALL  ADC
  IN  SLOW,ADCL
  IN  SHIGH,ADCH

Zum Kanal setzen und aufrufen des unterprogrammes

adc:

  LDI  up,0b11000110
  OUT  ADCSR,up

adcwait:


  IN  up,ADCSR        ;soll auf ende der conversation warten
  SBRC  up,ADSC
  RJMP  adcwait


  LDI  up,0b10000110 ;0xE6
  OUT  ADCSR,up

  RET

Danach lese ich mit:

        ldi  mp,0x02
  out  ADMUX,mp
  RCALL  ADC
  IN  SLOW,ADCL
  IN  SHIGH,ADCH

den nächsten sensor ein. DAs klappt aber nun gar nicht.

Bitte helft!
Gast
Hast du an folgendes Gedacht:

Die allererste Wandlung des ADC ist ein "dummy", also Schrott.

Die allererste Wandlung brauch 12 Takte mehr als eine Normale.

Die Wandlungszeit ist bei Single-Conversion etwas länger.

Hast du register doppelt?

Dein Wandler kan vom CPU-Kern gestört werden, da kann man einen
Rauschreduzierer einschalten.

Wieso schaltest du den ADSC noch zusätzlich aus, nachdem die schleife
eh nur abgebrochen wird wenn er '0' ist?

Wie wird der Befehl aufgerufen   LDI mp,0x02, ich sehe keine
Sprungmarke davor? Kann es sein, dass dieser Befehl nie erreicht wird?

Wieso benutzt du nicht die Interrupt-funktion, dann brauchst du diese
Schleife nicht mehr?

Gruß
Chris

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.