Forum: Mikrocontroller und Digitale Elektronik Timer Problem (Sec. Timer)


von kime (Gast)


Lesenswert?

Guten Abend

Ich versuche gerade einen Timer zum laufen zu bringen der ca. jede 
Sekunde eins nach unten zählt.

Das ganze funktioniert auch ganz gut , allerdings zählt er zu langsam !

Ich habe den Timer1 des Atmega8 gewählt.

Bei einem Prescaler von 256 sollte er in einer Sekunde bis 31250 zählen 
oder ? Ich habe deswegen den Timer erst bei 34285 starte lassen.
Leider zählt er aber viel zu langsam , ca 2-3 Sekunden pro Tick bzw bis 
er überläuft.

Habe ich einen Denkfehler bei der Rechnung ? Habe ich etwas übersehen

Hier der ganze Code


$regfile = "m8def.dat"
$crystal = 8000000



Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , _
   Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2                                         '
Cls



Dim C As Integer

C = 200





'---------------------------------------------------------
   Config Timer1 = Timer , Prescale = 256
   Enable Timer1
   On Timer1 Isr_von_timer1
   Enable Interrupts
   Timer1 = 34285
'---------------------------------------------------------




     Do


     If C = 0 Then Goto Ende
     Locate 1 , 1 : Lcd C

     Loop


'---------------------------------------------------------
   Isr_von_timer1:

      C = C - 1
      Timer1 = 34285
    Return

'---------------------------------------------------------

 '---------------------------------------------------------
   Ende:
      Lcd "Timer ist Over"
      End
    Return

von Icke (Gast)


Lesenswert?

Riecht nach fusebits CLKDIV8

C = C - 1

Besser:

If C>0 Then
  Decr C
EndIf

Auch:
Erst den Timer setzen dann alles andere.

von Michael M. (Gast)


Lesenswert?

Icke schrieb:
> Riecht nach fusebits CLKDIV8
hat der atmega8 nicht.

> Besser:
egal.
bei 0 hört das programm auf.

> Erst den Timer setzen dann alles andere.
auch egal.


ich tippe auf falsche fuses für den takt.

von kime (Gast)


Lesenswert?

Hallo

Was meinst du genau damit welche Fuses sind flasch gesetzt ? wie kann 
ich das fixen.

von Falk B. (falk)


Lesenswert?

Siehe AVR Fuses

von kime (Gast)


Lesenswert?

Hier das sind die Fuses die ich mit PonyProg auslesen konnte

http://img411.imageshack.us/i/fuses.jpg/

von Karl H. (kbuchegg)


Lesenswert?

> Hier das sind die Fuses die ich mit PonyProg auslesen konnte

Dein µC läuft mit internem Rc-Oszillator auf ~1Mhz

von Falk B. (falk)


Lesenswert?

Dann läuft dein uC mit internem RC Oszillator auf 1 MHz.

MFG
Falk

von kime (Gast)


Lesenswert?

Hallo

So was habe ich mir nach dem durchlesen AVr Fuses schon geacht da ich an 
denen noch nichts geändert habe.Wie kann ich nun mit PonyProg den Atmega 
auf 8Mhz intern schalten bzw welche Fuses muss ich setzten bzw 
nichtsetzten

von Falk B. (falk)


Lesenswert?


von Michael M. (Gast)


Lesenswert?

ich sollte öfters lotto spielen! =)

für die fuses und das restliche gebrenne kann ich das hier empfehlen:
http://avr8-burn-o-mat.brischalle.de/

von kime (Gast)


Lesenswert?

Hallo

Danke für den Link?
Lotto nein Danke dan doch lieber PartyPoker^^

Hier laut deinem Link müssten das die richtigen Fuses sein oder für 8Mhz 
Intern

http://img52.imageshack.us/i/fuses2.jpg/

von Karl H. (kbuchegg)


Lesenswert?

kime schrieb:
> Hallo
>
> Danke für den Link?
> Lotto nein Danke dan doch lieber PartyPoker^^
>
> Hier laut deinem Link müssten das die richtigen Fuses sein oder für 8Mhz
> Intern
>
> http://img52.imageshack.us/i/fuses2.jpg/

Jetzt musst du nur noch aufpassen, wie PonyProg die Darstellung macht.
Was bedeutet ein gesetztes Häkchen?
(Es bedeutet eine 0 im Datenblatt)

von kime (Gast)


Lesenswert?

Bei Atmel AVR µCs heisst eine Fuse setzen (programmieren) übrigens, 
dieses Bit auf Null zu setzen,



Dachte das müsste doch dan passen , ein Häcken bei Pony bedeutet dieses 
Fuse setzten oder ?

von Karl H. (kbuchegg)


Lesenswert?

Dein erstes Bild zeigte

   CKSEL3   CKSEL2   CKSEL1  CKSEL0
   Haken    Haken    Haken   kein Haken

weiters wissen wir, dass du die Fuses noch nie angerührt hast. D.h das 
entspricht dem Auslieferungszustand: interner Oszillator mit 1 Mhz

Jetzt schau ich ins Datenblatt vom Mega8 und finde die Tabelle

  1.0Mhz     0 0 0 1   (für CKSEL3 bis CKSEL0)

d.h. überall dort, wo im Datenblatt eine 0 ist, ist bei Pony ein Haken. 
Wo im Datenblatt eine 1 ist, ist kein Haken.

So weit so gut.
aus der gleichen Tabelle

  8.0Mhz     0 1 0 0

d.h. mit dem Wissen, wie die Zuordnung Haken/kein Haken ist, muss die 
Pony Einstellung lauten

   CKSEL3   CKSEL2      CKSEL1  CKSEL0
   Haken    kein Haken  Haken   Haken


(Ich geh immer über das Datenblatt und vergleiche dieses mit der 
vorhandenen Einstellung bzw. dessen Anzeige im Brennprogram. Da kann mir 
nihts passieren, ob ein Programm/Fusecalculator jetzt eine 0 als x 
ausgibt oder umgekehrt)

Also ist dein Bild richtig

von kime (Gast)


Lesenswert?

Hallo

Besten Dank an Alle für die Hilfe jetzt läuft es so wie es sein soll

@ Karl heinz Buchegger

Danke für den Tip lieber einbmal zuviel nachgeschaut wie einmal zu wenig 
^^

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.