Forum: Mikrocontroller und Digitale Elektronik 1 Sekunde mit Timer1 ATmega32 (Bascom) Hilfe beim berechnen


von Hans (Gast)


Lesenswert?

Hi Leute

Also, ich bräcuhte bitte (schritt für Schritt)-Hilfe beim Berechnen des 
Timer-Startwertes damit ich einen "1-Sekunden-Takt" hinbekomm.

Folgendes hat mich nicht wirklich weitergebracht:

http://www.rn-wissen.de/index.php/Bascom_und_Timer
http://www.rn-wissen.de/index.php/Timer/Counter_%28Avr%29
http://www.roboternetz.de/phpBB2/viewtopic.php?t=3165 (Beitrag von 
E-Fan!)


könntet ihr mir bitte helfen?

Das hier hab ich jetzt:

$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 14745600
$baud = 9600
Baud 9600

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.4 , Db6 = Portc.5 , 
Db7 = Portc.6 , E = Portc.2 , Rs = Portc.0
Config Timer1 = Timer , Prescale = 256
Enable Timer1
On Timer1 Timer1_isr
Timer1 = 51135

Dim A As Integer

Do
Loop

Timer1_isr:
Timer1 = 51135
A = A + 1
Cls
Lcd A
Return

End

Liebe Grüsse

von Jens S. (djstorm)


Lesenswert?

Ist doch eigentlich schon fast richtig... Allerdings bräuchtest du für 
Timer1 = 51135 einen Prescaler von 1024 - Bei einem Presc. von 256 wäre 
Timer1 = 7935

von Hans (Gast)


Lesenswert?

Ach ja, wenn ich ne LED Toggle gehts, nur nicht aufm LCd anzeigen, 
kannst du mir noch erklären wieso das es aufm LCd nich geht? ^^

Und die LED blinkelt nochn bissl schnell, soll ich jetzt einfach den 
TimerWert (also die 51135) ein bisschen nach unten korrigieren?^^

von Thomas K. (tkroth) Benutzerseite


Lesenswert?

Ich fürchte, dass das LCD zu langsam ist. Bis er zur Ausgabe kommt, 
wurde in der zwischenzeit schon wieder ein Interrupt ausgelöst. CLS 
braucht mehr als 1 mS.

von Jens S. (djstorm)


Lesenswert?

Also nach deinem Code, den du oben geschrieben hast (Presc 256, 
Timer1=51135) dürfte die LED etwa alle 1/4 Sekunde toggeln. Mit dem 
richtigen Presc von 1024 ist es jede Sekunde ein Mal...
Was genau geht nicht auf dem LCD?

von Hans (Gast)


Lesenswert?

Hm mir ist gerade etwas kurioses aufgefallen:

Ich kann den Wert vom Timer eigentlich beliebig zwischen 1 und 60000 
verstellen, die LED's blinkeln nicht wahnsinnig viel schneller oder 
langsamer, an was liegt das? (also differenz < 1 Sekunde)

da stimmt doch was nicht?

von Hans (Gast)


Lesenswert?

Oh da sind ja schon wieder neue Beiträge:O

Okay, das mit dem LCD war eigentlich auch nur zu versuchszwecken, aber 
mit den LED geht das ja auch;)

Aber irgendwie blinkeln die jetzt, mit Timer 51135 und Presc 1024 
immernoch zu schnell :( :S

von Jens S. (djstorm)


Lesenswert?

Der Takt stimmt auch? 14745600 Hz

von Hans (Gast)


Lesenswert?

Juhu jetzt gehts! Danke:D

Ich musste natürklich das Cls rauslöschen weill das geht ja immer zu 
lange oder? Langs an dem? Jetzts timmts auf jeden fall - danke:D

Könntet ihr mir trotzdem noch sagen obs am Cls lag? ;)

Danke euch allen! :D

von Jens S. (djstorm)


Lesenswert?

Wenns jetzt geht, dann kann das klar daran gelegen haben ;)

Notfalls kannst du auch mal den Timer in der ISR ausschalten, dann die 
Ausgabe machen und danach wieder einschalten - also so:
1
Timer1_isr:
2
Disable Timer1
3
A = A + 1
4
Cls
5
Lcd A
6
Timer1 = 51135
7
Enable Timer1
8
Return

Allerdings ist dann die Zeit bis zum neuen ausführen 1 Sekunde + die 
Zeit, was die Ausgabe benötigt.

von Hans (Gast)


Lesenswert?

Okay danke!

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.