Forum: Mikrocontroller und Digitale Elektronik Problem mit Analog Digital Converter beim AVR


von Junis (Gast)


Lesenswert?

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!

von Chris (Gast)


Lesenswert?

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

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
Noch kein Account? Hier anmelden.