mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC nur nach Reset?


Autor: Thomas_F (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich arbeite gerade das ADC Tutorial durch und stehe vor folgendem 
Problem.

Der Wert, den das ADCL/ADCH Register liefert ändert sich nicht, wenn ich 
den Transistor ändere, der als Eingabe dient. Lediglich, wenn ich den mC 
resette, ändert sich der Wert ... warum?

Hat jmd eine Lösung dafür?

Vielen Dank!

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Liest Du die Register ADCL und ADCH in der richtigen Reihenfolge aus? 
Wartest Du auch wirklich, bis der ADC mit der Wandlung fertig ist, bevor 
Du den Wert ausliest?

Außerdem ist es ziemlich sinnfrei, den Code, mit dem das Problem 
auftritt, nicht zu posten, aber zu vermuten, dass hier Hellseher sitzen, 
die den Code telepathisch auf Deinem Rechner lesen können...

Autor: Thomas_F (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... hm ... schön wärs ...

... ich lese in der Richtigen Reihenfolge ein und warte auch wirklich 
...

Hier mal mein Code:

.include "m8def.inc"

RESET:
  ldi r16, 0b11111111
  out PORTB, r16

  ldi r16, 0b11111111
  out DDRB, r16


  ldi r17, (1<<REFS0)  ; interne Referenz AVCC (5V) und Pin PC0
  out ADMUX, r17
  ldi r17, (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0)
  out ADCSRA, r17    ; ADVC aktivieren und Vorteiler = 128


MAIN:
  sbi ADCSRA, ADSC  ; ADC starten


  wait_ADC_finish:  ; warten, bis ADC fertig
    sbic ADCSRA, ADSC
  rjmp wait_ADC_finish

  in r17, ADCL
  com r17
  out PORTB, r17


rjmp MAIN

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hä? Du liest ADCH überhaupt nicht ein. Das macht keinen Sinn. Und kann 
auch nicht funktionieren. ADCH MUSS immer ausgelesen werden! Ansonsten 
werden beide Register (ADCH und ADCL) gesperrt und der ADC kann keinen 
neuen Wert hineinschreiben. Du bekommst also genau einen Wert geliefert 
(und zwar nur das Low-Byte) und danach liest Du immer denselben Wert 
aus.

Autor: Thomas_F (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hm ... wie du sagtest ... vielen Dank!
...
rjmp wait_ADC_finish

  in r17, ADCL
  in r18, ADCH  
  com r17
  out PORTB, r17
...


aber kann ich das auslesen von ADCH nicht irgendwie umgehen?

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> aber kann ich das auslesen von ADCH nicht irgendwie umgehen?
Nein. Ich frage mich allerdings, was der Sinn darin ist, nur das 
Low-Byte auszulesen.

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Kleiner Auszug aus dem Datenblatt:

'If the result is left adjusted and no more than 8-bit precision is 
required, it is sufficient to read ADCH. Otherwise, ADCL must be read 
first, then ADCH, to ensure that the content of the Data Registers 
belongs to the same Conversion. Once ADCL is read, ADC access to Data 
Registers is blocked.'

D.h.: wenn du das ADLAR-Bit setzt, reicht es das ADCH-Register zu lesen. 
Du hast dann aber nur eine Auflösung von 8 Bit.

MfG Spess

Autor: Thomas_F (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die Antworten!

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.