- Labornetzteil AliExpress         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 22

Thema: Timer2 deaktiviren?

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627

    Timer2 deaktiviren?

    Anzeige

    Praxistest und DIY Projekte
    Hallo,
    kann man den Timer2 (und nur den) deativiren?

    ich habe es so versucht. Bascom kompiliert zwar aber sobal dieser Part aktiv ist geht nix mehr....

    If Programm = 2 Then
    'Disable Timer2
    Gosub Lauflicht
    End If
    ...

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.11.2008
    Ort
    Kapfenberg
    Beiträge
    628
    Hallo!

    Mit diesem Befehl schaltest du nur die Interrupts des Timers aus, um ihn zu stoppen musst du folgendes schreiben:

    Code:
    Stop Timer2
    Gruß
    Thomas

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    Hallo Thomas,
    dann läuft keiner der Timer mehr. gibt es da noch eine andere Möglichkeit? (ausser in der Int-Routine mit goto an das ende zu springen?)
    ...

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.11.2008
    Ort
    Kapfenberg
    Beiträge
    628
    Zitat Zitat von TobiasBlome
    Hallo Thomas,
    dann läuft keiner der Timer mehr. gibt es da noch eine andere Möglichkeit? (ausser in der Int-Routine mit goto an das ende zu springen?)
    Es läuft keiner mehr? Hast du explizit STOP TIMER2 geschrieben? Also bei mir funktionierts eigenartigerweise...

    Poste mal das gesamte Programm.

    Gruß
    Thomas

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    ich habe es versuchsweise mit goto gemacht - aber STOP ist natürlich viel besser

    Programm ist noch nicht ganz fertig aber dieser Teil funktioniert in sich.
    STOP habe ich eingeramt

    '=======================================
    '=======================================
    STOP
    '=======================================
    '=======================================

    Code:
    'RGB - LED - Leiste über AT-Mega8
    'Tobias Blome - 12.01.2008
    '
    '-------------------------------------------------------------------------------
    'INFO´s
    
    
    'PWM_Wert = Sollwert für Software PWM
    
    'RC5 Eingang über Pin5 / PD3
    
    'Led Rot  = Portb.1 = 1
    'Led Grün = Portb.2 = 1
    'Led Blau = Portb.3 = 1
    
    'Auswahl = 1 -> Rot+Grün
    'Auswahl = 2 -> Grün+Blau
    'Auswahl = 3 -> Blau+Rot
    
    '-------------------------------------------------------------------------------
    'Version 0.04
    '  -RS232 ok
    '  -RC5 ok
    '  -Farbe wechseln durch
    '  -jede Farbe doppelt!!!!!!!!!!!!!!!!
    
    'Version 0.06
    '  - >251 und <4 wird die Auswahl umgeschaltet
    
    'Version 0.07
    '  -Auswahl von 3 auf 6 erhöht
    '  -Farben sortiert
    '
    'Version 0.09
    '  -GoSub Anweisung für verschiedene Programme
    '
    'Version 1.10
    '  -Lauflicht
    '
    '-------------------------------------------------------------------------------
    'Konfiguration µC:
    $regfile = "m8def.dat"                                      'AT-Mega32
    $crystal = 8000000                                          'Quarz: 8 MHz intern
    $baud = 9600                                                'Baudrate definieren
    
    '-------------------------------------------------------------------------------
    'Ein- Ausgänge:
    Ddrb = &B1111111                                            '1 Ausgang, 0 Eingang = Pin PB7-0
    
    '-------------------------------------------------------------------------------
    'Timer0 = 8 Bit
    'wird für RC5 Auswertung benötigt!!!
    Config Rc5 = Pind.3                                         'Timer0 in Benutzung!!!
    Portd.3 = 1
    
    'Timer1 = 16 Bit
    Config Timer1 = Timer , Prescale = 1024
    On Timer1 Timer1_irq
    Const Timervorgabe1 = 57722                                 'also ca 1 mal pro Sekunde!!!
    Enable Timer1
    Enable Interrupts
    
    'Timer2 = 8 Bit SOFTWARE - PWM
    Config Timer2 = Timer , Prescale = 8                        'Teiler
    Enable Timer2
    On Timer2 Pwm_prog                                          'timer einschalten
    Const Timervorgabe2 = 200                                   'also ca 18200 mal pro Sekunde!!!
    
    Enable Interrupts
    '-------------------------------------------------------------------------------
    'Variablen:
    '-------------------------------------------------------------------------------
    Dim Address As Byte , Command As Byte
    Dim Flag As Bit
    
    'PWM
    Dim Z As Word
    Dim Pwm_wert As Byte                                        'Sollwert
    Dim Ri As Byte                                              ' Hilfsregister
    
    Dim Programm As Byte                                        'Lichtprogramm wählen
    
    Dim Auswahl As Byte                                         'Wert 1-3 um die PWM auf die LED´s aufzuteilen
    
    Dim Updown As Bit                                           'Merker für automatisch hoch und runter dimmen
    Dim Updownm As Bit
    
    Dim T2 As Bit                                               'Timer2 deaktiviren
    
    'Tasten festlegen
    Up Alias 32                                                 'Prog.Bezeichnung ALIAS Real Taste
    Down Alias 33
    Progplus Alias 16                                           'Lichtprogramm wählen
    Progminus Alias 17
    '-------------------------------------------------------------------------------
    'Vor Programmstart:
    Flag = 1                                                    'Merker für PWM
    Pwm_wert = 128                                              'PWM-Wert 0-255 => Hälfte 127,5
    Auswahl = 1                                                 'LED Auswahl
    Updown = 1                                                  'Merker um vor zurück zu änden
    Updownm = 0
    Programm = 1                                                'Lichtprogramm wählen
    '-------------------------------------------------------------------------------
    '-------------------------------------------------------------------------------
    'Hauptprogramm Do...Loop
    '-------------------------------------------------------------------------------
    '-------------------------------------------------------------------------------
    
    
    Do
    
    'Rc5 Code einlesen:
    Getrc5(address , Command)
       If Flag = 1 Then
    
      'Print "wait for command"
         Flag = 0
       End If
       If Address <> 255 Then
         Reset Command.7                                        ' reset toggle bit
    
         ''Print "Address: " ; Address
         'Print "Command: " ; Command
         Flag = 1
       End If
    
    '-------------------------------------------------------------------------------
    'RC5 Code umsetzen:
    
    'Lichtprogramm Wählen
    If Command = Progplus Then
       If Programm = 6 Then
       Programm = 1
       Else
       Incr Programm
       End If
    Waitms 200
    End If
    
    If Command = Progminus Then
       If Programm = 1 Then
       Programm = 6
       Else
       Decr Programm
       End If
    Waitms 200
    End If
    
    
    
    
    'LED-PAAR auswählen (Handbetrieb)
    'Auswahl 1 über FB LED Rot und Grün
    If Command = 1 Then
    Auswahl = 1
    End If
    
    'Auswahl 2 über FB LED Grün und Blau
    If Command = 2 Then
    Auswahl = 2
    End If
    
    'Auswahl 3 über FB LED Blau und Rot
    If Command = 3 Then
    Auswahl = 3
    End If
    
    'nicht benötigte 3. LED-Farbe bei Auswahl ausschalten
    If Auswahl = 1 Then                                         'Rot und Grün -> Blau aus
    Portb.3 = 0
    End If
    
    If Auswahl = 2 Then                                         'Grün und Blau -> Rot aus
    Portb.1 = 0
    End If
    
    If Auswahl = 3 Then                                         'Blau und Rot -> Grün aus
    Portb.2 = 0
    End If
    
    
    
    
    
    'Lichtprogrammauswahl
    If Programm = 1 Then
    Gosub Regenbogen
    End If
    '=======================================
    '=======================================
    '=======================================
    If Programm = 2 Then
    'Stop Timer2
    T2 = 0
    Gosub Lauflicht
    Else
    T2 = 1
    End If
    '=======================================
    '=======================================
    '=======================================
    
    If Programm = 3 Then
    Gosub Doppelblitz:
    End If
    
    
    Loop
    
    End
    
    
    
    '-------------------------------------------------------------------------------
    'Sprungmarken
    '-------------------------------------------------------------------------------
    
    '_______________________________________________________________________________
    Doppelblitz:
    '_______________________________________________________________________________
    'ROT
    Portb.3 = 0                                                 'BLAU AUS!!!
    Auswahl = 1                                                 'Auswahl = 1 -> Rot+Grün
    Pwm_wert = 0                                                'PWM-Wert 0-255 => Hälfte 127,5
    Waitms 50
    
    'Geld
    Portb.3 = 0                                                 'BLAU AUS!!!
    Auswahl = 1                                                 'Auswahl = 1 -> Rot+Grün
    Pwm_wert = 128                                              'PWM-Wert 0-255 => Hälfte 127,5
    Waitms 50
    
    'GRÜN
    Auswahl = 1                                                 'Auswahl = 1 -> Rot+Grün
    Pwm_wert = 255                                              'PWM-Wert 0-255 => Hälfte 127,5
    Waitms 50
    
    'BLAU
    Auswahl = 2                                                 'Auswahl = 1 -> Rot+Grün
    Pwm_wert = 0                                                'PWM-Wert 0-255 => Hälfte 127,5
    Waitms 50
    Return
    
    '_______________________________________________________________________________
    Lauflicht:
    '_______________________________________________________________________________
    'ROT
    Portb.3 = 0                                                 'BLAU AUS!!!
    Auswahl = 1                                                 'Auswahl = 1 -> Rot+Grün
    Pwm_wert = 0                                                'PWM-Wert 0-255 => Hälfte 127,5
    Waitms 50
    
    'GRÜN
    Auswahl = 1                                                 'Auswahl = 1 -> Rot+Grün
    Pwm_wert = 255                                              'PWM-Wert 0-255 => Hälfte 127,5
    Waitms 50
    
    'BLAU
    Auswahl = 2                                                 'Auswahl = 1 -> Rot+Grün
    Pwm_wert = 0                                                'PWM-Wert 0-255 => Hälfte 127,5
    Waitms 50
    
    
    Return
    
    
    '_______________________________________________________________________________
    Regenbogen:
    '=======================================
    '=======================================
    '=======================================
    If T2 = 0 Then
    Goto Sprung
    End If
    '=======================================
    '=======================================
    '=======================================
    
    '_______________________________________________________________________________
    'PWM-Wert über Taste UP & DOWN hoch runter
    'PWM-Wert wird auf 0-255 begrenzt
    'Wenn das Ende einer Richtung erreicht ist, wird automatisch in die andere Richtung gezählt (Merker: UpDown)
    If Command = Up And Pwm_wert < 251 And Updown = 1 Then
    Pwm_wert = Pwm_wert + 5
    End If
    
    If Command = Down And Pwm_wert > 4 And Updown = 1 Then
    Pwm_wert = Pwm_wert - 5
    End If
    
    '---
    If Command = Down And Pwm_wert < 251 And Updown = 0 Then
    Pwm_wert = Pwm_wert + 5
    End If
    
    If Command = Up And Pwm_wert > 4 And Updown = 0 Then
    Pwm_wert = Pwm_wert - 5
    End If
    
    '--------Umschaltung Updown 0/1  (Hilfsmerker: UpDownM)
    If Pwm_wert < 4 And Updownm = 1 Then
    Toggle Updown
    Updownm = 0
    End If
    
    If Pwm_wert > 251 And Updownm = 1 Then
    Toggle Updown
    Updownm = 0
    End If
    
    
    If Pwm_wert < 15 Or Pwm_wert > 240 And Updownm = 0 Then     'Hilfsmerker bei 200 zurücksetzen
    Updownm = 1
    End If
    
    '-----------
    '-------------------------------------------------------------------------------
    'Farbübergänge: zwischen den LED Paaren wechseln
    'wenn Taste für LED´s hochdimmen gedrückt -> muss bei 251 und bei 4 umgeschaltet werden
    If Command = Up And Pwm_wert > 251 Then
    Pwm_wert = 255                                              'falls er sich verzählt!!!
       If Auswahl = 6 Then
       Auswahl = 1
       Else
       Auswahl = Auswahl + 1
       End If
    End If
    
    If Command = Up And Pwm_wert < 4 Then
    Pwm_wert = 0                                                'falls er sich verzählt!!!
       If Auswahl = 6 Then
       Auswahl = 1
       Else
       Auswahl = Auswahl + 1
       End If
    End If
    
    '---
    'wenn Taste für LED´s runterdimmen gedrückt -> muss bei 251 und bei 4 umgeschaltet werden
    If Command = Down And Pwm_wert < 4 Then
    Pwm_wert = 0                                                'falls er sich verzählt!!!
       If Auswahl = 1 Then
       Auswahl = 6
       Else
       Auswahl = Auswahl - 1
       End If
    End If
    
    If Command = Down And Pwm_wert > 251 Then
    Pwm_wert = 255                                              'falls er sich verzählt!!!
       If Auswahl = 1 Then
       Auswahl = 6
       Else
       Auswahl = Auswahl - 1
       End If
    End If
    
    Sprung:
    
    Return
    
    
    '-------------------------------------------------------------------------------
    'TIMER SPRUNGMARKEN:
    Timer1_irq:
    Timer1 = Timervorgabe1
    
    'Print "Command: " ; Command ; " RC5 von FB"
    'Print "PWM_Wert: " ; Pwm_wert ; " Sollwert"
    'Print "Auswahl: " ; Auswahl ; " Wert 1-3 um die PWM auf die LED´s aufzuteilen"
    'Print "UpDown: " ; Updown ; " Merker für automatisch hoch und runter dimmen"
    'Print "UpDownM: " ; Updownm
    'Print "Programm: " ; Programm
    'Print " "
    
    
    
    Return
    
    
    Pwm_prog:
    Timer2 = Timervorgabe2
    'Funktion:
    'Wenn der Zähler (z) =0 ist, dann  beginnt ein neuer PWM Zyklus:
    'Der Zähler (z) wird auf 255 gesetzt weil ein PWM Zyklus 255 Takte hat!
    'In das Hilfsregister (Ri) wird der Sollwert (PWM_Wert) geladen
    'der Zähler wird -1 gezählt
    'wenn Ri z.B. = 50 dann ist Ri größer 0 und der Ausgang wird eingeschaltet Ri wird -1 gerechnet
    'beim nächsten Durchlauf wird der Zähler wieder um 1 runtergezählt. Ri ist 50-1 also 49. 49ist größer als 0 und der Ausgang wird eingeschaltet
    'wenn irgendwann Ri = 0 ist wird der Ausgang ausgeschaltet. Und das passiert solange (soviele Takte)bis der Zähler (Z) auf 0 heruntegezählt wurde
    'wenn der Zähler (Z) = 0 ist ist ein PWM Zyklus zuende, der Zähler wird wieder auf 255 gesetzt und alles beginnt von vorne
    'bei einem Sollwert von 50 (Ri=50) wird der Ausgang also 50 Takte EIN geschaltet und 205 Takte AUS geschaltet;
    'das entspricht bei 5V im Mittel ca. 1V
    
    
        If Z = 0 Then                                           'Z = Zähler für Verhältnisstakte
        Z = 255                                                 'Zähler (Z) auf 255 setzen
        Ri = Pwm_wert                                           'Sollwert (PWM_Wert) in Hilfregister (Ri) schreiben
        End If
                                                                 'Zähler runterzählen
        Z = Z - 1
    
    
    
    'PWM UMSETZUNG ANFANG
        If Ri > 0 Then                                          'wenn Hilfsregister (Ri) größer 0, dann
    
    'PWM auf die LED-Paare übertragen
          If Auswahl = 1 Then                                   'Auswahl der LED Farben
        Portb.2 = 1                                             'GRÜN PWM-Ausgang einschalten
        Portb.1 = 0                                             'ROT PWM-Ausgang ausschalten
          End If
    
          If Auswahl = 2 Then                                   'Auswahl der LED Farben
        Portb.2 = 1                                             'GRÜN PWM-Ausgang einschalten
        Portb.3 = 0                                             'BLAU
          End If
    
          If Auswahl = 3 Then                                   'Auswahl der LED Farben
        Portb.1 = 1                                             'ROT PWM-Ausgang einschalten
        Portb.3 = 0                                             'BLAU
          End If
    
          If Auswahl = 4 Then                                   'Auswahl der LED Farben
        Portb.1 = 1                                             'ROT PWM-Ausgang einschalten
        Portb.2 = 0                                             'GRÜN PWM-Ausgang ausschalten
          End If
    
          If Auswahl = 5 Then                                   'Auswahl der LED Farben
        Portb.3 = 1                                             'BLAU PWM-Ausgang einschalten
        Portb.2 = 0                                             'GRÜN
          End If
    
          If Auswahl = 6 Then                                   'Auswahl der LED Farben
        Portb.3 = 1                                             'BLAU PWM-Ausgang einschalten
        Portb.1 = 0                                             'ROT
          End If
        Else                                                    'sonst
    '---
          If Auswahl = 1 Then
        Portb.2 = 0                                             'GRÜN  PWM-Ausgang ausschalten
        Portb.1 = 1                                             'ROT PWM-Ausgang einschalten
          End If
    
          If Auswahl = 2 Then
        Portb.2 = 0                                             'GRÜN
        Portb.3 = 1                                             'BLAU
          End If
    
          If Auswahl = 3 Then
        Portb.1 = 0                                             'ROT
        Portb.3 = 1                                             'BLAU
          End If
    
          If Auswahl = 4 Then
        Portb.1 = 0                                             'ROT  PWM-Ausgang ausschalten
        Portb.2 = 1                                             'GRÜN PWM-Ausgang einschalten
          End If
    
          If Auswahl = 5 Then
        Portb.3 = 0                                             'BLAU
        Portb.2 = 1                                             'GRÜN
          End If
    
          If Auswahl = 6 Then
        Portb.3 = 0                                             'BLAU
        Portb.1 = 1                                             'ROT
          End If
    
        End If
    'PWM UMSETZUNG ENDE
    
        Ri = Ri - 1
        If Ri = 255 Then Ri = 0
    
    Return
    
    
    
    '===============================================================================
    'Pinbelegung µC     RGB LED Leiste
    '===============================================================================
    '    AT MEGA 8
    '    +---U---+
    'PC6 +1    28+ PC5
    'PD0 +2    27+ PC4
    'PD1 +3    26+ PC3
    'PD2 +4    25+ PC2
    'PD3 +5    24+ PC1
    'PD4 +6    23+ PC0
    'Vcc +7    22+ GND
    'GND +8    21+ AREF
    'PB6 +9    20+ AVCC
    'PB7 +10   19+ PB5  /PROG
    'PD5 +11   18+ PB4  /PROG
    'PD6 +12   17+ PB3  /PROG
    'PD7 +13   16+ PB2
    'PB0 + 14 15 + Pb1
    '    +-------+
    
    
    'PB0 =
    'PB1 = Software PWM LED ROT
    'PB2 = Software PWM LED GRÜN
    'PB3 = Software PWM LED BLAU
    'PB4 =
    'PB5 =
    'PB6 =
    'PB7 =
    'PC0 =
    'PC1 =
    'PC2 =
    'PC3 =
    'PC4 =
    'PC5 =
    'PC6 = RESET
    'PC7 =
    'PD0 =
    'PD1 =
    'PD2 =
    'PD3 = IR - RC5 Eingang
    'PD4 =
    'PD5 =
    'PD6 =
    'PD7 =
    ...

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.11.2008
    Ort
    Kapfenberg
    Beiträge
    628
    Sollte aber funktionieren...
    Komisch...

    Gruß
    Thomas

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    oder benutzt der RC5 Code den Timer2 und nicht den Timer1? ich habe da leider nicht richtig viel gefunden....
    ...

  8. #8
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    55
    Beiträge
    1.258
    Hallo TobiasBlome,

    RC5 benutzt Timer0.

    Const Timervorgabe2 = 200 'also ca 18200 mal pro Sekunde!!!
    es sind nur 17857. Du hast 56 Takte bis zum Überlauf, nicht 55.
    Allerdings hast du nur 56*8 = 448 Takte bis zum nächsten Interrupt und bei dem, was du dort alles drin hast, kann ich mir nicht vorstellen, daß das gutgeht. Warum überhaupt SW-PWM? Du hast doch 3 Kanäle in HW?

    Gruß, Michael

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    Ich habe mir mal eine Exceltabelle gebaut, um Timer zu berechnen und laut Tabelle habe ich den Timer richtig - aber ich rechne das gleich noch mal nach.


    Tja SW-PWM:

    der Mega8 hat ja nur 3 Timer:
    1xRC5
    2xPWM

    ich weiß nicht ob die Timer noch etwas anderes nebenbei schaffen...

    PS: ich habe den 3.Kanal (OC2) nicht zum laufen bekommen...

    aber die SW-PWM kommt tatsächlich an ihre Grenzen

    Aber ich bin ja noch (hoffentlich) lernfähig.
    Könnte mir jemand die 3 Timer aufschreiben?

    Könnte ich ZUSÄTZLICH trotzdem noch zb. On Timer1 Timer1_irq benutzen?

    Code:
    'Timer0 = 8 Bit
    'wird für RC5 Auswertung benötigt!!!
    Config Rc5 = Pind.3                                         'Timer0 in Benutzung!!!
    Portd.3 = 1
    
    'Timer1 = 16 Bit
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1 
    
    'Timer2 = 8 Bit
    Config Timer2=PWM ??????????????????
    
    Enable Interrupts
    
    '----
    
    Compare1a = Led1
    Compare1b = Led2
    Compare_??? = Led3
    ...

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    ok - 17857,1.. ich muss mal meine Exceltabelle kontrollieren...
    ...

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress