- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 9 von 9

Thema: Problem bei der verwendung eines Timers

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    01.06.2007
    Ort
    Recke
    Alter
    35
    Beiträge
    46

    Problem bei der verwendung eines Timers

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hi, ich möchte einen Schrittmotor mit der Schrittmotorplatiene von Pollin ansteuern. Das ganze möchte ich mit einem Timer versuchen, nun hab ich folgendes "problem". In dem Folgenden Code will ich erstmal die ansteuerung testen und eine verstellbare geschwindigkeit hinbekommen.

    Der Interrupt von Timer macht auch das was er soll, nur scheint die Do Loop schleife des Hautprogramms garnichts zu machen, weder bekomme ich eine ausgabe auf dem lcd, noch ändert sich irgendwas an der geschwindigkeit.

    Code:
     'Programm Timer Test 02 nach verdrahtungsplan 1.0
    
    
     $regfile = "m32def.dat"
    'Taktfrequenz 16MHz
     $crystal = 16000000
    'Baudrate für UART
     $baud = 2400
    'Setzt den verfügbaren Speicher für den Frame
     $framesize = 32
    'Setzt den verfügbaren Speicher für den Software Stack
     $swstack = 32
    'Setzt den verfügbaren Speicher für den Hardware Stack
     $hwstack = 32
    
    '**************************************
    '*********     Variablen     **********
    '**************************************
    
     Dim Step As Integer
     Step = 0
     Dim Timerstart As Long
     Timerstart = 3000
     Dim I As Integer
    
    '**************************************
    '*********  Namenszuweisung  **********
    '**************************************
       Lcd_db4 Alias Porta.4
       Lcd_db5 Alias Porta.5
       Lcd_db6 Alias Porta.6
       Lcd_db7 Alias Porta.7
       Lcd_e Alias Portb.0
       Lcd_rs Alias Portb.2
    
       Led1 Alias Portc.0
       Led2 Alias Portc.1
       Led3 Alias Portc.2
       Led4 Alias Portc.3
       Led5 Alias Portc.4
       Led6 Alias Portc.5
       Led7 Alias Portc.6
       Led8 Alias Portc.7
       Led9 Alias Portd.5
       Led10 Alias Portd.6
    
       Taste1port Alias Porta.0
       Taste1 Alias Pina.0
       Taste2port Alias Porta.1
       Taste2 Alias Pina.1
       Taste3port Alias Porta.2
       Taste3 Alias Pina.2
       Taste4port Alias Porta.3
       Taste4 Alias Pina.3
    
       Audio Alias Portd.7
    
       Schrittmotorschalter1port Alias Portb.3
       Schrittmotorschalter1 Alias Pinb.3
       Schrittmotorschalter2port Alias Portb.1
       Schrittmotorschalter2 Alias Pinb.1
       Schrittmotor1 Alias Portb.4
       Schrittmotor2 Alias Portd.2
       Schrittmotor3 Alias Portd.3
       Schrittmotor4 Alias Portd.4
    
    '**************************************
    '******** Timer-Konfiguration *********
    '**************************************
     'Konfiguriere den 16 bit Timer. Mit Prescale 256 62500
     Config Timer1 = Timer , Prescale = 64
     'Timer einschalten
     Enable Timer1
     'Beim Timer überlauf, zu Isr_Timer1 verzweigen.
     On Timer1 Isr_timer1
     'Interrupts global einschalten
     Enable Interrupts
     Timer1 = Timerstart
    
    
    '**************************************
    '********* LCD-Konfiguration **********
    '**************************************
    'LCD-Pins konfigurieren
     Config Lcdpin = Pin , Db4 = Lcd_db4 , Db5 = Lcd_db5 , Db6 = Lcd_db6 , Db7 = Lcd_db7 , E = Lcd_e , Rs = Lcd_rs
     'LCD als 16x2 Zeichen konfigurieren
     Config Lcd = 16 * 2
    'LCD wird im 4-Bit-Modus betrieben
     Config Lcdbus = 4
    
    '**************************************
    '********* Port-Konfiguration *********
    '**************************************
    'LED-Ausgänge
     Config Led1 = Output
     Config Led2 = Output
     Config Led3 = Output
     Config Led4 = Output
     Config Led5 = Output
     Config Led6 = Output
     Config Led7 = Output
     Config Led8 = Output
     Config Led9 = Output
     Config Led10 = Output
    'Tasteneingang
     Config Taste1port = Input
     Config Taste2port = Input
     Config Taste3port = Input
     Config Taste4port = Input
    'Audio-Ausgang (Summer und NF Verstärker)
     Config Audio = Output
    'Schrittmotorplatine Ein/Ausgänge
     Config Schrittmotor1 = Output
     Config Schrittmotor2 = Output
     Config Schrittmotor3 = Output
     Config Schrittmotor4 = Output
     Config Schrittmotorschalter1port = Input
     Config Schrittmotorschalter2port = Input
    
    '**************************************
    '******** LCD initialisieren **********
    '**************************************
     Initlcd
    'Display löschen
     Cls
    
    'Anfang Eigendliches Programm
    
    
    
    'Endlosschleife
    Do
    
    If Taste1 = 1 Then
       Cls
       Locate 1 , 1
       Lcd "3600"
       Timerstart = 3600
    End If
    If Taste2 = 1 Then
       Cls
       Locate 1 , 1
       Lcd "15000"
       Timerstart = 15000
    End If
    If Taste3 = 1 Then
       Cls
       Locate 1 , 1
       Lcd "40000"
       Timerstart = 40000
    End If
    
    Loop
    
    
    'Timer1 Interrupt
    Isr_timer1:
       Timer1 = Timerstart
       If Step = 0 Then
        Led1 = 1
        Led2 = 0
        Led3 = 0
        Led4 = 0
       End If
       If Step = 1 Then
        Led1 = 0
        Led2 = 0
        Led3 = 1
        Led4 = 0
       End If
       If Step = 2 Then
        Led1 = 0
        Led2 = 1
        Led3 = 0
        Led4 = 0
       End If
       If Step = 3 Then
        Led1 = 0
        Led2 = 0
        Led3 = 0
        Led4 = 1
       End If
       Step = Step + 1
       If Step = 4 Then
          Step = 0
       End If
    Return
    
    
    
    End

    Warum ist das so ?? Startet der timerinterrupt zu oft das das hauptprogramm blockiert ? Das kann ich mir nicht vorstellen, da das ja nur ca 2 mal pro sekunde ist.

    Danke schonmal

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo,
    deine Taster schalten im Programm so, als ob sie gegen VCC schalten. Hast du dann einen Pulldown dran gegen GND?
    Bei 16MHz, Prescaler 64 und Timerstart=3000 sollten die LEDs etwa 4 mal pro Sekunde umschalten? Du schreibst 2 mal.
    Funktioniert das LCD grundsätzlich, wenn du z.B. eine Ausgabe nach der Initialisierung machst?

    Gruß

    Rolf

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    01.06.2007
    Ort
    Recke
    Alter
    35
    Beiträge
    46
    Zu den Tastern, ja auf den Pollin boards sind pull down wiederstände drauf und die taster schalten nach 5v.

    Ja das LCD Funktioniert, hab damit schon ein paar andere anwendungen erstellt.

    Ich habe nun erstmal nen programm für den Schrittmotor erstellt ohne timer.
    Da funktioniert es bestens.

    Code:
     'Programm Schrittmotor Test 01 nach verdrahtungsplan 1.0
    
    
     $regfile = "m32def.dat"
    'Taktfrequenz 16MHz
     $crystal = 16000000
    'Baudrate für UART
     $baud = 2400
    'Setzt den verfügbaren Speicher für den Frame
     $framesize = 32
    'Setzt den verfügbaren Speicher für den Software Stack
     $swstack = 32
    'Setzt den verfügbaren Speicher für den Hardware Stack
     $hwstack = 32
    
    '**************************************
    '*********     Variablen     **********
    '**************************************
    
     Declare Sub Schritte
     Dim Speed As Integer
     Dim Modus As Integer
     Dim A As Integer
     Dim I As Integer
    
    '**************************************
    '*********  Namenszuweisung  **********
    '**************************************
       Lcd_db4 Alias Porta.4
       Lcd_db5 Alias Porta.5
       Lcd_db6 Alias Porta.6
       Lcd_db7 Alias Porta.7
       Lcd_e Alias Portb.0
       Lcd_rs Alias Portb.2
    
       Led1 Alias Portc.0
       Led2 Alias Portc.1
       Led3 Alias Portc.2
       Led4 Alias Portc.3
       Led5 Alias Portc.4
       Led6 Alias Portc.5
       Led7 Alias Portc.6
       Led8 Alias Portc.7
       Led9 Alias Portd.5
       Led10 Alias Portd.6
    
       Taste1port Alias Porta.0
       Taste1 Alias Pina.0
       Taste2port Alias Porta.1
       Taste2 Alias Pina.1
       Taste3port Alias Porta.2
       Taste3 Alias Pina.2
       Taste4port Alias Porta.3
       Taste4 Alias Pina.3
    
       Audio Alias Portd.7
    
       Schrittmotorschalter1port Alias Portb.3
       Schrittmotorschalter1 Alias Pinb.3
       Schrittmotorschalter2port Alias Portb.1
       Schrittmotorschalter2 Alias Pinb.1
       Schrittmotor1 Alias Portb.4
       Schrittmotor2 Alias Portd.2
       Schrittmotor3 Alias Portd.3
       Schrittmotor4 Alias Portd.4
    
    '**************************************
    '********* LCD-Konfiguration **********
    '**************************************
    'LCD-Pins konfigurieren
     Config Lcdpin = Pin , Db4 = Lcd_db4 , Db5 = Lcd_db5 , Db6 = Lcd_db6 , Db7 = Lcd_db7 , E = Lcd_e , Rs = Lcd_rs
     'LCD als 16x2 Zeichen konfigurieren
     Config Lcd = 16 * 2
    'LCD wird im 4-Bit-Modus betrieben
     Config Lcdbus = 4
    
    '**************************************
    '********* Port-Konfiguration *********
    '**************************************
    'LED-Ausgänge
     Config Led1 = Output
     Config Led2 = Output
     Config Led3 = Output
     Config Led4 = Output
     Config Led5 = Output
     Config Led6 = Output
     Config Led7 = Output
     Config Led8 = Output
     Config Led9 = Output
     Config Led10 = Output
    'Tasteneingang
     Config Taste1port = Input
     Config Taste2port = Input
     Config Taste3port = Input
     Config Taste4port = Input
    'Audio-Ausgang (Summer und NF Verstärker)
     Config Audio = Output
    'Schrittmotorplatine Ein/Ausgänge
     Config Schrittmotor1 = Output
     Config Schrittmotor2 = Output
     Config Schrittmotor3 = Output
     Config Schrittmotor4 = Output
     Config Schrittmotorschalter1port = Input
     Config Schrittmotorschalter2port = Input
    
    '**************************************
    '******** LCD initialisieren **********
    '**************************************
     Initlcd
    'Display löschen
     Cls
    
    'Anfang Eigendliches Programm
    
     Speed = 100
    
    'Endlosschleife
    Do
    
    If Taste1 = 1 Then
       A = 8
       Bitwait Taste1 , Reset
    End If
    If Taste2 = 1 Then
       A = 80
       Bitwait Taste2 , Reset
    End If
    If Taste3 = 1 Then
       A = 400
       Bitwait Taste3 , Reset
    End If
    If Taste4 = 1 Then
         Do
         If Modus = 0 Then
          Modus = 1
          Exit Do
         End If
         If Modus = 1 Then
          Modus = 2
          Exit Do
         End If
         If Modus = 2 Then
          Modus = 0
          Exit Do
         End If
         Loop
         Bitwait Taste4 , Reset
    End If
    
    If Modus = 0 Then
     Speed = A
    End If
    If Modus = 1 Then
     Speed = A / 2
    End If
    If Modus = 2 Then
     Speed = A / 4
    End If
    
    Cls
    Locate 1 , 1
    Lcd Speed
    Locate 2 , 1
    Lcd Modus
    
    Call Schritte
    
    Loop
    
    Sub Schritte
       Schrittmotor1 = 1
       Schrittmotor2 = 0
       Schrittmotor3 = 0
       Schrittmotor4 = 0
       Waitms Speed
       Schrittmotor1 = 0
       Schrittmotor2 = 0
       Schrittmotor3 = 1
       Schrittmotor4 = 0
       Waitms Speed
       Schrittmotor1 = 0
       Schrittmotor2 = 1
       Schrittmotor3 = 0
       Schrittmotor4 = 0
       Waitms Speed
       Schrittmotor1 = 0
       Schrittmotor2 = 0
       Schrittmotor3 = 0
       Schrittmotor4 = 1
       Waitms Speed
    End Sub
    
    End

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hat der dir bei der Benutzung der Variable Step eigentlich keine Fehlermeldung gebracht? Das ist doch ein reserviertes Wort.

    Gruß

    Rolf

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    01.06.2007
    Ort
    Recke
    Alter
    35
    Beiträge
    46
    Ne hatter nicht, wahrscheinlich weil ich keine variable Step habe ?

    Aso im ersten ne hatter aber nichts zu gesagt, möglicher grund ? mal testen, morgen.

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    wundert mich dass der compiler das zulässt.
    Step ist n Befehl für ne For-Next-Schleife ... sollte auch
    farblich hervorgehoben sein in Deinem Code.
    Kann der Fehler sein.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Also ich kann den ersten Code nicht compilieren.
    Welche Bascom Version hast du? Meine ist 1.11.9.3.

    Gruß

    Rolf

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    01.06.2007
    Ort
    Recke
    Alter
    35
    Beiträge
    46
    Soo, nun gehts weiter, also ich hab die Version 1.11.8.7.

    Werde es dann gleich mal mit nem anderen variablen namen versuchen.

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    01.06.2007
    Ort
    Recke
    Alter
    35
    Beiträge
    46
    Herzlichsten dank .... Fehler behoben, war nur der Name der Variablen .....

    Aber schon komisch das er das beim prüfen und kompilieren nicht gemerkt hat.

Berechtigungen

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

LiFePO4 Speicher Test