- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 9 von 9

Thema: Problem bei Frontblitzprogrammierung

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694
    ... Vom Prinzip her läuft es so: .. Links: 3 mal aufblitzen ..
    Nur mal so, zur Sichtbarkeit. Bei meinem Pacer,

    ......Bild hier  

    einem Blinkgeber für Schritttakte (Jogging) leuchten die LEDs 100 ms, mit ca. 550 ms Pause. Das kann ich auch bei gutem Tageslicht noch einwandfrei erkennen.
    Geändert von oberallgeier (21.04.2016 um 17:07 Uhr) Grund: Pausenzeit nachgetragen
    Ciao sagt der JoeamBerg

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    Das Timing-Diagramm zeigt schon mal deutlich, daß man "waitms" die Aufgabe nicht programmiert bekommt.
    Dadurch das 3 verschiedene Zykluszeiten vorliegen, verschieben sich die verschiedenen Zyklen relativ zu den anderen.
    Jeder Zxklus besteht im Prinzip aus folgenden Zuständen:
    Ein, Zeit1, AUS, Zeit2, Ein, Zeit1, AUS, Zeit2, Ein, Zeit1, AUS, Zeit3.
    Bei Dach-L und Dach-R sind Zeit1 und Zeit2 anscheinend identisch.

    Entweder man arbeitet mit ISRs und und ändert bei jedem Aufruf anhand des Zustands (den man mitzählen muß) die Zeiten, oder man arbeitet ganz ohne ISRs indem man den Wert eines Timers einer Variablen zuweist und bei jedem Durchlauf der Schleife überprüft ob der aktuelle Timerwert minus dem gespeicherten Wert gleich oder größer einer Variablen ist, die den für den jeweiligen Zustand richtige Zeit enthällt.

    Man braucht dann also 4 Variablen die für jeden der 4 Zyklen den Zustand speichern.
    Maximal 24 Konstanten (z.B. in 4 Arrays)für die Zeiten (womit man auch die Frontblitzer asynchon ansprechen könnte)
    4 Variablen für den kleineren Timerwert
    4 Variablen für die Vergleichsoperator die je nach Zustand mit den Zeitwerten der Konstanten geladen wird.

    Mal schnell ein Pseudocodebeispiel.
    Vermutlich sind noch Fehler drin, ich hoffe aber der Gedanke wird verständlich.

    Code:
    Preset/definition
    Z1-ausgang = low
    Z1-timealt = 0
    Z1-zustand = 0
    Z1-const(100,100,100,100,100,700)
    
    Schleife
       IF Timer - Z1-timealt >= Z1-zeit (
         Toggel Z1-ausgang
         Z1-zustand ++ 1
         IF Z1-zustand >= 6 (Z1-zustand = 0)
         Z1-zeit = Z1-const(Z1-zustand)
         Z1-timealt = Timer
       )
    Ende
    Den Block nimmt man für jeden Zyklus ein mal (Z1 bis Z4)
    Im Preset definiert man die Startbedingung (macht die Schleife schlanker. Ich weis aber nicht ob das so in Bascom geht)

    Je Block gibt es ein IF, ist die Bedingung nicht erfüllt, wird der ganze Block übersprungen und der nächste Programmblock kann bearbeitet werden (bis die Schleife einmal komplett durch ist).

    Ist die Bedingung erfüllt, wird der entsprechende Ausgang umgeschaltet.
    Dann wird der Zustandszähler inkrementiert, da es ja einen Zustandswechsel gegeben hat.
    Darauf folgt eine Prüfung auf Wertebereichsüberschreitung des Zustandszähler (ist gegeben wenn der Zyklus einmal durchgelaufen ist) und bei Bereichsüberschreitung erfolgt das Zurücksetzen.
    Danach wird die Vergleichsvariable für den Zeitvergleich aus der entsprechenden Konstante gesetzt.
    Und zum Schluß noch der aktuelle Timerwert übernommen in die Variable für die Startzeit des aktuellen Zustands.

    Im Gegensatz zu ISRs kann es bei diesem Konstrukt dazu kommen, das die einzelnen Zustände um einen Schleifendurchlauf länger dauern als die vorgegebene Zeit.
    Wen das nicht sört, spart so ISRs für andere Aufgaben.
    Geändert von i_make_it (22.04.2016 um 07:42 Uhr)

  3. #3

    Geschafft

    Hallo und danke für eure Hilfen,

    ich habe den Code von Searcher soweit übernommen. Leider kam ich bisher nur zu einem sehr kurzen Testlauf, aber es sieht super aus. Die Zeiten für die Frontblitzer habe ich angepasst.

    @i_make_it

    Die Dachleuchten sind minimal unterschiedlich. Da fällt aber fast immer erst bei längerer Betrachtung auf. Das Phänomen kann man so beschreiben, dass sie mal gleichzeitig gehen, dann wechselnd. Daher auch nur der geringe Unterschied in der Frequenz.

    Für mein erstes Mal denke ich, dass es gut gelungen ist. Nun muss ich mir noch Gedanken über die Stromversorgung machen (bin auf so nem niedrigen Level, dass mir nicht bewusst war, dass weiße LED's weitaus mehr Leistung benötigen als andere... )

    Aber ich lerne ja - soweit ich Zeit habe

    Eine Frage nebenbei - kennt Ihr das Bascom Buch von Franzis und kann ich das bedenkenlos kaufen?



    P.S. Ein Video kommt noch, wenn ich wieder zu Hause bin. Das wird dann auch länger laufen, damit man die Unterschiede auf dem Dach ordentlich sieht

    Grüße

    DKM
    Geändert von DKM (27.04.2016 um 06:07 Uhr) Grund: Link angepasst

Ähnliche Themen

  1. ATMega32 UART problem --> Problem gelöst
    Von ChristophB im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 12.03.2010, 18:45
  2. Problem mit Atmega644P Erkennung (Bascom-Versions-Problem)
    Von Rohbotiker im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 11.08.2008, 18:52

Berechtigungen

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

LiFePO4 Speicher Test