[ASM] Atmega8 - ADC Wert im SRAM speichern

OP #2492363
Lesenswert?
• ▲
▼
Nabend zusammen,

da ich mir einen Platinen-Laminator baue, muss ich einen 
Temperaturmesswert einlesen. Dazu nutze ich den ADC Eingang.

Nun möchte ich den Wert des ADC im SRAM ablegen, das ich den dann mit 
einem Wert im EEPROM vergleichen kann.

Folgenden Code habe ich geschrieben. Bin mir aber nicht sicher, ob das 
auch so richtig ist (ob ich das richtig verstanden habe). Mit mehr als 
8Bit habe ich noch keine Erfahrung. Ich habe bisher nur mit 8Bit 
gearbeitet.
1
add adlow, adhigh
2
sts ADC_Messwert, adlow
Für ADC_Messwert habe ich im SRAM 2Byte reserviert.

Deshalb meine frage. Ist das richtig, das ich adhigh mit adlow addieren 
muss und dann in SRAM abspeichern kann. Irgendwie habe ich das noch 
nicht ganz verstanden.

Danke schonmal.

Grüße
Stephan
OP #2492393
Lesenswert?
• ▲
▼
Herr Mueller schrieb:
> Nicht addieren. Auch das Sram besteht nur aus 8 bit Speicherstellen. Du
> musst erst Adlow abspeichern und dann in ADC_Messwert+1 Adhigh
Hmm. Okay, dann hab ich das wohl nicht ganz verstanden gehabt.
Nun zu dem was Du sagst. Habe ich dann wenigstens das richtig 
verstanden?
1
    sts ADC_Messwert, adlow
2
    sts ADC_Messwert+1, adhigh

>
> Nur zum Vergleichen kannst Du sie aber auch in 2 Register übertragen, da
> brauchst Du nicht unbedingt das Sram. Immer erst ADCL, dann ADCH lesen.
Naja. Ein bisschen üben ist da auch noch mit dabei. Ob das gebraucht 
wird oder nicht, stelle ich mal hinten an. Und solange der Flash nicht 
bei 100% angekommen ist, kann ich mich getrost austoben zum lernen :)
OP #2492412
Lesenswert?
• ▲
▼
Okay, dann fehlt mir nur noch das verständnis dazu, was der Code dann 
genau macht.

Hier mal, was ich mir dazu denken kann.
Da ich im SRAM ja 2Byte reserviert habe, wird durch das +1 der Zeiger 
auf die nächsten 8Bit gesetzt.
Stimmt das so?

Ach ja, das mit dem Low-Byte als erstes lesen steht ja auch im Tutorial 
drinne. Genauso, das man immer auch das High-Byte lesen muss, da sonst 
eine nachfolgende Messung nicht mehr möglich ist. Steht aber auch im 
Datenblatt.
#2492420
Lesenswert?
• ▲
▼
genau,

wenn Du z.B dein   'ADC_Messwert'  gleich am Anfang des Datensegments

.dseg
ADC_Messwert:  .byte 2

gesetzt hast, hat es die Adresse 0x0060

das  .byte 2   bedeutet nur, dass die nächste freie Adresse für die 
nächste Speicherstelle erst wieder 0x0062 ist

der Assembler rechnet ADC_Messwert+1 aus in 0x0061 und setzt die Werte 
in dein Programm ein. d.h.  aus

    sts ADC_Messwert, adlow
    sts ADC_Messwert+1, adhigh

wird

    sts 0x0060, R18
    sts 0x0061, R19     ; R18/19 nur als Beispiel

Antwort schreiben

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.

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.