weiß niemand was? stimmt dass programm überhaupt mit den ganzen zeichen und so?
also ich habe mich jetzt mal hingesezt und hab ne halbe ewigkeit gebraucht den timer so hinzubekommen dass er im sekundentakt blinkt. jetzt habe ich dass hier:
EDIT also ich habe mich jetzt mal hingesezt und CODE-Tags eingebaut (PicNIck)Code:$regfile = "m8def.dat" $crystal = 1000000 $baud = 9600 Config Timer0 = Timer , Prescale = 64 Start Timer0 Enable Timer0 Enable Interrupts On Timer0 Timer0_isr Config Portb.0 = Output Config Portb.0 = Output Config Pinc.0 = Input Config Portb.1 = Output Config Portb.4 = Output Config Pinc.2 = Input Portc.0 = 1 Portc.2 = 1 Dim Intzaehler As Byte Dim Zehntelsek As Byte Dim Sekunde As Byte Dim Minute As Byte Led3 Alias Portb.4 Do Loop Timer0_isr: Tcnt0 = 194 Intzaehler = Intzaehler + 1 If Intzaehler > 25 Then Zehntelsek = Zehntelsek + 1 If Zehntelsek < 5 Then Led3 = 1 Else Led3 = 0 End If If Zehntelsek > 9 Then Zehntelsek = 0 End If If Zehntelsek > 9 Then Sekunde = Sekunde + 1 End If If Sekunde > 59 Then Sekunde = 0 End If If Sekunde > 59 Then Minute = Minute + 1 End If If Minute > 4 Then Minute = 0 End If Intzaehler = 1 End If Return End
nun möchte ich dieses programm einfügen dass wie dass programm schon ist 5 minuten wenn ich auf ne taste drücke käuft und dann stoppt. während den 5 minuten soll man das programm anhalten können mit nem taster. wie intigriere ich dass in den timer?
und wo schreibe ich das programm dass ich habe rein? achja das blinken im sekundentakt soll erhalten bleiben. dies soll nur 5 minuten so laufen und dann auch gestoppt werden. vll kann mir ja jemand helfen.
achja bin absoluter anfänger und bin echt nur mit müh und not zu dem programm gekommen. ich dank euch schon mal.
weiß niemand was? stimmt dass programm überhaupt mit den ganzen zeichen und so?
so jetzt habe ich es denke ich mal soweit richtig des programm. nun möchte ich wenn ich pinc.2 per taster drücke dass der timer anfängt zu zählen und zwar wie in den isr 5 minuten lang im sekundentakt. wie realisiere ich dass?
Code:$regfile = "m8def.dat" $crystal = 1000000 $baud = 9600 Config Timer0 = Timer , Prescale = 64 Start Timer0 Enable Timer0 Enable Interrupts On Timer0 Timer0_isr Config Portb.0 = Output Config Portb.0 = Output Config Pinc.0 = Input Config Portb.1 = Output Config Portb.4 = Output Config Pinc.2 = Input Portc.0 = 1 Portc.2 = 1 Dim Intzaehler As Byte Dim Zehntelsek As Byte Dim Sekunde As Byte Dim Minute As Byte Led3 Alias Portb.4 Do Loop Timer0_isr: Tcnt0 = 194 Intzaehler = Intzaehler + 1 If Intzaehler > 25 Then Zehntelsek = Zehntelsek + 1 If Zehntelsek < 5 Then Led3 = 1 Else Led3 = 0 End If If Zehntelsek > 9 Then Zehntelsek = 0 End If If Zehntelsek > 9 Then Zehntelsek = 0 Sekunde = Sekunde + 1 End If If Sekunde > 59 Then Sekunde = 0 Minute = Minute + 1 End If If Minute > 4 Then Minute = 0 End If Intzaehler = 1 End If Return End
bin ich hier alleinunterhalter oder was?
Also ... Du brauchst eine Zeit, 5Minuten = 300 Sekunden.
Dann haste noch nen Taster, soweit klar.
Beim Tasterdruck soll etwas ausgelöst werden, nämlich
Deine Zeitmessung. Wenn die Zeitmessung auch nach dem
Tastendruck weiter laufen soll muss sich die Kiste merken, das die
Taste gedrückt war, soweit klaro denk ich. Du brauchst also ein
sog. Flag, ein Zeichen das gesetzt wird, Jawoll, die Taste war gedrückt.
Ich verwende dafür gerne ne Variable namens Flag um das
zu erhalten. Die andere Variante ist, Du merkst Dir den Start in dem zu messenden Wert selbst, weil dieser den Endpunkt einfach noch nicht erreicht hat
Man kann im Übrigen mit nem Uhrenquarz und nem Mega auch ganz einfach ne Uhr generieren ... aber schön, das du's noch zum lernen zufuß machst.Code:$regfile = "m8def.dat" $crystal = 1000000 $baud = 9600 Config Timer0 = Timer , Prescale = 64 Start Timer0 Enable Timer0 Enable Interrupts On Timer0 Timer0_isr Config Portb.0 = Output Config Portb.0 = Output Config Pinc.0 = Input Config Portb.1 = Output Config Portb.4 = Output Config Pinc.2 = Input Portc.0 = 1 Portc.2 = 1 Dim Intzaehler As Byte Dim Zehntelsek As Byte Dim Sekunde As Byte Dim Minute As Byte dim sec_counter as word ausgang alias Portb.1 taste alias Pinc.2 Led3 Alias Portb.4 Do Loop Timer0_isr: Tcnt0 = 194 incr Intzaehler If Intzaehler > 25 Then Zehntelsek = Zehntelsek + 1 If Zehntelsek < 5 Then Led3 = 1 Else Led3 = 0 End If If Zehntelsek > 9 Then Zehntelsek = 0 End If If Zehntelsek > 9 Then Zehntelsek = 0 Sekunde = Sekunde + 1 gosub tastenabfrage End If If Sekunde > 59 Then Sekunde = 0 Minute = Minute + 1 End If If Minute > 4 Then Minute = 0 End If Intzaehler = 1 End If Return End tastenabfrage: if taste = 1 then sec_counter=0 endif if sec_counter < 301 then ' 300 Sekunden nicht erreicht incr sec_counter Ausgang=1 ' Tu halt irgendwas else Ausgang=0 ' Schalts wieder ab endif return end
Man kann auch den Timer langsamer laufen lassen über den Prescale, also den Vorteiler und mit dem 16-Bit Timer1 lassen sich auch direkt Sekundentakte erzeugen.
Vor den Erfolg haben die Götter den Schweiß gesetzt
jop ich versuchs auf die lange art. eben damit ichs lerne. wenn ich jetzt des mit größer 300 nehme brauche ich die minute ja eigentlich nicht zu definieren. geht ja eh alles über die sekunden oder?
also so ganz klappt des jetzt net. wenn ich die taste drücke tut sich nix. es blinkt auch schon vorher munter weiter. sprich die ganze zeit. reagiert gar net auf den tastendruck
sorry, ich versteh die Aufgabenstellung nicht ganz.
Das Programm soll 5 Minuten lang blinken und
ansonsten auch blinken oder wie ?
Vor den Erfolg haben die Götter den Schweiß gesetzt
hallo, der timer soll so funktionieren.
per taster druck startet der timer
während er läuft blinkt er im sekundentakt
man soll ihn mit einem anderen oder dem selben taster während der 5 minuten die er ablaufen soll auch anhalten können und mit der selben wieder weiter laufen lassen können.
wenn er die 5 minuten erreicht hat soll er stoppen und erst wieder wie oben beschrieben per taster druck gestartet werden.
den sekundentakt habe ich hinbekommen bloß wie bekomme ich dass mit den tastern hin?
Der Taster ist ja an nem Pin Deines µC angeschlossen.
Du musst dann einfach nur den Pin bzw. Port als Eingang
definieren, Per Bascom Befehl Config PortX.Y = Input
und dann in Deinem Programm den Status des Pinregisters
abfragen ( If PinX.Y = 1 then ). Aber Vorsicht ist geboten ... Tasten prellen,
du musst also entweder hardwaremäßig dafür sorgen, das
die Taste das nichtmehr macht oder in der Software
entprellen. Bascom Hilfe siehe Debounce.
Im Fall von Deinem Programm ists so, das das PRellen
durch den 1 Sekunden Abfragetakt vernachlässigt werden kann.
Code:$regfile = "m8def.dat" $crystal = 1000000 $baud = 9600 Config Timer0 = Timer , Prescale = 64 Start Timer0 Enable Timer0 Enable Interrupts On Timer0 Timer0_isr Config Portb.0 = Output Config Portb.0 = Output Config Pinc.0 = Input Config Portb.1 = Output Config Portb.4 = Output Config Pinc.2 = Input Portc.0 = 1 Portc.2 = 1 Dim Intzaehler As Byte Dim Zehntelsek As Byte Dim Sekunde As Byte Dim Minute As Byte dim sec_counter as word ausgang alias Portb.1 taste alias Pinc.2 Led3 Alias Portb.4 Do Loop Timer0_isr: Tcnt0 = 194 incr Intzaehler If Intzaehler > 25 Then Zehntelsek = Zehntelsek + 1 If Zehntelsek > 9 Then Zehntelsek = 0 End If If Zehntelsek > 9 Then Zehntelsek = 0 Sekunde = Sekunde + 1 gosub tastenabfrage End If If Sekunde > 59 Then Sekunde = 0 Minute = Minute + 1 End If If Minute > 4 Then Minute = 0 End If Intzaehler = 1 End If Return End tastenabfrage: if taste = 1 then if sec_counter < 301 then sec_counter=302 else sec_counter=0 endif endif if sec_counter < 301 then ' 300 Sekunden nicht erreicht incr sec_counter toggle led3 ' Tu halt irgendwas else led3=0 ' Schalts wieder ab endif return end
Vor den Erfolg haben die Götter den Schweiß gesetzt
Lesezeichen