www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mega88 adc Memory Mapped


Autor: DerGast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

habe gerade einen Mega88 auf dem STK500 und bin am probieren den ADC in 
Betrieb zu nehmen.
Ein 22k Poti ist mit dem Schleifer am adc0 angeschlossen, die beiden 
aüsseren Pins des Poti sind an +5V und an GND angeschlossen.
Der Analogwert soll an PortD ausgegeben werden.
PortD ist mit den 8 LEDs auf dem STK verbunden.

Mein Code (Basierend auf 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC) läuft soweit, 
jedoch habe ich Änderungen vorgenommen damit ich auf die jetzt (Mega88) 
Memory Mapped ADC-Register zugreifen kann.
.include "m88def.inc"
.def temp1     = r16         ; allgemeines temp Register, zur kurzfristigen Verwendung
.def temp2     = r17         ; Register für 24 Bit Addition, Lowest Byte
.def temp3     = r18         ; Register für 24 Bit Addition, Middle Byte
.def temp4     = r19         ; Register für 24 Bit Addition, Highest Byte


 
    ldi     temp1, LOW(RAMEND)                  ; Stackpointer initialisieren
    out     SPL, temp1
    ldi     temp1, HIGH(RAMEND)
    out     SPH, temp1
     ldi        temp1,0xff
    out        ddrd,temp1
;    clr        temp1
    out        portd,temp1

 
; ADC initialisieren: ADC0, Vcc als Referenz, Single Conversion, Vorteiler 128
 
    ldi     temp1, (1<<REFS0) |(1<<ADLAR)          ; Kanal 0, interne Referenzspannung 5V, Analogwerte Linksbündig
    sts     ADMUX, temp1
    ldi     temp1, (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0)
    sts     ADCSRA, temp1



sample_adc:
     ldi        temp1,1<<adsc|1<<aden
    sts     ADCSRA,temp1        ; den ADC starten
 
wait_adc:

    lds        temp1,adcsra
    andi    temp1,adsc
    brne    wait_adc

;    sbic    ADCSRA, ADSC        ; wenn der ADC fertig ist, wird dieses Bit gelöscht
;   rjmp    wait_adc

    lds      temp1, ADCL         ; immer zuerst LOW Byte lesen
    lds      temp1, ADCH        ; danach das mittlerweile gesperrte High Byte
    out        portd,temp1
    rjmp    sample_adc 


Frage: Geht das auch eleganter, oder muss ich statt out immer mit LDS - 
STS arbeiten ?

Grüsse

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Datenblatt ist da doch recht eindeutig:
> For the Extended I/O space from 0x60 - 0xFF in SRAM,
> only the ST/STS/STD and LD/LDS/LDD
> instructions can be used

Autor: DerGast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke dir, habs gefunden.
;-) Das Kleingedruckte muss man natürlich auch lesen.

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.