- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 10

Thema: Steuerung für TN Tochteruhr

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Hallo,

    Dann hat sich der Fehle verdoppelt, dann musst du 914 und 915 nehmen.

    Die genaue Rechnerei habe ich mir erspart, ging nur ums Prinzip, wie man nicht ganzzahlige Teiler machen kann.

    MfG Peter(TOO)

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    08.06.2011
    Ort
    Ruhrgebiet
    Alter
    36
    Beiträge
    42
    Kurze Aktualisierung...

    Nach 15 Stunden hab ich es auf 1 Minute und 5 Sekunden Gangfehler geschafft.

    Die Variable D wurde hinzugefügt, um jede Minute einen anderen Zählwert einzusetzen. Ist mit sicherheit keine elegante Methode. Vorallem kann ich mir vorstellen das es besser wäre, schon innerhalb einer Minute zu mitteln. Und das ganze nicht über mehrere Minuten zu ziehen. Warscheinlich hätte man mit etwas Mathematikverständnis den richtigen Mittelwert auch direkt errechnen können. Da ich ein sollches Verständnis nicht besitze, lief es über try and error

    Hier ist der aktuelle Code:

    Code:
    $regfile = "attiny45.dat"
    
    '### 2 MHz Quarz, Fusebit für 1/8 Systemtakt gesetzt ###
    $crystal = 250000
    $hwstack = 36
    $swstack = 4
    $framesize = 4
    
    
    '### Bit zum minütlichen Wechsel des Ausgangsports ###
    Dim B As Bit
    
    
    '### Zählvariable wird beim Timerüberlauf inkrementiert ###
    Dim C As Word
    
    
    '### Zählkonstante für Mittelung
    Dim K As Word
    
    
    
    Dim D As Byte
    
    
    '### Ausgänge für beide Brückenzweige ###
    Config Portb.0 = Output
    Config Portb.1 = Output
    
    
    
    
    '### Timer0 konfigurieren. 0,25 MHz (Systemtakt) / 64 (Prescaler) = 3906,25 / 256 (8-Bit Timer) * 60 (Sekunden) = 915,527 ###
    
    Config Timer0 = Timer , Prescale = 64
    
    
    
    '### Timerüberlauf ###
    On Ovf0 On_ovf0
    Enable Ovf0
    
    
    Enable Interrupts
    
    Start Timer0
    
    
    C = 0
    D = 0
    
    Do
    
    
    
    
    Select Case D
    
    Case 0 : K = 915
    Case 1 : K = 916
    Case 2 : K = 915
    Case 3 : K = 915
    Case 4 : K = 916
    Case 5 : K = 916
    Case 6 : K = 916
    Case 7 : K = 916
    Case 8 : K = 915
    
    End Select
    
     If D = 8 Then
    
     D = 0
    
     End If
    
       Incr D
    
    
    
    
    
    
    
      If C = K Then
    
      C = 0
    
      Toggle B
    
    
    
          If B = 0 Then
    
             Portb.1 = 1
    
             Waitms 400
    
             Portb.1 = 0
    
             Else
    
             Portb.0 = 1
    
             Waitms 400
    
             Portb.0 = 0
    
          End If
    
      End If
    
    
    
    
    
    
    
      Loop
    
    End
    
    
    
    '### Routine bei Timerüberlauf ###
    On_ovf0:
    
    Incr C
    
    
    Return

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Hallo,

    Das
    incr D
    ist so falsch !

    Dein Do ... Loop wird tausende male pro Sekunde durchlaufen, nicht nur dann wenn C incrementiert wurde !!

    Code:
    [...]
    
    
    C = 0
    D = 0
    K = 915
    
    Enable Interrupts
    Start Timer0
    
    Do
    
      Select Case D
        Case 0 : K = 915
        Case 1 : K = 916
        Case 2 : K = 915
        Case 3 : K = 915
        Case 4 : K = 916
        Case 5 : K = 916
        Case 6 : K = 916
        Case 7 : K = 916
        Case 8 : K = 915
      End Select
    
      If C >= K Then
        C = 0
        Incr D
        If D > 8 Then
          D = 0
        End If
    
        Toggle B
    [...]
    1. Da C im Interrupt incrementiert wird, solltest du C initialisieren, bevor du den Timer startest.
    2. Bei solchen Zählern sollt man immer auf grösser als oder grösser gleich abfragen ( If D > 8 Then).
    Falls D irgendwie einen Wert ausserhalb von 0 bis 8 annimmt, läuft deine Schlaufe sonst über 65'000 mal durch, D ist Word, also 16 Bit, bis D endlich auf 0 gesetzt wird!



    MfG Peter(TOO)

Ähnliche Themen

  1. steuerung für 18 Servos
    Von freekster im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 6
    Letzter Beitrag: 05.11.2013, 13:49
  2. Steuerung für CNC
    Von GrEEkLoVeR im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 12.10.2010, 16:30
  3. Steuerung für tauchroboter
    Von P4D im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 1
    Letzter Beitrag: 14.02.2010, 21:22
  4. DC/DC-Wandler für PC-Steuerung
    Von amarikar im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 21.07.2005, 19:16
  5. Steuerung für Roboterarm
    Von Rubi im Forum Mechanik
    Antworten: 11
    Letzter Beitrag: 15.07.2005, 16:40

Berechtigungen

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

Solar Speicher und Akkus Tests