Hallo Timerbascomtüftler, ich habe ein kleines Problem mit den Timern in BASCOM. Bin auch totaler Mehrbein-Anfänger, deshalb versuche ich mich gerade mit BASCOM an die kleinen Käfer heranzutasten. Nachdem ich mehrere Threads gelesen habe, daß die 8bit und 16Bit Timer zB. im ATMEGA16 nur wenige Millisekunden vor sich hinzählen können bis sich dann ein Interrupt meldet. Das wäre aber recht ungeschickt für mein Programm. Deshalb mal etwas mehr dazu: Es soll nach einem Tastendruck ein kleiner Timer/Counter aktiviert werden, der nach ca. 3 Sekunden (Timer-Überlauf) eine Aktion durchführt. Wait oder Waitms (o.ä.) ist unbrauchbar, da das Programm durch diesen Befehl komplett angehalten wird. Genauer gesagt, nach dem Tastendruck sollen die Fenster im Auto betätigt werden, und das Innenlicht zB. 10sek später ausgehen (zwei Timer die zu unterschiedlichen Zeiten gestartet werden und unterschiedlich aufhören). Den jeweiligen Status was an und was aus ist würde ich dann auch in eine Variable schreiben, damit falls sich der Controller mal verschluckt nicht zufällig das Licht angeht. Ebenfalls hatte ich bei der Realisierung schon daran gedacht in der Überlauf-Verzweigung den Timer erneut anzuschubsen, damit man durch mehrmaliges hochzählen künstlich auf die 3 Sekunden / 10 Sekunden kommt. Ob das möglich und sinnvoll ist? Vielleicht hat auch jemand eine schlaue andere Idee wie man so etwas kniffliges in den Griff bekommt. Falls nötig kann ich mal das bisherige (etwas dürftige) Programm-Gerüst hochladen. Kann mir da mal jemand einen heißen Tip geben?? ;-) Dann geht hoffentlich auch mir ein Licht auf plink thnx!! Markus
Hi, ein kleiner Tip: wenn du den Timer1 im overflow Betrieb dafuer missbrauchen willst. 4Mhz / 64 = 1.05 sec kommt ein overflow da der Timer1 ein 16 Bit Zaehler ist ... damit du nun alle 3 Sekunden dein Ereignis startet koenntest du in der Timer1_isr eine Variabel hochzaehlen. Wenn die Variabel 3 ist setzt du ein flag in der ISR und fragst im Hauptprg das Flag ab. Mfg Dirk
Hi Dirk, Danke das ging ja schnell! Das ist eine gute Idee das mit Flags bzw Interrupts zu lösen. Noch etwas, der Pin, der die Fenster rauf und runter schalten soll, sollte ca. 3sec gedrückt werden. Wenn ich das richtig verstanden habe müßte es dann so aussehen: -------------------> schnipp ... Config Timer1 = Timer , Prescale = 64 On Ovf1 Tim1_isr Enable Timer1 Enable Interrupts Do if tuer.offen=1 then fenster.runter 'ist als set pinb.2 definiert Set Tifr.1 if y<3 then start timer1 else y=1 zeitabgelaufen.flag.gesetzt=1 end if if zeitabgelaufen.flag.gesetzt=1 then fenster.rauf ... 'etwas mehr Aufgaben hier loop Tim1_isr: y=y+1 Return ... <-------------------schnapp Aber was ich nicht so verarbeiten konnte: ein Flag setzen Welche und Flag's bietet der ATMEGA16? In der Hilfe von BASCOM konnte ich nur die Interrupts der Timer finden. Das wäre beim Timer0 der Ovf0, beim Timer1 Ovf1. Gibt es auch noch welche die man dort für universelle Aufgaben verwenden kann? Zitat Hilfe: INT0, INT1, INT2, INT3, INT4,INT5, TIMER0 ,TIMER1, TIMER2, ADC , EEPROM , CAPTURE1, COMPARE1A, COMPARE1B,COMPARE1. Or you can use the AVR name convention : OC2 , OVF2, ICP1, OC1A, OC1B, OVF1, OVF0, SPI, URXC, UDRE, UTXC, ADCC, ERDY and ACI. Sorry wenn das etwas eine etwas zu einfache Sichtweise ist, bin halt noch Anfänger :o) greez und Danke!! Markus
Hi, ich meinte als Flag eine Variabel. Dim Flag_Bit As Bit und dann einfach in der ISR dann Flag_Bit = 1 dann fragst du im MainPrg das Flag ab z.B. if Flag_Bit = 1 then toggle Portc.1 end if Damit das so funktioniert mit deiner Taste 3 Sek druecken musst du erst die Taste entprellen. Mfg Dirk
Wenn man mehrere Zeitabläufe parallel ausführen will, ist natürlich ein Scheduler bestens geeignet. Man übergibt ihm einfach die Funktion und sagt ihm führe diese dann und dann aus und fertig. Dann kann man sofort mit den nächsten Aufgaben fortfahren und der Scheduler kümmert sich automatisch um den Ablauf. Hier mal ein komplettes Beispiel: http://www.mikrocontroller.net/forum/read-4-49709.html#49709 Ist aber in C geschrieben, da man dafür ja Zeiger auf Funktionen übergeben muß. Peter
Hi erstmal ein ganz großes Danke für die rege Teilnahme :o) @Dirk, das hat soweit geklappt mit der Abfrage. Toggle geht auch, was nicht geht ist, wenn ich über Bitwait Portd.1 , Reset die Taste abfrage: da wird komischerweise auf dem Leih-Board STK200 der Transistor neben der ISP Buchse ziemlich heiß... @peter Danke erstmal für den Hinweis - elegant und effektiv hört sich die Beschreibung schon an!! An c habe ich auch schon gedacht. Ich war mir nur nicht sicher warum ich es nicht probiert habe. Gerade habe ich mir deshalb winavr runtergeladen, es ordnungsgemäß installiert und mir dann mal Dein Beispiel angeschaut. Mittlerweile weiß ich auch warum ich als Anfänger winavr nicht genommen hab. Zum Beispiel vermisse ich einen Simulator, eine Möglichkeit einzustellen was für einen Schips ich habe, als Basic-Umsteiger eine halbwegs verständliche deutsche Hilfe, oder wo der HEX-Code für Ponyprog erzeugt wird ... Fragen über Fragen. Als C-Bergsteiger hat man's da net wirklich leicht, besser gesagt mir fehlt da was greifbares :-)
Als ich angefangen habe, lief auf den PCs noch DOS3.3, deshalb hat die Kommandozeile nichts schreckliches für mich. Wenn ich mal Funktionen testen will, mache ich das unter Borland-C. Und für die Hardware verlasse ich mich auf die Erläuterungen in den Datenblättern bzw. teste es auf dem STK500 aus. Aber die BASCOM-Leute sollen ja sehr rührig sein, vielleicht basteln die auf Anfrage auch einen Scheduler mit rein. Peter
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.