Hallo,
versuche es mal mit
"Stop Timer3"
und
"Start Timer3"
In irgendeinen Projekt von mir schalte ich damit nen Timer von einen ATMega128 an und aus.
Mit freundlichen Gruessen
Digitali
Hallo
Ich habe folgendes Problem.
Auf Knopfdruck (bzw. über die RS-232) soll meine Luxeon anfangen zu blinken. Genauso soll sich das geblinke aber auch wieder abschalten lassen, die Luxeon soll dann ausgehen. Aber genau daran scheitere ich.
Mein Code sieht folgendermaßen aus:
Sobald die Zeichenkette "lumb01" einfliegt fängt die Luxeon an zu blinken, alles paletti. Wenn jetzt aber die Zeichenkette "lumb00" einfliegt soll die Luxeon aufhören, dazu habe ich wie man sieht versucht den Timer zu deaktivieren, den Port auf Low zu setzen und den PWM-Wert auf 0 gesetzt. Interessiert meine Luxeon aber wenig, die blinkt weiter akkurat vor sich hin.Code:Dim T As Bit Dim Tw As Word Dim Luxstatus As Word Config Timer3 = Timer , Prescale = 256 On Timer3 Isr_lux_t3 Timer3 = Tw Enable Interrupts Config Pinb.4 = Output 'Pin der Lux '.... Do If Mid(zeichen , 1 , 4) = "lumb" Then 'Luxeon-Status Luxstatus = Mid(zeichen , 5 , 2) If Luxstatus = "01" Then '1Hz Blinken Enable Timer3 Tw = 30000 End If If Luxstatus = "00" Then 'LUX ausschalten Disable Timer3 Portb.4 = 0 Ocr0 = 0 End If End If Waitms 50 Loop End Isr_lux_t3: Timer3 = Tw Toggle T If T = 0 Then Ocr0 = 255 'PWM Wert der Lux If T = 1 Then Ocr0 = 0 Toggle Portb.4 Return
Wenn man sich das genau auf dem Display anschaut sieht man, dass wenn man "lumb01" und _sofort_ danach "lumb00" sendet die Luxeon aus bleibt, wartet man aber dazwischen etwas nimmt der AVR von außen nichts mehr entgegen. Auch andere Befehle (zum Beispiel zur Motoransteuerung) lassen ihn kalt, einzigst die Luxeon lässt er noch blinken.
Ich habs schon mit allerlei Mitteln probiert aber entweder blinkt dann die Luxeon nicht mehr oder es gibt sonst irgendwelche Probleme. Nutze Timer leider nicht so oft, drum könnts auch an was ganz trivialem liegen
Hallo,
versuche es mal mit
"Stop Timer3"
und
"Start Timer3"
In irgendeinen Projekt von mir schalte ich damit nen Timer von einen ATMega128 an und aus.
Mit freundlichen Gruessen
Digitali
Nun funktionierts anders rum
Will ich die Luxeon blinken lassen geht das nicht, da reagiert die nicht.
Wenn ich die Luxeon zuerst NICHT über den Timer anschalte (Code dazu ist nicht im Codeausschnitt oben enthalten) und dann ausschalten will geht das wunderbar, auch kann ich sie danach wieder einschalten. Nur das Blinken geht nicht.
was noch fehlt ist die Routine, die du für den Datenempfang
Vor den Erfolg haben die Götter den Schweiß gesetzt
Muss das hier nochmal ausgraben, kam nun wieder dazu mich dem Problem anzunehmen und habe es immer noch nicht gelöst. Ich verstehe aber beim besten Willen nicht warum.
Habe den Code nun etwas umgeschrieben.
Der Timer ist nun IMMER an, die IRS führt jedoch nur Anweisungen aus, wenn eine Bit-Variable auf 1 gesetzt ist.
Hier der Code:
Folgendes:Code:'***DEKLARATIONEN*** Dim T As Bit Dim Tw As Word Dim Checkstatus_lux As Bit Checkstatus_lux = 0 Tw = 0 Enable Interrupts Enable Timer3 Config Timer3 = Timer , Prescale = 256 Timer3 = Tw On Timer3 Isr_lux_t3 '***IM HAUPTPROGRAMM*** If Luxstatus = "10" Then Checkstatus_lux = 1 End If '***ISR**** Isr_lux_t3: If Checkstatus_lux = 1 Then Timer3 = Tw Toggle T If T = 0 Then Ocr0 = 255 If T = 1 Then Ocr0 = 0 Toggle Portb.4 End If Return
Wenn ich die Variable Checkstatus_lux in der Deklaration auf 1 setze, dann geht die Luxeon an-aus-an-aus und das Hauptprogramm läuft ebenfalls munter weiter...
Wenn ich diese Variable jedoch wie im Codebeispiel in der Deklaration auf 0 setze und dann im Hauptprogramm die If-Bedingung erfülle (und damit diese Variable auf 1 setze) blinkt die Luxeon zwar ebenfalls, aber das Hauptprogramm macht überhaupt gar nix mehr....
An was liegt das?
Ach und ja, da fehlt einiges an (nicht relevantem) Code, die 800 anderen Zeilen wollte ich euch mal ersparen *g*
Lesezeichen