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 '############################################################## [b]$regfile = "m16def.dat"[/b] '$regfile = "at26def.dat" [b]$crystal = 8000000[/b] 'Hier wird der Timer und der Teiler festgelegt [b]Config Timer1 = Timer , Prescale = 64[/b] Config Pina.2 = Output 'dritte LED auf als Ausgang programmiert [b]Led3 Alias Porta.2[/b] [b]On Timer1 Timer_irq[/b] [b]Const Timervorgabe = 49911[/b] 'Einstellung für ca. 1 Sekunde [b]Enable Timer1 Enable Interrupts Do[/b] 'Hier könnte Ihr Hauptprogramm stehen [b]Loop Timer_irq: Timer1 = Timervorgabe Toggle Led3 Return[/b] '############################################################## nun das Problem: Wenn ich [b]$regfile = "m16def.dat"[/b] ersetze durch: [b]$regfile = "at26def.dat"[/b] ,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 [b]nicht[/b] 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
tja, beim Tiny26 ist der Timer1 auch nur ein 8bit-Timer, dementsprechend kann er natürlich nicht mit Werten >255 geladen werden. Wenn man ein Programm schreibt, sollte man schon die jeweilige Hardware wenigstens in Grundzügen kennen...:-)
Das steht mit Sicherheit im den ATMEL-Datenblättern zu den verwendeten AVRs. Nicht alle Timer1 sind gleich. ...HanneS...
tja, das Problem besteht aber immer noch, wenn man Werte <256 lädt, also generell beim setzen der Variablen "Timer1". Und nun?
Da ich kein Tiny26 habe kann ich auch nix testen aber, das mit dem Tiny26 Timer = 8 Bit ist klar. Versuch mal nicht den Bascom Befehl: Timer1 = 123 `Wert sondern schreibe direkt ins Timer Register müsst TCNT1 = 123 `Wert bzw. Tcnt1 = Timervorgabe sein zumindest meckert Bascom dann schon nicht mehr, ob es geht mußt du in deinen tiny26 Test Gruß HansHans
Vielleicht versuchst du mal, die Variable als Byte zu dimensionieren?
Ist zwar Normal nicht nötig aber nach Dim Timer1 As Byte meckert Bascom auch nicht mehr. Jetzt bin ich auch mal gespannt was die Hardware aus den 2 Lösungen macht
Der Code kommt mir bekannt vor. Du hast es sicher mit RN-AVR generiert http://www.roboternetz.de/phpBB2/dload.php?action=file&file_id=169 Dabei mußt du aber bedenken das der Tiny nur 8 Bit Timer hat. Daher mußt du bei RN-AVR vorher die Checkbox Timer0 (8-Bit) klicken und dann Code generieren. Dann klappts.
-Versuch mal nicht den Bascom Befehl: -Timer1 = 123 `Wert -sondern schreibe direkt ins Timer Register -müsst -TCNT1 = 123 `Wert -bzw. Tcnt1 = Timervorgabe -sein @HansHans ha :-) damit hab ich auch schon spekuliert, danke für Deine Bestätigung, das hilft mir und es scheint die Lösung zu sein, weil Timer1 unter BASCOM immer 16-Bit-Timer vorraussetzt... ich bin aber mal gespannt was nach dem Dimensionieren von Timer1 passiert... @Gast ja, das Beispiel stammt aus NR-AVR @alle sonst gibts wohl keine Lösung dafür wie man mit dem 8-Bit-Timer im Tiny26 längere Interrupt-Distanzen zu überbrücken als maximal 0,033 Sekunden? Ideal wären für mich 0,125 Sekunden.
Also wenn ich mich nicht irre , dann hat der Timer1 vom Tiny26 doch ein 14bit Prescaler und somit geht ein Prescal von 16384 Nur mußt du das Bascom wieder über dem direkten Registerweg beibringen dann sollte doch einiges über 33ms drinnen sein (0,524288 sec bei 8Mhz oder)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.