du solltest mal den interrupt disablen wenn du die comparewerte änderst.
mfg psft
Hallo zusammen,
ich verwende einen Mega8, intern getaktet.
Dazu den Timer1 mit Prescale=8
Ich habe zwei Compare drinnen.
Compare1a und Compare1b.
So sieht der Timer1-spezifische Code in meinem Programm aus:
Config Timer1=Timer, Prescale=8
Enable Timer1
Enable Interrupts
On Compare1a Interrupteins
On Compare1b Inzerruptzwei
D=85
Y=1250
Compare1a=D
Compare1b=Y
Interrupteins:
D=D+85
Compare1a=D
.
.
.
Return
Interruptzwei:
Y=Y+1250
Compare1b=Y
.
.
.
Return
In den jeweiligen Interrupt-Routinen werden die entsprechenden Werte zum Wert des Compare-Registers dazuaddiert, damit nach der richtigen Zeit der Interrupt wieder kommt...
Nur: Der Code funktioniert irgendwie nicht...
Hab ich was vergessen? In meinen Augen sollt er gehen..
Herzlichen Gruss
Mario
du solltest mal den interrupt disablen wenn du die comparewerte änderst.
mfg psft
Ok, Interrupts hab ich disabled, geht trotzdem nicht!
Ich hab mal schnell ein Testprogramm geschrieben, mit dem ich mit dem Bascom-Simulator das Ganze testen will:
Aber:Code:Config Timer1 = Timer , Prescale = 8 ' Timer 1 für Zeit und Array Enable Timer1 Enable Interrupts On Compare1a Eins On Compare1b Zwei Dim X As Long Dim Y As Long X = 1 Y = 6 Compare1a = X Compare1b = Y Start Timer1 Cls Locate 2 , 1 Lcd "Hello World" Do Loop Eins: X = X + 5 Compare1a = X Cls Locate 1 , 1 Lcd "Eins" Return Zwei: Y = Y + 5 Compare1b = Y Cls Locate 1 , 1 Lcd "Zwei" Return End
Auch das funktioniert nicht! Deshalb meine Frage: Kann das Bascom überhaupt? In der Hilfe und den Samples steht nirgends etwas, bei dem der Timer1 in dieser Funktion verwendet wird....
Herzlichen Gruss
Mario
....Der Wert im Output Compare Register wird ständig mit dem aktuellen Wert im Datenregister TCNT1H/TCNT1L verglichen. Stimmen die beiden Werte überein, so wird ein sogenannter Output Compare Match ausgelöst. Die entsprechenden Aktionen werden über die Timer/Counter 1 Control und Status Register eingestellt.
Zum Auslesen des Registers wird von der CPU ein internes TEMP-Register verwendet. Das gleiche Register wird auch verwendet, wenn auf OCR1 oder ICR1 zugegriffen wird. Deshalb müssen vor dem Zugriff auf eines dieser Register alle Interrupts gesperrt werden, weil sonst die Möglichkeit des gleichzeitigen Zugriffs auf das Temporärregister gegeben ist, was natürlich zu fehlerhaftem Verhalten des Programms führt.. Zudem muss zuerst OCR1L und erst danach OCR1H ausgelesen werden.
Wenn in das Register geschrieben werden soll, müssen ebenfalls alle Interrupts gesperrt werden. Dann muss zuerst das OCR1H-Register und erst danach das OCR1L-Register geschrieben werden, also genau die umgekehrte Reihenfolge wie beim Lesen des Registers.....
ein interessanter auszug.
mfg psft
Ok, also wenn der Interrupt kommt
"disable Interrupts" schreiben, und dann vor "return" wieder enablen...
Nur: Wie geht das mit dem OCR1? (Bascom-Befehl) Muss ich die im Dualsystem beschreiben? Wie läuft das jetzt? Welches Byte zuerst?
Ich muss zuerst eine Zahl ins OCR1H stecken und dann eine Zahl ins OCR1L. Nur: Wie? Wenn ich z.B. 100 da reintun möchte.. ?
Herzliche Grüsse und Danke für deine Unterstützung!
(Was meinst du mit interessanter Auszug? Ist doch ein etwas falscher Code.. ?)
Genau.Zitat von Murus
Ganz einfach. Bascom erledigt das sortieren der Reihenfolge selbst, Du brauchst Dich also nicht darum zu kümmern.Nur: Wie geht das mit dem OCR1? (Bascom-Befehl) Muss ich die im Dualsystem beschreiben? Wie läuft das jetzt? Welches Byte zuerst?
Ich muss zuerst eine Zahl ins OCR1H stecken und dann eine Zahl ins OCR1L. Nur: Wie? Wenn ich z.B. 100 da reintun möchte.. ?
COMPARE1A = var
var = COMPARE1A TIMER1 COMPARE A register
COMARE1B = var
var = COMPARE1B TIMER1 COMPARE B register
So steht es auch in der Hilfe.
Pebisoft macht die Dinge eben gerne etwas komplizierter, als sie sind.
Grüße
Henrik
wenn Bascom dein "disable interrupt" nicht annehmen/verarbeiten tut,
kannst du die register nicht beschreiben.
mfg psft
Warum sollte Bascom "disable interrupts" nicht ausführen? Das tut es bei mir -und nicht nur bei mir- völlig problemlos. Wäre schön, wenn Du Dich an Deine Schreibsperre halten würdest.Zitat von Anonymous
Henrik
der gast ist pebisoft und nicht anonymous . hast wohl probleme oder.
--------------------DELETED ------------------ (PicNick)
dann kann ich dir das proggen und die interna von Bascom mal beibringen.
mfg psft
Lesezeichen