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
Nicht addieren. Auch das Sram besteht nur aus 8 bit Speicherstellen. Du
musst erst Adlow abspeichern und dann in 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.
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 :)
genau so, wenn Du zuvor
in adlow,ADCL ; low einlesen
in adhigh,ADCH ; high einlesen
gemacht hast.
zum Vergleichen dann
lds adlowAlt ,ADC_Messwert
lds adhighAlt,ADC_Messwert+1
cp adlow ,adlowAlt
cpc adhigh,adhighAlt
br..
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.
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
Okay. Dann habe ich das verstanden.
Danke Dir nochmal für die nette Hilfe.
Stück für stück fügt sich das ganze zu einem logischen Gebilde in meinem
Kopf :)
Eine eigene Frage?
Dieser Thread ist über 14 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.