- LiTime Speicher und Akkus         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: timer optimieren kann mir jemand helfen?

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.05.2006
    Ort
    Oberschopfheim
    Alter
    36
    Beiträge
    380

    timer optimieren kann mir jemand helfen?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    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:
    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
    EDIT also ich habe mich jetzt mal hingesezt und CODE-Tags eingebaut (PicNIck)
    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.

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.05.2006
    Ort
    Oberschopfheim
    Alter
    36
    Beiträge
    380
    weiß niemand was? stimmt dass programm überhaupt mit den ganzen zeichen und so?

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.05.2006
    Ort
    Oberschopfheim
    Alter
    36
    Beiträge
    380
    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

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.05.2006
    Ort
    Oberschopfheim
    Alter
    36
    Beiträge
    380
    bin ich hier alleinunterhalter oder was?

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    49
    Beiträge
    2.253
    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

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

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.05.2006
    Ort
    Oberschopfheim
    Alter
    36
    Beiträge
    380
    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?

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.05.2006
    Ort
    Oberschopfheim
    Alter
    36
    Beiträge
    380
    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

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    49
    Beiträge
    2.253
    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

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.05.2006
    Ort
    Oberschopfheim
    Alter
    36
    Beiträge
    380
    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?

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    49
    Beiträge
    2.253
    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

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

LiTime Speicher und Akkus