ADC mit Mega8

Gast #262298
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
Gast #262299
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.