Archiv verlassen und diese Seite im Standarddesign anzeigen : Servus - keine Probleme mit Timer´n
Ein Servus an Euch, *:-)*
habe ein paar Fragen und Probleme mit den Von und Zu Timern *grins*
Ich benutze den ATtiny26L und betreibe ihn mit folgenden Einstellungen:
- Spannung 3,3V
- Takt intern 1 MHz
- Rev.-Spannung intern 2,56V
- Resetschaltung extern
Ich möchte einen Timer nutzen um alle 1,5 Sec. einen Ausgang auf PortA für ca. 0,5 Sec. einzuschalten (Timer 0)
Ich möchte den zweiten Timer nutzen um alle 30 Sec. zwei Ausgänge auf PortA für ca. 500 uSec. einzuschalten. (Timer 1)
Diese zwei Ausgänge sind ein Taktsignal für eine andere Elektronik.
Der sonstige Programmablauf den die CPU erledigen soll, soll durch diese Timerzugriffe nicht beeinträchtigt werden.
Frage 1:
Das mit Timer 0 habe ich eigendlich hin bekommen, nur diese langen Zeiten von 1,5 Sec. und 0,5 Sec. bekomme ich nicht hin UND wenn ich den Ausgang für 0,5 Sec einschalte dann bleibt der sonstige Programmablauf mit stehen.
Frage 2:
Den Timer 1 bekomme ich garnicht zum laufen, habe ihn genauso programmiert wie Timer 0 - der will einfach nicht.
Könnt Ihr mir helfen?????
Danke!
Gruß MrQu
michaelb
27.07.2005, 12:50
Hi MrQu,
ich hab zwar nicht so viel Ahnung von Timern aber würde mal deinen Titel ändern denn da steht du hast keine Probleme mit Timern ich denk es soll kleine Probleme heißen!
Gruß Michi
Ich würde das nur mit einem Timer machen, dann hast du Zeit, auch mit dem zweiten Freundschaft zu schliessen
Deine kleinste Event-Zeit ist 0.5 mS, daß wäre dann Timer0 prescale 8 und preload 194.
In der Timer-Interrupt routine mußt du dich um zwei Abläufe kümmern:
1.5 Switch
zwei Zustände:
1 mit einem Zähler bis 3000 zählen, dann ist 1.5 sec rum,
Schalter ein, auf Zustand 2 gehen
2 mit einem Zähler bis 1000 zählen, dann ist 0.5 sec rum,
Schalter aus, auf Zustand 1 gehen
30 Switch
Im grunde das Gleiche, andere Zahlen halt.
Wenn ich in der Interrupt-Schleiffe was rechnen lasse, dann hällt doch der Rest des eigendlichen Programmes an - oder???
Das heisst doch das eigendliche Programm zwischen DO und LOOP bleibt so lange stehen - ODER???
Habe unten mal das Musterprogramm angehängt wie ich es jetzt gemacht habe, kannst du mir das zum testen so umschreiben wie du es gemeint hast
- oder
es mir nochmal erklären.
danke
mfg MrQu
Hallo, was picknick meint ist sicher daß Du in der interruptroutine zu einem Zähler, der außerhalb der routine liegt, immer eine eins addierst.
Das vergleichen machst Du dann im Hauptprogramm .
ODer sehe ich das falsch?
Gruß Sebastian
Dino Dieter
27.07.2005, 23:17
Hallo
Versuch mal so
$regfile = "At26def.dat" ' CPU = ATtiny26L (externe Reset-Beschaltung)
$crystal = 1000000 ' Takt = interner RC mit 1 MHz
Dim Status As Byte
Dim B As Word
Dim C As Word
C = 3000
Const Timer_reload = 193
Const An = 0
Const Aus = 1
Config Portb = Output
Portb = &B00000000
Config Timer0 = Timer , Prescale = 8
On Timer0 Led
Enable Timer0
Enable Interrupts
Do
If B = C Then '1,5 Sekunden vorbei 3000 * 500 µs = 1,5 s
If Portb.1 = Aus Then 'war die LED vorher aus
Portb.1 = An 'dann einschalten
C = C + 1000 'Zeit für ausschalten einstellen
Else
Portb.1 = Aus
C = C + 3000 'Und Neue Zeit Berechnen
End If
End If
Loop
End
'Interrupt Routine Timer0
'wird ca alle 504 µs aufgerufen
Led:
Timer0 = Timer_reload 'Timer neu einstellen
B = B + 1 'Variable b zählt die 0,5 ms Schritte 'Variable wird alle
Return
Ist nicht getestet, sollte aber schon so gehen.
Gruß
Dieter
He Ihr seit ja fixxxxxx *freu*
Werde das heute nach der Arbeit gleich mal testen.
Klingt logisch was Ihr sagt, zur zählen im interrapt, interrapt ergebnis extern abfragen und extern ausführen - so ist der normale programmablauf eigendlich nicht unterbrochen.
Danke - bis später
mfg MrQu
@izaseba: Ja, alles im Interrupt, selbst bei den 500 uS hat er ja
500 x quartz - cyclen zeit. die zählervariablen und state-flags sind permanente variablen, die aber alleine dem Timer gehören (klassenmäßig gesehn)
In der Hauptroutine tät ich in der richtung garnix, was'n auch.
Hallo Hallo
hier mein Lösungsweg - kukst du unten.
Stimmt der so???
Ich meine habs getestet und es geht.
Frage -
habe ich den Timer0 richtig programmiert das die LED 0,8 Sec. OFF ist und dann für 1 Sec. ON ist - oder habe ich nen Rechen- / Denkfehler.
Optisch beim testen kommt es hin.
Gruß MrQu
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.