Atmega1281 (auch 2561) und Timer 4 & 5

Knickohr

BASCOM-Experte
29. Feb. 2008
465
0
16
Sprachen
Hallo,

da sich meine Wetterstation langsam weiter entwickelt brauche ich noch weitere Timer. Nun gut, der Atmega1281 hat ja 6, reicht ja, dachte ich. Aber unter BASCOM ist es nicht möglich, Timer 4 & 5 korrekt anzusprechen. Offensichtlich sind da einige Funktionen (noch) nicht implementiert.

Ich brauche genau so etwas auf Timer 4 oder 5 :

Code:
Config Timer3 = Timer , Prescale = 8                                  ' Timer für 40Hz (25ms)
Timer3 = 40536
On Timer3 Timer_dcf77                                                      ' Überlauf alle 25ms
Disable Timer3                                                                  ' Timer für DCF77 noch disablen
.
.
.

Timer_dcf77:                                                                     ' Timer zur DCF77-Decodierung
   Timer3 = 40536
   Call Dcf77
Return

Wobei BASCOM das noch zuläßt :

Code:
Config Timer4 = Timer , Prescale = 8                                  ' Timer für 40Hz (25ms)
Timer4 = 40536

Disable Timer4                                                                  ' Timer für DCF77 noch disablen
.
.
.

Timer_dcf77:                                                                     ' Timer zur DCF77-Decodierung
   Timer4 = 40536
   Call Dcf77
Return

Hier fängt BASCOM an zu motzen :

On Timer4 Timer_dcf77 ' Überlauf alle 25ms

Error : 117 Line : 411 Unknown interrupt [TIMER4] , in File : D:\ASTRO WETTERSTATION\BASCOM\PROZESSOR\128K\WETTER.BAS

Da es mit BASCOM-Code nicht geht, dachte ich mir, es muß mit ASM gehen. Wäre da nicht das Problem, das ich null Ahnung von ASM habe :(

Hat jemand passenden Code parat, den ich "einbauen" kann ? BASCOM laßt ja ASM zu.

Thomas
 
Hi Thomas!

Da es mit BASCOM-Code nicht geht, dachte ich mir, es muß mit ASM gehen. Wäre da nicht das Problem, das ich null Ahnung von ASM habe :(

Hat jemand passenden Code parat, den ich "einbauen" kann ? BASCOM laßt ja ASM zu.

Leider bin ich mit meinen Assembler-Basteleien noch nicht zu den
Timer/Countern vorgedrungen :(
Könnte bei mir also noch etwas dauern bis Du in dem Bereich Hilfe von mir
bekommen kannst. Aber wer weiß wie sich das entwickelt :rolleyes:

Gruß
Dino
 
Hallo Dino,

ich bin mir fast sicher, das es wieder so ein Problem mit den Variablendefinitionen in der m1281def.dat oder m2561def.dat ist. Wäre ja nicht das erste mal. Er motzt ja den Interrupt [TIMER4] an. Ist sicher nicht definiert oder hat einen anderen Namen.

Thomas
 
Hi Thomas

Variablendefinitionen in der m1281def.dat oder m2561def.dat

Sind die Dateien bei der Nix-Kost-Version auch dabei ? Hab noch keinen
BASCOM besorgt (wegen Assembler-Basteleien). Dann könnte ich mal eben
die 4k-Version installieren und mal schnell drüberschauen wenn ich da
überhaupt noch was sehe :D Vernichte nämlich gerade ein wenig
Doppel-Hirsch (Brauerei Höss) - Dat Zeugs muß weg :D Läuft Mitte
Januar ab.

Gruß
Dino
 
Neue def-Datei

Hi Thomas

Jau! Sie ist bei der 4k-Version dabei :)

Das sind alles nur Definitionen, damit der Compiler die Adressen der
Register und der Bits kennt. Ich hab mal die fehlenden 4 Ports ergänzt
(2Bit von PortG und 8Bit-PortH,J,K,L) und noch ein wenig anderes.
Am Anfang scheint definiert zu sein, welche Timer auf welchen
"normalen" Port-Pins liegen. Weiter hinten sind die Adressen der Register.

Versuch mal dein Glück. Aber mach BITTE VORHER EIN BACKUP von deiner
alten def-Datei !!!

Anhang anzeigen m1281def.dat.zip

Ohne Gewähr - Aber nen Versuch ist es Wert ;)

Eigentlich recht strukturiert.
Und jetzt kommt die 2te Flasche :cheers:

Gruß
Dino
 
Hallo Dino,

Danke für Deine Mühe :)

Ich traue es mich kaum zu sagen :victory: Ich habe auch eine Lösung gefunden :

einfach

On Timer4 Timer_dcf77

durch

On Ovf4 Timer_dcf77

esetzen.

Geht anstandslos. Nun ja, so haben wir "früher" in BASCOM auch die Interrupts gesetzt ;)

Werde mir gleich mal Deine def.dat anschauen. Offensichtlich sind die original Dinger noch recht madig.

Thomas
 
Ich nochmal ;)

Ähhmmm, Dino.

Die def.dat tut nicht, gleicher Fehler wie vorher. Offensichtlich fehlt da noch mehr. Ich denke mal, die Zuordnung Ovf4 zu TIMER4 oder so was in der Art.

Egal, mach Dir keinen Streß. Trink lieber noch eins :cheers:

Thomas
 
Hi Thomas ...

Danke für Deine Mühe :)
Hatte grade nix anderes zu tun :D

einfach

On Timer4 Timer_dcf77

durch

On Ovf4 Timer_dcf77

esetzen.
Und was heißt dieses Ovf4 ? Overflow ? (Timerüberlauf ?)


Werde mir gleich mal Deine def.dat anschauen. Offensichtlich sind die original Dinger noch recht madig.
Scheint mir auch so :hahaha:
An manchen Stellen findet man noch "New" drin - Also neu Ports oder so.
Aber beim 1281 ist Port G nicht unbedingt new. Dafür haben die dann
auch die Adressen der Portregister von H-L "vergessen" :eek:
Und am Anfang ist die Definition für die Timer 3-5 auf die Port-Pins
auch nicht drin. Scheint schnell mal zusammengestrickt zu sein (Happy
Copy-And-Paste) :rolleyes:

So ! 2te Flasche ist in Arbeit :cheers: Lecker! :cheers:
Das reicht aber auch. So wenig wie ich trinke - da ist es kein
Wunder das die Pullen kurz vor Ablauf sind. :offtopic:

Gruß
Dino
 
Hallo,

jepp das ist der Overflow-Interrupt vom Timer4. Gott Sei Dank nimmt BASCOM die ASM-Definitionen ohne Probleme an.

Ein ähnliches Problem hatte ich vor ein paar Tagen mit dem Infrarot-Empfänger.

BASCOM bietet ein schöne Getrc5-Routine zum Dekodieren an. Tja, aber leider nicht richtig gestrickt. Was bei den kleineren Prozessoren funktioniert, fällt bei den neueren auf die Nase. Erst die Abhilfe mit einer kleinen ASM-Deklaration brachte den erwünschten Erfolg :

$asm ' Wichtig, damit der Getrc5 beim Atmega1281 mit Timer0 funktioniert !
.equ Timsk = Timsk0
$end Asm

Offensichtlich gibt es bei den neueren Prozessoren den TIMSK nicht mehr und ist durch TIMSK0 ersetzt worden. Ich glaube, ich lerne doch noch ASM !

Thomas
 
Hi Thomas,
Offensichtlich gibt es bei den neueren Prozessoren den TIMSK nicht mehr und ist durch TIMSK0 ersetzt worden. Ich glaube, ich lerne doch noch ASM !
Steht auch nix mehr mit TIMSK in der Definition drin. Nur noch TIMSK0 ... TIMSK5 .
Ist wohl noch ein Überbleibsel aus der Zeit mit einem einzigen Timer in der CPU.
Das steht an einigen Stellen. Aber in der Zeile INT=EIMSK,1,EIFR,1,EIMSK,2, ....
werde ich aus der 2ten Ziffer nicht ganz schlau. Das ist eine Liste mit 2 Einträgen
für die Interrupts und die Maskenregister. Der erste Eintrag ist das Maskenregister
aber die Ziffer dahinter ?? und dann kommt das nächste Maskenregister.

Aber das mit dem ASM ist doch ein guter Vorsatz für das neue Jahr 2009 :D

- - - - - - - - - - - - - - -
Ergänzung :

Ganz oben steht :
T0_PULSE=NA ; pulse generator TIMER 0
T1_PULSE=PORTD.6 ; pulse generator TIMER 1
T2_PULSE=PORTD.7 ; pulse generator TIMER 2

Hier wird angegeben, auf welchen "normalen" Port-Pins etwas liegt.

In der Definition steht oben ...
INT=EIMSK,1,EIFR,1, ... TIMSK4,2,TIFR4,2,TIMSK4,4,TIFR4,4,TIMSK4,8,TIFR4,8,TIMSK4,1,TIFR4,1, ...

Der erste Wert ist das Register und der 2te Wert ist die Wertigkeit des entsprechenden Bits. Die Position in der Liste legt wohl die Reihenfolge (Priorität)
der Interrupts fest.

Weiter unten steht dann ...
; ***** TIMER_COUNTER_4 **************
; TIMSK4 - Timer/Counter4 Interrupt Mask Register
TOIE4 = 0 ; Timer/Counter4 Overflow Interrupt Enable
OCIE4A = 1 ; Timer/Counter4 Output Compare A Match Interrupt Enable
OCIE4B = 2 ; Timer/Counter4 Output Compare B Match Interrupt Enable
OCIE4C = 3 ; Timer/Counter4 Output Compare C Match Interrupt Enable
ICIE4 = 5 ; Timer/Counter4 Input Capture Interrupt Enable

Da sind die Bitnamen zu den Bitnummern in den entsprechenden Registern definiert.

In diesem Bereich stehen die Adressen der benannten Register ...
OCR4CL=$ac
OCR4CH=$ad
OCR4BL=$aa
OCR4BH=$ab
OCR4AL=$a8
OCR4AH=$a9
ICR4L=$a6
ICR4H=$a7
TCNT4L=$a4
TCNT4H=$a5
TCCR4C=$a2
TCCR4B=$a1
TCCR4A=$a0

- - - - - - - - - - - - - - -



Gruß
Dino
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)