Einen wunderschöenen guten Abend allerseits
Ich habe derzeit an einer Auswertung des allseits beliebten
DCF-77-Empfängers für eine Funkuhr.
Nun ist dies mein erster richtiger Kontakt mit µControllern und
dementsprechend fehlt mir die Routine, aber die kommt noch ;)
Ich arbeite mit dem STK500 sowie AVR Studio 4 (Version 4.12) und das
ganze soll laufen auf einem ATmega8.
Nun zu meinem Problem:
1.
Der Stack Monitor des AVR Studio-Debuggers ist bei mir komplett
"disabled". Ich habe den Stackpointer zuvor angelegt
1
ldi temp,LOW(RAMEND)
2
out SPL, temp
3
ldi temp,HIGH(RAMEND)
4
out SPH, temp
Des weiteren scheint alles zu funktionieren soweit ich das ohne
Stack-Monitor feststellen kann.
Es gab hier schonmal einen Thread wo exakt das selbe Problem beschrieben
wurde, allerdings wurde dort nicht so recht erklärt woran es denn nun
liegt.
2.
Im Zuge der Abtastung des DCF-Signals will ich das Output Compare
Register von Timer 1 auslesen und dessen Inhalt mit einer Konstanten
addieren. Nun habe ich die Möglichkeit High-und LowByte des Registers
einzeln mit der Konstanten zu addieren. Das erscheint mir jedoch recht
umständlich. Viel praktischer währe es, wenn man High-und Lowbyte direkt
in einem verarbeiten könnte.
Geht das oder spinn' ich mir hier grad was zusammen?
3.
Eine Kleinigkeit die ich komischerweise in diversen Guides nicht habe
finden können:
Wenn ich SRAM-Segmente mit .DSEG definiere, so steht in der Beschreibung
das die folgenden Speicherreservierungen sich auf das SRAM beziehen. Wie
beende ich diese "folge"? Wie sag ich dem Compiler, dass nun wieder
RAM-Speicherreservierungen folgen sollen?
Mit freundlichen Grüßen
Narf
PS: Das Stack-Monitor Problem nervt mich nun seit 4 Stunden, währ' für
Hilfe echt dankbar!
Hi
>Ich arbeite mit dem STK500 sowie AVR Studio 4 (Version 4.12) und das>ganze soll laufen auf einem ATmega8.
Nicht gerade der letzte Schrei (aktuell 4.12 SP1).
>Der Stack Monitor des AVR Studio-Debuggers ist bei mir komplett>"disabled".
???
>Nun habe ich die Möglichkeit High-und LowByte des Registers>einzeln mit der Konstanten zu addieren. Das erscheint mir jedoch recht>umständlich. Viel praktischer währe es, wenn man High-und Lowbyte direkt>in einem verarbeiten könnte.
Kommt auf die Konstante an: adiw r17:r16,K geht für K=0...63
>Wie sag ich dem Compiler, dass nun wieder RAM-Speicherreservierungen>folgen sollen?
Du meinst bestimmt ROM (Flash) : '.cseg'
MfG Spess
Simon T. schrieb:
> Im Zuge der Abtastung des DCF-Signals will ich das Output Compare> Register von Timer 1 auslesen und dessen Inhalt mit einer Konstanten> addieren. Nun habe ich die Möglichkeit High-und LowByte des Registers> einzeln mit der Konstanten zu addieren. Das erscheint mir jedoch recht> umständlich. Viel praktischer währe es, wenn man High-und Lowbyte direkt> in einem verarbeiten könnte.
Ja, so macht man es, wenn es möglichst kompliziert sein soll.
Oder man überlegt sich erstmal, was für Zeiten überhaupt auftreten
können.
Da sind die Bitzeiten (100ms/200ms) und die Bitrate (1s/2s).
Wenn man nun einfach nen Timerinterrupt von 10ms aufsetzt, läßt sich
alles prima mit einem Byte abzählen. Die Bitwerte (10/20) lassen sich
gut unterscheiden. Zusätzlich bewirkt die Abtastung im Timerinterrupt ne
Störunterdrückung von kurzen Impulsen.
> PS: Das Stack-Monitor Problem nervt mich nun seit 4 Stunden, währ' für> Hilfe echt dankbar!
Was ist ein Stackmonitor, wozu braucht man sowas?
Programmier doch einfach in C, dann kümmert sich der Compiler um den
Stack.
Peter
P.S.:
Als 1997 der AVR rauskam und ich damit anfing, gabs noch keinen
Debugger.
Und wenn man nen Chip erstmal kennt, braucht man ihn dann auch nicht
mehr.
Ich hab' mal nen Screen von dem "disabled" Stack Monitor gemacht
> Nicht gerade der letzte Schrei (aktuell 4.12 SP1).
Ich werd mich mal nach dem Update umsehen
> Kommt auf die Konstante an: adiw r17:r16,K geht für K=0...63
Okey, meine Konstante ist leider größer, aber danke
> Du meinst bestimmt ROM (Flash) : '.cseg'
Den hab ich gesucht. Danke!
> Ja, so macht man es, wenn es möglichst kompliziert sein soll.>> Oder man überlegt sich erstmal, was für Zeiten überhaupt auftreten> können.> Da sind die Bitzeiten (100ms/200ms) und die Bitrate (1s/2s).> Wenn man nun einfach nen Timerinterrupt von 10ms aufsetzt, läßt sich> alles prima mit einem Byte abzählen. Die Bitwerte (10/20) lassen sich> gut unterscheiden. Zusätzlich bewirkt die Abtastung im Timerinterrupt ne> Störunterdrückung von kurzen Impulsen.
Mir ist klar, dass meine Version wahrscheinlich viel zu kompliziert ist.
Aber genau deswegen arbeite ich in Assembler und nicht in C damit ich
eben den µC wirklich verstehen lerne.
Bis hier hin,
Narf
Simon T. schrieb:
> Aber genau deswegen arbeite ich in Assembler und nicht in C damit ich> eben den µC wirklich verstehen lerne.
Dann mußt Du eben 2 8Bit Befehle machen.
Um z.B. eine 16Bit Konstante zu addieren:
Hi
>Ich hab' mal nen Screen von dem "disabled" Stack Monitor gemacht
Kann ich mit dem aktuellen AVR-Studio niocht nachvollziehen.
Bist du sicher, das du den Simulator eingestellt hast?
> Kommt auf die Konstante an: adiw r17:r16,K geht für K=0...63
Okey, meine Konstante ist leider größer, aber danke
Dann:
add r16,Low(k)
adc r17,High(k)
k=0...65535
MfG Spess