- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 21

Thema: Finde Fehler nicht

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte Avatar von Tido
    Registriert seit
    14.11.2006
    Ort
    OWL
    Alter
    48
    Beiträge
    622
    Versuch mal:

    Code:
    'Bascom Hallsensor test
    
    $regfile = "m328pdef.dat"
    $crystal = 20000000                                         'Quarzfrequenz
    $hwstack = 32
    $framesize = 64
    $swstack = 32
    
    
    
    Config Pind.1 = Output
    
    
    
    'Timer und der Teiler festlegen 10ms
    Config Timer0 = Timer , Prescale = 1024
    On Timer0 Timer_irq
    Const Timervorgabe = 175
    Config Int0 = Rising
    Enable Int0
    
    
    
    
    Enable Interrupts
    
    Dim Hallimpuls As Integer
    Dim Cnt As Byte
    Dim Sekunde As Byte
    Dim Minute As Byte
    Dim Stunde As Byte
    Dim Sekunde_last As Byte
    Dim Minute_last as Byte
    
    
    Hallimpuls = 0
    Stunde = 0
    Minute = 0
    Sekunde = 0
    Enable Timer0
    
    
    
    Do
    
    
    
    
          If Stunde = 0 And Minute <> Minute_last Then Gosub Led
    
    
    
    Loop
    
    
    
    Led:
         Hallimpuls = 0
         Portd.1 = 1'LED an
         On Int0 Zaehlen
         
    
          Do
    
          Idle
          Loop Until Hallimpuls = 10
       Portd.1 = 0'LED aus
    minute_last = minute
    Return
    
    
    
    
    
    Zaehlen:
    
    Incr Hallimpuls
    
    Return
    
    
    Timer_irq:
    Timer0 = Timervorgabe
    
       Incr Cnt
    
        If Cnt = 50 Then
           Portb.6 = 0
        End If
    
        If Cnt = 100 Then
           Portb.6 = 1
    
           Sekunde = Sekunde + 1
           If Sekunde = 60 Then
              Sekunde = 0
              Minute = Minute + 1
              If Minute = 60 Then
                 Minute = 0
                 Stunde = Stunde + 1
                 If Stunde = 24 Then
                    Stunde = 0
                 End If
              End If
           End If
           Cnt = 0
        End If
    Return
    Löst zwar wahrscheinlich dein Problem, hat aber weitere Fallstricke.
    MfG
    Tido

    ---------------------------------------------------
    Have you tried turning it off and on again???
    ---------------------------------------------------

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    20.05.2012
    Beiträge
    22
    Danke werd ich morgen ausprobieren. Wollte aber am ende der Entwicklung Motoren zu einer bestimmten Zeit (z.B 1h23m)einschalten und nach einer Bestimmten Anzahl an Umdrehungen ( z.B. 20) wieder ausschalten, nach einer bestimmten Zeit ( z.B. 3h56) wieder einschalten und nach 20 Umdrehungen wieder ausschalten usw...

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von Tido
    Registriert seit
    14.11.2006
    Ort
    OWL
    Alter
    48
    Beiträge
    622
    Dann setz dir in der Sub ne Variable auf 1 und lösche sie in der irq wieder, wenn sich die minute ändert. Und den "gosub" führst du nur aus wenn variable=0. So ist sichergestellt, dass die sub nur einmal pro minute aufgerufen wird.
    MfG
    Tido

    ---------------------------------------------------
    Have you tried turning it off and on again???
    ---------------------------------------------------

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    20.05.2012
    Beiträge
    22
    Hallo danke für die Hilfe hat leider nicht den gewünschten Erflog gebracht !!
    Geändert von hunikuni (02.06.2012 um 21:18 Uhr)

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Ich weiß zwar nicht ob darin das Problem liegt, aber in diesem Teils des Codes fallen zwei Dinge auf:
    Code:
    Led:     Hallimpuls = 0     On Int0 Zaehlen     If Hallimpuls = 0 Then     Toggle Portd.1
    1. Wenn Du in der ersten Zeile die Variable Hallimpuls auf 0 setzt, brauchst D zwei Zeilen später nicht abzufragen, ob sie auch tatsächlich 0 ist
    (das ist aber nur ein "Schönheitsfehler" und dürfte keine Fehlfunktionen nach sich ziehen)

    2. Das Statement "On Int0 Zaehlen" sollte vor die Hauptschleife, denn es muss nur ein einziges mal deklariert werden, welche ISR beim entsprechenden Interrupt ausgeführt werden soll.
    Wenn Du damit erreichen wolltest dass der Interrupt0 als solches aktiviert werden soll, wäre "Enable Int0" der richtige Befehl. Erst nach dieser Anweisung ist der Interrupt "scharf".

    Außerdem sehe ich das gleiche Problem wie Tido: Das Unterprogramm LED wird nach jeweils 10 Hallsensor-Impulsen gleich wieder aufs neue ausgeführt, weil die Bedingung "Stunde = 0 und Minute = 1 (bzw. 3) ja weiterhin erfüllt ist.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    20.05.2012
    Beiträge
    22
    Dank für die Antwort.
    Außerdem sehe ich das gleiche Problem wie Tido: Das Unterprogramm LED wird nach jeweils 10 Hallsensor-Impulsen gleich wieder aufs neue ausgeführt, weil die Bedingung "Stunde = 0 und Minute = 1 (bzw. 3) ja weiterhin erfüllt ist
    Ich dachte Timer läuft weiter und Bedingung Stunde = 0 Minute =1 bzw 3 ist nur einmal erfüllt ist.

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Natürlich ist die Bedingung nur "einmal" erfüllt -aber das für eine ganze Minute lang! Und während dieser Zeit wird die Hautschleife schätzungsweise ein paar Millionen male durchlaufen, und jedes mal wird das Unterprogramm ausgeführt!

    Und der Timer läuft sowieso weiter...

Ähnliche Themen

  1. Hilfe...finde die fehler nicht heraus
    Von Kuwe im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 13
    Letzter Beitrag: 21.04.2010, 20:29
  2. Antworten: 4
    Letzter Beitrag: 08.01.2008, 19:03
  3. Antworten: 29
    Letzter Beitrag: 07.01.2008, 17:20
  4. ADC - Ich finde den/die Fehler nicht
    Von Christoph2 im Forum C - Programmierung (GCC u.a.)
    Antworten: 9
    Letzter Beitrag: 07.08.2007, 18:34
  5. AVR 90S2313 Problem, und finde nicht den Fehler!
    Von Alex20q90 im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 01.05.2005, 13:20

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress