Forum: Mikrocontroller und Digitale Elektronik Frage: ATMEGA 16 AD Wandlung...


von AVRli (Gast)


Lesenswert?

Hallo,

ich möchte den AD Wandler an dem ATMEGA16 nutzen.
Initialisieren...
1
  ldi wrH,(0<<REFS0)|(0<<MUX0)    ;internal Vref OFF|single ended input PA0
2
  out ADMUX,wrH
3
4
  ldi wrH,(1<<ADEN)|(1<<ADATE)    ;enable ADC | enable Auto Triger
5
  out ADCSRA,wrH
6
  in wrH,SFIOR
7
  sbr wrH,(4<<ADTS0)      ;enable ADC | Auto Triger T0 OVF
8
  out SFIOR,wrH

auslesen mach ich mit im TIMER0 OVERFLOW...
1
TIMER0_ADC:
2
  sbis ADCSRA,ADSC
3
  jmp TIMER0_ADC
4
  in ZL,ADCL
5
  in ZH,ADCH

Ok soweit nun im Z Register steht auch ein Wert drin, wenn ich volle 5V 
drauf lege 0x03FF soweit richtig...

Legt man 0 V oder der Eingang bleibt offen dann schwanke es immer um 
0x01FF, 0x00FF, 0x00FD...

Ich dachte es würde 0x0000 bei 0V angezeigt werden :-(
Hat einer eine Idee oder nen Tip?

Alles auf dem STK500 mit gestecktem REF JUMPER


Schönen Sonntag!
MfG AVRli

von Hubert.G (Gast)


Lesenswert?

Ich denke du wirst doch nicht mit dem Timer Interrupt den ADC auslesen, 
da wäre der ADC-Interrupt sicher die bessere Lösung.
Was verwendest du als AREF? Wenn der Eingang offen ist wird es wohl nie 
0 ergeben, ansonsten aber schon.

Hubert

von AVRli (Gast)


Lesenswert?

Hi,

doch doch das geht schon, ich benötige den Wert aus dem AD Wandler in 
bestimmten Abständen. Ist genug Zeit um das zu wandeln...

Ok, mittlerweile läuft es...

ldi wrH,(1<<ADEN)|(1<<ADATE)    ;enable ADC | enable Auto Triger

habe ich nun ganz am Ende gemacht, es steht auch so im Datenblatt, hab's 
übersehen in der "Hektik"...


MfG AVRli

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.