PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Bekomme Timer1 bei 2313 nicht zum laufen



06.08.2004, 15:44
Hallöle

Ich beschäftige mich erst seit ca. vier Wochen mit Mikrocontroller und habe deshalb Timer-Neulingsproblem mit Bascom.
Es sollen einzelne Pins eines Ports nacheinander ein- und wieder ausgeschaltet werden. Das ganze dient der Ansteuerung von Servos, die als Stellmotor nach einem Tastendruck lediglich zwei bestimmte Positionen langsam anfahren sollen.
Ich habe schon alles mit For..Next – Schleifen zum laufen gebracht, was mir aber mit 3,5µs/Schleife schlichtweg zu lange dauert, da das Signal um nur 110µs verkürzt werden kann (Stellvorgang dauert nur 600ms was mir zu kurz ist). Deshalb brachte mich ein Bekannter auf die Idee die Internen Timer zu nutzen. So weit so gut alles mal in den Rechner getippert und den Versuch einer Simulation unternommen. Nach dem Start der Simulation bleibt das Prog bei „loop until...“ stehen und Timer1 hat angeblich den Wert „0“. Hat jemand eine Idee was ich falsch mache? – Im Forum habe ich leider keinen vergleichbaren Thread gefunden.

Hier mal ein Auszug aus meinem Programm:


$regfile „2313def.dat“
$crystal = 10000000

Config Timer1 = counter, edge = rising, prescale = 8
Config portb = output
Dim a(2) as Word

Begin1:
Timer1 = 0 ‘Timer auf “0” zurücksetzen
Set pind.0 ‘Pind.0 logisch 1
Do
loop until timer1 = a(1)
reset pind.0 ‘pind.0 logisch null
.
.
.
Goto begin1: ‘letzter Programmpunkt

MfG der E-Fan

Michael
06.08.2004, 15:54
Hallo Gast-E-Fan,

Config Timer1 = counter, edge = rising, prescale = 8
hmm, willst du nicht einen Timer, der irgendwann einen Interrupt auslöst?
Dann solltest du "Config Timer1 = Timer..." schreiben.
Such doch mal in der bascom-Hilfe nach timer1, das ist dort sehr gut beschrieben(mit Beispiel)
Gruss, Michael

06.08.2004, 16:46
Habe ich dabei noch bestimmte Dinge zu beachten?
Mit Interrupten zu arbeiten ist für mich absolutes Neuland.
mfG der E-Fan

Michael
06.08.2004, 17:26
Hallo Gast (E-Fan?),

ist für mich absolutes Neuland.
keiner ist als Meister vom Himmel gefallen ;)
Du solltes dir wirklich die Bascom-Hilfe zu Herzen nehmen, es gibt dort viele Erklärungen und Beispiele. Auch das Samples-Verzeichnis hat viel zu bieten.
Ich geb dir mal einen Codeschnipsel, zu deinem Timer1-Problem, damit du die Richtung kapierst ;) :



Config Timer1 = Timer , Prescale = 64

On Timer1 Timer1_isr ' Jump to Timer1 ISR


Enable Timer1 ' Enable the timer interrupt
Enable Interrupts ' Enable Global Interrupt

Do
Nop
Loop

End

Timer1_isr:
Portb.0 = Not Pinb.0
Timer1 = 65536 - 62500 ' Reload Timer1 for Period of 1 sec
Return




Gruss, Michael

06.08.2004, 17:38
Danke Michael! :D
Muss ich heute Abend gleich mal ausprobieren.