Kann zwar kein Basic aber ist bei dem Ding überhaupt ein 16 Bit Timer eingebaut? Sonst wäre es logisch, dass das Schreiben von 49911 auf ein Byte unmöglich ist.
Hallo zusammen,
das ist möglicherweise eine Anfängerfrage, ich kann aber leider selbst
keine Lösung finden.
Hier als erstes das Problem-Programm aus einem BASCOM-Beispiel, daß ich
auf das nötigste gekürzt habe:
'################################################# #############
' Dieses Demo läßtz eine LED in dem von ihnen gewählten
' Timer-Rhytmus blinken
'################################################# #############
$regfile = "m16def.dat"
'$regfile = "at26def.dat"
$crystal = 8000000
'Hier wird der Timer und der Teiler festgelegt
Config Timer1 = Timer , Prescale = 64
Config Pina.2 = Output 'dritte LED auf als Ausgang programmiert
Led3 Alias Porta.2
On Timer1 Timer_irq
Const Timervorgabe = 49911 'Einstellung für ca. 1 Sekunde
Enable Timer1
Enable Interrupts
Do
'Hier könnte Ihr Hauptprogramm stehen
Loop
Timer_irq:
Timer1 = Timervorgabe
Toggle Led3
Return
'################################################# #############
nun das Problem: Wenn ich
$regfile = "m16def.dat"
ersetze durch:
$regfile = "at26def.dat"
,was meinem Controller entsprechen soll, dann erhalte ich beim Syntax-Check in der Zeile:
Timer1 = Timervorgabe
den Fehler: error 46: assignment error (Timer1: 0 49911: 112)
?????????????????????????????????????????????????? ???????????
Der Fehler tritt nicht auf, wenn ich das Regfile für den
Tiny26 nehme und Timer1 durch Timer0 ersetze. Was ist beim Tiny26
und timer1 anders als bei anderen Controllern oder mache ich etwas
grundsätzliches falsch?
Danke für Eure Hilfe,
Heiner
Kann zwar kein Basic aber ist bei dem Ding überhaupt ein 16 Bit Timer eingebaut? Sonst wäre es logisch, dass das Schreiben von 49911 auf ein Byte unmöglich ist.
Und ich hasse diesselben Postings in zig Foren ...
http://www.mikrocontroller.net/forum...12590.html#new
na gut, die Sache mit dem 16Bit-Timer ist erledigt. Kann es vielleicht sein, daß ich Bascom erst einmal beibringen muß, daß es sich bei Timer1 um einen 8-Bit-Timer handelt? Denn auch wenn ich einen 8-Bit-Wert lade, ist immer noch das gleiche Prob vorhanden. Normalerweise sollte das doch in der def.dat definiert sein oder?
Hallo "Gast", kann ich was dafür, daß Du in allen möglichen Foren rumtobst?
Was hast du denn für einen Controller? at26def.dat sagt mir nix
Und warum? Ist doch dein persönliches Problem, wenn du in mehreren Foren mitliest.Und ich hasse diesselben Postings in zig Foren ...
http://www.mikrocontroller.net/forum...12590.html#new
Ich habe nicht die Zeit regelmässig zig Foren zu lesen und zu vergleichen und bin deswegen froh, wenn möglichst viele Fragen hier gestellt und beantwortet werden.
Könnte mir vorstellen, dass es einige Leute auf mikrocontroller.net ähnlich sehen.
Davon mal abgesehen kann es eigentlich nie Schaden sich zu einer Frage oder einem Problem möglichst viele verschiedenen Meinungen einzuholen - im Prinzip machst du das ja wohl selber, wenn du verschiedene Foren parallel liest.
Wenn du zwei Zeitungen liest oder zwei unterschiedliche Nachrichtensendungen ansiehst, wärs wohl auch etwas viel verlangt, dass die sich untereinander absprechen und dir keine Doubletten zumuten.
es handelt sich um einen Atmel Tiny26. Kann es vielleicht sein, daß ich bei diesem Tiny ein anderes Register setzen muß um Timer1 voreinzustellen? Ich hab mich schon im Manual schummrig gelesen. Auch kannn ich zum Tiny26 leider keine Programmbeispiele finden, die mir zeigen können wie es richtig gemacht wird...
Ich denke der Tiny26 hat vermutlich keinen 16 Bit Timer. Somit kannst du den Source so nicht verwenden. So wie es aussieht hast du das Programm mit dem Tool RN-AVR generiert. Wähle da mal 8 Bit Timer und generiere Code neu, dann sollte es auch auf Controllern ohne 16 Bit Timern gehen.
Der Mega16 besitzt einen 16 Bit Timer!
Nach Deinen Konstanten und meinen Berechnungen zu urteilen wird der Interrupt aber alle 0,12 Sekunden ausgelöst.
Probiers mal mit:
"Prescale = 256"
und
"Timer1 = 34285" (als ersten Befehl in die Interruptroutine schreiben!!!)
Jepp! Er hat zwar zwei aber (leider) nur mit je 8 Bit...der Tiny26 hat..keinen 16 Bit Timer
stimmt, so hatte ich das beabsichtigt, genauer gesagt sollten es 0,125 Sekunden sein und damit gleichzeitig der kürzeste Interrupt-Zyklus um den Programmablauf möglichst wenig aufzuhalten.Nach Deinen Konstanten und meinen Berechnungen zu urteilen wird der Interrupt aber alle 0,12 Sekunden ausgelöst.
Hab ich getestet, bringt leider auch keinen Erfolg. Ich denke fast Timer1 funktioniert nur im Zusammenhang mit 16-Bit-Timern. Also werde ich wohl mit 8 Bit leben müssen (0,033 Sekunden). Kann es sein, dass TCNT1 das Register ist über daß ich 8-Bit-Timer1 auslesen und einstellen kann?"Prescale = 256"
und
"Timer1 = 34285"
Damit Danke an alle, die sich sehr bemüht haben, vielleicht bin ich auch irgendwann mal so weit hier helfen zu können.
Lesezeichen