- LiFePO4 Speicher Test         
Ergebnis 1 bis 5 von 5

Thema: Timer lässt sich nicht mehr abschalten

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.03.2005
    Ort
    Ulm
    Alter
    37
    Beiträge
    519

    Timer lässt sich nicht mehr abschalten

    Anzeige

    Praxistest und DIY Projekte
    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:

    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
    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.

    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

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.11.2005
    Ort
    QTH: JO43BC
    Alter
    56
    Beiträge
    112
    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

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.03.2005
    Ort
    Ulm
    Alter
    37
    Beiträge
    519
    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.

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    was noch fehlt ist die Routine, die du für den Datenempfang
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.03.2005
    Ort
    Ulm
    Alter
    37
    Beiträge
    519
    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:

    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
    Folgendes:
    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*

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress