www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC mit Mega8


Autor: Jörg Heinze (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Heinze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es funktioniert!!!

Vielen vielen Dank!!!

Gruß
Jörg

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.