Bascom Sekundentimer mit Mega8

Bonze

Neues Mitglied
16. Jan. 2010
516
0
0
Altenkirchen (Pfalz)
Sprachen
  1. BascomAVR
Ich hab nen mega8 und versuche nen Sekunden Timer zu erzeugen. Das funktioniert aber nicht so ganz, der Timer ist viiiel zu schnell
Er läfut mit 8mhz, dachte so:
8000000 /256 = 31250
66535-31250 = 34285 Startwert


Code:
Config Timer2 = Timer , Prescale = 256                                         
       Timer2 = 34285                                                          
       On Timer2 Tim2_isr
       Enable Timer2
       Start Timer2

Tim2_isr:                                                                   
      Incr Isek
Return
 
Hallo Bonze,

Timer2 ist 8Bit breit. 34.285 passen da nicht rein.
Außerdem müsstest du in der ISR den Timer wieder initialisieren ... oder besser den Compareinterrupt verwenden, das ist eleganter. Wie man das in Bascom macht, weiß ich allerdings nicht. Du wirst aber einen 16 Bit Timer benötigen.

Ansonsten: Zum Berechnen der Nachladewerte oder der Comparewerte kannst du unseren AVR-Timer-Calculator verwenden.

Gruß,
Dirk
 
mh gut zu wissen, aber :D
dann sollte es doch mit ner zwischenvariable (word) gehen oder?
diese zaehl ich dann als timer wert hoch,.
brauch einen 1 sek takt,. hab nurnoch 8bit timer frei,.
 
dann sollte es doch mit ner zwischenvariable (word) gehen oder?
diese zaehl ich dann als timer wert hoch,.
brauch einen 1 sek takt,. hab nurnoch 8bit timer frei,.
Ja, das kannst du sicher machen. In C mache ich es oft so, dass ich einen 8Bit Timer verwende, der mir einen Interrupt alle 1ms erzeugt. In der ISR "baue" ich dann solche Counter ein, die mir unterschiedliche Intervalle (zB. 10ms, 100ms, 500ms) für das Hauptprogramm erzeugen. Ich programmiere aber nicht in Bascom, und habe so leider kein Beispiel parat.
 
mh, hast du da nen ansatz dafuer?
sitz grad aufem schlauch,.

dacht an sowas
Code:
Incr Timeri                                                          
           If Timeri = 32 Then
               Incr Timeri2    '1ms
               If Timeri2 = 1000 Then
                    Incr Isek  'sekunden
               Else
                    Timeri2 = 0
               End If
           Else
               Timeri = 0
           End If
 
Hi Bonze,

du benötigst ja für deine 1 Sekunde 31250 Takte (wie du geschrieben hast). Das geht ja nicht in 8Bit rein. Du brauchst also 16Bit oder eben 2x 8Bit (1 hohes Byte und 1 niedriges Byte).

31250 / 256 = 122,0703 (Mist! nix genaues)
31250 / 250 = 125 (das geht)

Also legst du eine Bytevariable für das hohe Byte an (die 125) und läßt deinen Timer jedesmal 250 Takte bis zum Interrupt durchzählen. 250 paßt ja in den 8Bit-Timer. Nach jedem Timerdurchlauf (250 Takte) gibts den Interrupt und der zählt die Variable um eins hoch. Nach 125 mal ist dann 1 Sekunde rum (125 x 250 = 31250).

Nun mußt du das nur noch in Programmcode gießen.

Gruß
Dino
 
Code:
Config Timer2 = Timer , Prescale = 1                                           
       Timer2 = 5                                                               
       On Timer2 Tim2_isr
       Start Timer2

       Enable Interrupts

Tim2_isr:
           Incr Timer_hoch
            If Timer_hoch >= 125 Then
               'Incr Timer_tief
               Incr Isek                                                        'sekunden
               Timer_hoch = 0
           End If
return
mhh klappt auch nich ,.naja is schon spät, werds am wochende nochma probieren,.
 
Hi,

bei Deiner ursprünglichen Berechnung bist Du von einem Prescale von 256 ausgegangen.

LG
 
jepp habs auch gemerkt,
jetzt hab ich nur das problem, das wahrscheinliuch der timerinterrupt meine tempauswertung mit den 1-wire sensoren stört,.
sobald ich den timer nicht verwende werden die sensoren erkannt, nutzte ich den timer in meinem programm, werden sie nich erkannt,.
muss mir da also was einfallen lassen
 

Ü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)