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!
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...
... 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
  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.
hm ... wie du sagtest ... vielen Dank!
1  | ...  | 
2  | rjmp wait_ADC_finish  | 
3  | |
4  | in r17, ADCL  | 
5  | in r18, ADCH  | 
6  | com r17  | 
7  | out PORTB, r17  | 
8  | ...  | 
aber kann ich das auslesen von ADCH nicht irgendwie umgehen?
> 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.
  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
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.