Forum: Mikrocontroller und Digitale Elektronik ADC mit Mega8


von Jörg Heinze (Gast)


Lesenswert?

Hallo,

ich arbeite mit dem STK500 und einem ATMega8.

Nun versuche ich an ADC0/PC0 eine analoge Spannung zwischen 0 und 5V zu
erfassen.
Ich benutze die interne Referenzspannung des AVR von 2,56V.

Hierzu möchte ich folgendes Prgramm verwenden:

.include "m8def.inc"

.def    akku  = r16
.def    datenl  = r24
.def    datenh  = r25

.CSEG

    rjmp   start
    .ORG  $0B
    rjmp  fertig
    .ORG  $10

start:  ldi    akku,LOW(RAMEND)
    out    SPL,akku
    ldi    akku,$ff
    out    DDRB,akku
    out    DDRD,akku
    ldi    akku,0b01100000
    out    ADMUX,akku
    ldi    akku,0b11101101
    out    ADCSR,akku
    sei

haupt:  nop
    rjmp  haupt

fertig:  push  r24
    push  r25
    in    r24,ADCL
    in    r25,ADCH
    out    PORTD,r25
    out    PORTB,r24
    pop    r25
    pop    r24
    reti
    .EXIT


Aber irgendwie funktioniert das nicht. Ich habe jetzt nur mal den PortD
an die LEDs angeschlossen, um zu sehen, ob sich überhaupt etwas tut.

Die Spannung generiere ich über ein 20K-Potentiometer.

Was stimmt an diesem Programm nicht? Ich bin genau nach Datenblatt des
AVR vorgegangen...

Ich hoffe ihr könnt mir helfen.

Danke + Gruß
Jörg

von Rolf Magnus (Gast)


Lesenswert?

> Nun versuche ich an ADC0/PC0 eine analoge Spannung zwischen 0 und
> 5V zu erfassen.
> Ich benutze die interne Referenzspannung des AVR von 2,56V.

Wenn du die benutzt, kannst du aber auch nur Spannungen bis 2,56V
messen.

>    .ORG  $0B
>    rjmp  fertig

Laut Datenblatt ist an der Adresse 0B der "USART, Rx
complete"-Interrupt.

>    ldi    akku,0b01100000
>    out    ADMUX,akku

Ich dachte, du wolltest die interne Referenzspannung nutzen. Bei dieser
Einstellung wird aber das externe Aref benutzt. Ich schätze mal, du hast
versehentlich die Einsen um ein Bit verschoben. Am besten tippst du
keine Bitkolonnen, sondern die Namen der Bits. Das macht die Sache
übersichtlicher und weniger fehlerträchtig.

     ldi    akku, (1 << REFS1) | (1 << REFS0)

>    ldi    akku,0b11101101
>    out    ADCSR,akku

ADCSR gibt's beim ATmega8 nicht. Das heißt ADCSRA. Möglicherweise wird
aber beides akzeptiert.

von Jörg Heinze (Gast)


Lesenswert?

Es funktioniert!!!

Vielen vielen Dank!!!

Gruß
Jörg

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.