Guten Morgen, ich suche eine Idee, wie man nach genau einer Stunde einen pin für 10 sec. einschaltet und dann wieder ausschaltet. Brauche für meine Garteneisenbahn einen " Taktgeber" für die "Turmuhrglocke" . Mit "wait" wird es nichts, da jedesmal zur vollen Stunde eben die 10 sec. aufaddiert werden. Und so eine steigende Ungenauigkeit quasi mit einprogrammiert wird. Die Lösung liegt wahrscheinlich in der "Interrupt"- Steuerung. Da ja 2 voneinander unabhängige Prozesse simultan verlaufen sollen. Bei meinem "Schweißlicht" war es nicht so problematisch. Ich programmiere in dem hier so gern gesehenen BASCOM. ;) Als Prozessoren habe ich ATTINY13 45 44 und ATMEGA8 da, Quartz 4Mhz / 8 Mhz. Vielen Dank für Unterstützung jeglicher Art. Gruß Minimaxus.
Holger Frisch schrieb: > Guten Morgen, > > ich suche eine Idee, wie man nach genau einer Stunde einen pin für 10 > sec. einschaltet > und dann wieder ausschaltet. > Brauche für meine Garteneisenbahn einen " Taktgeber" für die > "Turmuhrglocke" . > Mit "wait" wird es nichts, da jedesmal zur vollen Stunde eben die 10 > sec. aufaddiert werden. Du wirst ja doch wohl von 1 Stunde (=3600 Sekunden) 10 Sekunden abziehen können um damit zu errechnen, dass vom Ende ds Bimmelns bis zum Beginn des nächsten Bimmelns 3590 Sekunden vergehen müssen. > Und so eine steigende Ungenauigkeit quasi mit einprogrammiert wird. > Die Lösung liegt wahrscheinlich in der "Interrupt"- Steuerung. Da ja 2 > voneinander unabhängige Prozesse Interrupts sind schon ok. Aber aus einem anderen Grund. Was du brauchst ist ein Taktgeber. In Form eines Timers, der in regelmässigen Zeitabständen deine Interrupt Routine aufruft. Zum Beispiel alle 1 Sekunde (muss aber nicht 1 Sekunde sein, rechnet sich nur leichter). Und der Rest - na der ist einfach mitzählen. Bei jedem Interrupt Aufruf wird ein Zähler erhöht und bei bestimmten Zählerständen werden dann Aktionen gemacht (wie zb das Bimmeln ein oder ausschalten) und der Zähler gegebenenfalls wieder auf 0 gesetzt- Und ja, man darf ruhig auch mehrere Variablen haben, die in der Interrupt Funktion verschiedene Dinge abzählen.
Oder man kann sich überhaupt gleich mal eine Uhr bauen (weil du von Turmuhr sprichst) bzw. die in BASCOM bereits eingebaute nehmen. Im Programm wird dann ständig die Uhr geprüft und wenn die Minuten auf 0 sind und die Sekunden kleiner als 11 sind, dann wird die Bimmel eingeschaltet und ansonsten eben ausgeschaltet.
Hallo, danke für die Hinweise. Im Anhang mal mein Programm. Es läuft soweit auf einem ATMEGA88. Dieses Programm soll nun in einen Tiny45/ 85 oder 44 eingebrannt werden. Ich ändere die Pins und trage die *def.dat ein,nun gibt es eine 2 Fehlermeldungen .
1 | $regfile = "attiny85.dat" 'Prozessortyp |
2 | $crystal = 8000000 'Taktfrequenz 8MHz Quarz |
3 | |
4 | Config Portb = Output 'PortB ist Ausgang |
5 | Config Timer1 = Timer , Prescale = 256 'Konfiguriere Timer1 |
6 | Enable Timer1 'schalte den Timer1 ein |
7 | On Timer Isr_von_timer1 'bei Timer1- Überlauf zu ISR_von_Timer1 |
8 | Enable Interrupts 'Interrupts freigeben |
9 | Timer1 = 34285 |
10 | Dim A As Word 'Timer1 soll von 34285 wegzählen |
11 | A = 0 |
12 | Portb.2 = 0 ' Variable A auf 0 setzen |
13 | |
14 | Do ' Mainloop |
15 | If A = 6000 Then Gosub Min |
16 | |
17 | Loop |
18 | |
19 | Isr_von_timer1: 'ISR von Timer1 |
20 | Timer1 = 34285 'Timer1 zählt von 34285 weg |
21 | Toggle Portb.0 'schaltet Portb.0 im Sekundentakt= Kontrolle |
22 | |
23 | ' Variable |
24 | A = A + 1 |
25 | |
26 | Return |
27 | |
28 | Min: |
29 | Sound Portb.1 , 400 , 450 ' Testton |
30 | A = 0 ' Variable A auf 0 setzen |
31 | Portb.2 = 1 ' Schaltausgang "an" Startimpuls für Gong |
32 | Waitms 2000 ' 2 sek. "anlassen" |
33 | Portb.2 = 0 |
34 | ' Schaltausgang "aus" |
35 | Return |
Error: 117 Line:7 Unknow interrupt [TIMER], in File Error: 46 Linie: 9 Assignment error [TIMER1:0 34285:112] Meine BASCOM- Version 1.11.9.1. Was ist nun wieder falsch ? Die genannten Proz. haben doch jeweils einen Timer1 . Viele Grüße Minimaxus
Logisch denken
1 | On Timer Isr_von_timer1 |
on Timer ... also wenn ein Timer Overflow stattfindet. Wenn aber jetzt ein µC mehrere Timer hat, welcher ist es denn?
Holger Frisch schrieb: > Was ist nun wieder falsch ? Die genannten Proz. haben doch jeweils > einen Timer1 . Aber beim Tiny85 ist der Timer1 ein 8 Bit Timer
Holger Frisch schrieb: > Meine BASCOM- Version 1.11.9.1. Die Version hat ja ein gesegnetes Alter, meiner Erinnerung nach wurden Probleme mit Timer1 bei diesem Prozessortyp erst bei neueren Versionen behoben. (Der Timer1 im ATiny25/45/85 hat ein paar Spezialfähigkeiten) Timer0 hingegen sollte auch in der Uraltversion keine Probleme machen. Nebenbei sollten Stacks und Frame ausreichend dimensioniert werden, schon wegen des Timerinterrupts. Wird der Code nur ein wenig komplexer, gibt's sonst Probleme.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.