Forum: Mikrocontroller und Digitale Elektronik BASCOM Timer1 error 46: assignment error


von Heiner Schmitz (Gast)


Lesenswert?

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

von crazy horse (Gast)


Lesenswert?

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...:-)

von ...HanneS... (Gast)


Lesenswert?

Das steht mit Sicherheit im den ATMEL-Datenblättern zu den verwendeten
AVRs. Nicht alle Timer1 sind gleich.

...HanneS...

von Heiner Schmitz (Gast)


Lesenswert?

tja, das Problem besteht aber immer noch, wenn man Werte <256 lädt, also
generell beim setzen der Variablen "Timer1". Und nun?

von HansHans (Gast)


Lesenswert?

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

von ...HanneS... (Gast)


Lesenswert?

Vielleicht versuchst du mal, die Variable als Byte zu dimensionieren?

von HansHans (Gast)


Lesenswert?

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

von gast (Gast)


Lesenswert?

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.

von Heiner Schmitz (Gast)


Lesenswert?

-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.

von HansHans (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.