PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Timer-Interrupt im Minutentakt blinken



runner02
30.07.2011, 11:04
Hallo Leute, habe folgendes Programm geschrieben:

Bei Sekunden klappt es toll (Prescaler 64, Startwert Timer 49910)

Aber bei den Minuten leuchtet es viel zu lange!!



$regfile = "m8def.dat"
$crystal = 1000000
$hwstack = 30
$swstack = 30

Config Portb = Output
Config Timer1 = Timer , Prescale = 1024
Enable Timer1


On Timer1 Isr_von_timer1

Enable Interrupts
Timer1 = 6942

Do

Toggle Portb.0
Waitms 200

' Hauptprogramm zb. wait
Loop
End



Isr_von_timer1:

Timer1 = 6942

Toggle Portb.5
Toggle Portb.4

Return

Kann da mal ein erfahrener Programmierer drüberschaun ;) ??


Mfg

Kampi
30.07.2011, 11:40
Also von den Zeiten her scheint das in Ordnung zu sein. Wie lange ist den zu lange bei dir? Sind das nur ein paar Sekunden oder schon Minuten?

runner02
30.07.2011, 13:54
Nach 3-5 min habe ich es immer ausgeschaltet. Jetzt läuft es bereitrs 14min!!

Die 200 ms Led an pb0 geht übrigens, aber wenn die angeschlossen war, hat die andere etwas mitgeflackert... Drum hab ich sie gleich weg


EDIT: 24 min and counting...

radbruch
30.07.2011, 14:06
Hallo

Laut Rechnung sollte es passen:
1024*(65535-6942)=59999232 Kontrollertakte, macht bei 1MHz etwa 60 Sekunden. Mein 8MHz-Mega8 toggelt in der ISR nach etwas mehr als sieben Sekunden (vier mal toggeln in 30,16 handgestoppten Sekunden), also scheint es grundsätzlich zu funktionieren.

Gruß

mic

Kampi
30.07.2011, 14:08
Ich kanns leider nur rechnerisch prüfen, da ich meinen Programmer im Bascom nicht ans laufen kriege -.-
Sicher das bei deinem Controller alles richtig eingestellt ist? Fuses usw.

runner02
30.07.2011, 14:25
Ich kanns leider nur rechnerisch prüfen, da ich meinen Programmer im Bascom nicht ans laufen kriege -.-
Sicher das bei deinem Controller alles richtig eingestellt ist? Fuses usw.

Ich fuse gar nicht... Selbst wenn ich wollte, ich könnt's nicht ;)

30 min, danach hab ich ihn ausgeschaltet... Wär vermutlich noch Stunden weitergelaufen...

radbruch
30.07.2011, 14:28
da ich meinen Programmer im Bascom nicht ans laufen kriegeBascom erzeugt natürlich auch nur .hex-Dateien die man auch mit avrdude oder ponyprog mit jedem Programmer flashen kann. (So bekomme ich die Bascomprogramme auf den asuro, RP6 und bee mit jeweils deren Flashtool)

Wenn die Sekunde passt läuft der Mega8 wohl auch mit 1MHz. Wird die richtige Datei geflasht? Programm richtig kompiliert oder versehentlich nur Syntxcheck ausgeführt? Versuche mal kürzere Zeiten, 1, 5, 10, 20... Sekunden mit Prescaler 1024.

Kampi
30.07.2011, 14:42
Bascom erzeugt natürlich auch nur .hex-Dateien die man auch mit avrdude oder ponyprog mit jedem Programmer flashen kann. (So bekomme ich die Bascomprogramme auf den asuro, RP6 und bee mit jeweils deren Flashtool)


Ja aber das Problem ist der Programmer funktioniert mit AVR Studio auch nicht ;) Und sonst hab ich nur nen PSoC Programmer :(

da_reefer
30.07.2011, 16:49
Hallo,



$hwstack = 30
...
Enable Interrupts
...

ISRs benötigen in Bascom standardmäßig min. 32 Bytes (+ jeweils 2 Byte pro aktive Subroutine, =Rücksprungadresse), ein größerer Wert für hwstack dürfte das Problem also beheben.

mfg

runner02
30.07.2011, 17:55
Hallo,



$hwstack = 30
...
Enable Interrupts
...

ISRs benötigen in Bascom standardmäßig min. 32 Bytes (+ jeweils 2 Byte pro aktive Subroutine, =Rücksprungadresse), ein größerer Wert für hwstack dürfte das Problem also beheben.

mfg



Danke, genau das war das Problem. Ich habe den hardwarestack und den softwarestack auf 80 gedreht - und siehe da - es läuft!!!

Irgendwie komisch, dass es bei 1 sek geklappt hat?!