www.mikrocontroller.net

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


Autor: Heiner Schmitz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...:-)

Autor: ...HanneS... (Gast)
Datum:

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

...HanneS...

Autor: Heiner Schmitz (Gast)
Datum:

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

Autor: HansHans (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht versuchst du mal, die Variable als Byte zu dimensionieren?

Autor: HansHans (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Code kommt mir bekannt vor. Du hast es sicher mit RN-AVR generiert
http://www.roboternetz.de/phpBB2/dload.php?action=...

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.

Autor: Heiner Schmitz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: HansHans (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.