Wie alles begann - oder - 4Kanal-PWM mit AT90S2313 für einen Magierstab

Der aktuelle Softwarestand ...

Hallo zusammen,

so sieht im Moment die aktuelle Software aus ...
Programmcode: Anhang anzeigen magierstab_v2_2013-08-10-a_public.bas
... sind bis jetzt "nur" gute 1700 Zeilen.

Die Statemachine zum Sperren/Freigeben des Magierstabes habe ich entfernt weil dort auch die Tastenkombinationen reincodiert sind. Der Stab ist nun also gesichert und ein Diebstahl nutzt nur noch zum Ansehen aber nicht mehr für die Benutzung :cool: Rumprobieren am Code lohnt sich auch nicht. Es ist eine 7-stellige Kombination der vorhandenen Tasten. :p Also vergleichbar mit einer 7-stelligen Octalzahl. Ich sage nur ... viel Spaß beim rumprobieren :p :rolleyes:

Der Debug/Konfigurationsmodus ist auch angefangen. Er wird über den INT0 gestartet und ist damit aus jedem Zustand heraus aufrufbar. Es fehlt aber noch das ""Leben" in diesem Modus.

Die Flash-Benutzung liegt im Moment bei 18%.

Einen Schutz für den Stab habe ich nun auch. Ich habe das zusammengeklebte Rohr aus Hartschaum nun mit Leder überzogen. Es fehlt nur noch die obere Lederfläche. Sieht schon alles recht nett aus :cool:

Für die Statusanzeige im Modus5 (Sperren/Entsperren) habe ich nun noch die Modusanzeige blinken lassen. Grundfarbe violett um den Modus anzuzeigen und kurze Aufblitzer in rot oder grün je nachdem ob er gesperrt oder freigegeben ist.

Der Modus0 (Debug) ist nun auch nicht mehr schwarz sondern blitzt immer kurz in rot auf.

Update: Ich hab mal aus Jux mit Modus1 (Flammensimulation) angefangen. Naja ... es flackert ein wenig aber so richtig zufriedenstellend ist es nicht. Immerhin werden 4 Kanäle unabhängig von einander verändert. Da muß noch ne gute Idee her :p Auf jeden Fall müllt die RND-Funktion den Flash ziemlich voll (von 19% auf 21%) :p

Update 2: Langsam komme ich einer Lösung näher ...
Code:
' ###################################################################   #   ###
' ###################################################################  ##   ###
' ################################################################### # #   ###
' ##### Modusschleife 1 Start #######################################   #   ###
' ###################################################################   #   ###
' ##### rot #########################################################   #   ###
' ###################################################################  ###  ###
' ##### Feuer/Wasser-Simulation #####################################       ###
Mode1_mainloop:
Pwm_ws1 = 0                                                 ' Alles dunkel machen
Pwm_ws2 = 0                                                 ' alle weissen Kanaele versorgen
Pwm_ws3 = 0
Pwm_rt1 = 100                                               ' alle roten Kanaele versorgen
Pwm_rt2 = 100
Pwm_gn1 = 100                                               ' alle gruenen Kanaele versorgen
Pwm_gn2 = 100
Pwm_bl1 = 0                                                 ' alle blauen Kanaele versorgen
Pwm_bl2 = 0
Pwm_bl3 = 0

Delay_cnt = 0                                               ' Zeitteiler auf 0 (Modus-Blinken)
Fire_dir = 0                                                ' Dimm-Richtungs-Flag (0=Add , 4=Sub)

Do

If Dimmstep_flag = 1 Then                                   ' Timer1-ISR wurde aktiviert
  Dimmstep_flag = 0                                         ' Flag zuruecksetzen

  '
  Incr Delay_cnt                                            ' Zeitteiler erhoehen
  If Delay_cnt = 4 Then                                     ' Zeitteiler Maxwert
    Delay_cnt = 0                                           ' Zeitteiler wieder auf 0

    Fire_dif = Rnd(10)                                      ' 0..9  Dimm-Differenz auswuerfeln
    Fire_col = Rnd(4)                                       ' 0..3  Farbkanal auswuerfeln

    If Fire_dif > 8 Then                                    ' Add/Sub seltener wechseln
'      If Fire_col > 2 Then
        Fire_dir = Fire_dir + 4                             ' Add/Sub toggeln
'      End If
    End If
    If Fire_dir > 4 Then Fire_dir = 0                       ' 0 = Add , 4 = Sub , Wert bereinigen
    Fire_col = Fire_col + Fire_dir                          ' Farbkanal mit Add/Sub addieren

    Select Case Fire_col                                    ' Farbkanal und Add/Sub auswaehlen
      Case 0                                                ' 0..3 = Differenz zum Kanal addieren
        Pwm_rt1 = Pwm_rt1 + Fire_dif
      Case 1
        Pwm_rt2 = Pwm_rt2 + Fire_dif
      Case 2
        Pwm_gn1 = Pwm_gn1 + Fire_dif
      Case 3
        Pwm_gn1 = Pwm_gn1 + Fire_dif

      Case 4                                                ' 4..7 = Differenz vom Kanal subtrahieren
        Pwm_rt1 = Pwm_rt1 - Fire_dif
      Case 5
        Pwm_rt2 = Pwm_rt2 - Fire_dif
      Case 6
        Pwm_gn1 = Pwm_gn1 - Fire_dif
      Case 7
        Pwm_gn1 = Pwm_gn1 - Fire_dif
    End Select

  End If

  If Pwm_rt1 < 100 Then Pwm_rt1 = 100                       ' Rot Minimum begrenzen
  If Pwm_rt2 < 100 Then Pwm_rt2 = 100
  If Pwm_gn1 < 30 Then Pwm_gn1 = 30                         ' Gruen Minimum begrenzen
  If Pwm_gn2 < 30 Then Pwm_gn2 = 30
  If Pwm_rt1 > 245 Then Pwm_rt1 = 245                       ' Rot Maximum begrenzen
  If Pwm_rt2 > 245 Then Pwm_rt2 = 245
  If Pwm_gn1 > 150 Then Pwm_gn1 = 150                       ' Gruen Maximum begrenzen
  If Pwm_gn2 > 150 Then Pwm_gn2 = 150


  ' ====== MODUS ======
  If Tast_mode = 0 Then
Pwm_ws1 = 0                                                 ' Alles dunkel machen
Pwm_ws2 = 0                                                 ' alle weissen Kanaele versorgen
Pwm_ws3 = 0
Pwm_rt1 = 0                                                 ' alle roten Kanaele versorgen
Pwm_rt2 = 0
Pwm_gn1 = 0                                                 ' alle gruenen Kanaele versorgen
Pwm_gn2 = 0
Pwm_bl1 = 0                                                 ' alle blauen Kanaele versorgen
Pwm_bl2 = 0
Pwm_bl3 = 0
    Gosub Mode_select                                       ' Taste gedrueckt
  End If

  Gosub Akku_mess                                           ' Akkuspannungsmessung und Anzeige

End If

If Modus <> 1 Then
  Locate 1 , 8                                              ' LCD saeubern
  Lcd "      "
  Return                                                    ' Modus verlassen
End If
Loop
' #############################################################################
' #############################################################################
' ##### Modusschleife 1 Ende ##################################################
' #############################################################################
' #############################################################################
Das Feintuning des Effektes ist allerdings ne ziemliche Frickelei :hmpf:

Gruß
Dino
 
Feuersimulation und Wassersimulation

Hallo zusammen,

der Code-Teil aus dem letzten Beitrag hat schonmal die richtige Richtung ;) Da kann ich drauf aufbauen. Nun aber ein paar Gedankenspielchen zum weiteren Codeaufbau für diesen Betriebsmodus ...

Die Simulationsspektakel sollen auch dimmbar sein. Also über Taste das Feuer langsam anfachen, aufheizen und auch wieder "runterbrennen lassen" ;) Mit der Wassersimulation genauso.

Bei der Feuersimulation wird die Primärfarbe rot sein. Mit den grünen LEDs als Sekundärfarbe erzeugt man dann ein Gelb bei der additiven Mischung in den Kristallen. Mit der mittleren blauen LED wird dann ganz zum Schluß noch etwas weitere Helligkeit reingebracht.

Bei der Wassersimulation ist die Primärfarbe blau. Mit den grünen LEDs als Sekundärfarbe kommt dann bei der additiven Mischung ein türkis/cyan zusammen. Zum Schluß hier dann noch ein ganz kleiner Stich mit den roten LEDs zum aufhellen. Aber das muß ich mir noch überlegen ob ich die roten LEDs beim Wasser einsetze.

Bei beiden Simulationen werden alle Farbkanäle unabhängig voneinander per Zufall Helligkeitsschwankungen bekommen um eine Flammenbewegung oder Wasserwellen (lichtdurchflutetes Wasser) zu simulieren.

Die Schwierigkeit besteht also darin, zusätzlich zur Dimmung bei der die einzelnen Farbkomponenten nach und nach dazugenommen werden, auch noch alle Kanäle proportional zur Dimmung mit Helligkeitsschwankungen zu versorgen.

Außerdem muß ich mir noch überlegen wie ich die 3 Bedientasten (R,G,B) für diesen Betriebsmodus am besten belege. Eventuell wie beim Beleuchtungsmodus (R=heller, G=dunkler, B=Wasser/Feuer-Umschaltung) oder ähnlich dem RGB-Modus bei dem bei losgelassenen Tasten alles wieder runterdimmt (R=Feuer, G=heller, B=Wasser).

Außerdem muß ich mor überlegen wie ich das umsetze wenn ich zwischen Feuer und Wasser wechsel. Ein harter Übergang sollte es nicht sein. Die Modi sollten möglichst sanft in einander übergehen.

Es wird also noch einiges an Gehirnschmalz in diesen Betriebsmodus wandern müssen :p

Was anderes: Ich hab mal mit meiner neuen Fotoknipse mit den Filmoptionen rumgespielt. Mit QVGA-Auflösung kann ich 240 Frames pro Sekunde aufnehmen ;) Dann kann man sich in Zeitlupe mal die phasenverschobene 10-Kanal-PWM ansehen. Die Geschwindigkeit ist für die Kamera aber dann auch Ende der Fahnenstange :rolleyes: Ist aber schon interessant wenn man die 3 weißen LEDs mit 120° Phasenverschiebung rotieren sieht :cool: Bei anfangender Dimmung (dunkel) ist der PWM-Puls allerdings teilweise so kurz das man im Bild halbe erleuchtete Kristalle sehen kann (obere Hälfte hell, untere Hälfte dunkel). Wenn man dann weiter hochdimmt um die Pulse zu verlängern bekommt man dann schon wieder Probleme mit der Helligkeit (nur noch helles Bild).

Gruß
Dino
 
Hallo zusammen,

es geht mal wieder etwas weiter :cool:

Die Startwerte/Config-Werte werden nun aus dem EEPROM gelesen. Schreiben ist zwar noch nicht umgesetzt aber das ist nur ne Frage der Zeit. Und heute hab ich da keine Zeit mehr für (zu spät) :flute:

Gruß
Dino
 
Hallo,

tja ... mal wieder etwas weitergemacht :rolleyes:

Die Startwerte/Config-Werte werden nun aus dem EEPROM gelesen. Schreiben ist zwar noch nicht umgesetzt aber das ist nur ne Frage der Zeit. Und heute hab ich da keine Zeit mehr für (zu spät) :flute:
Das mit dem Schreiben geht ja auch schon seit etwa Anfang September. Damit kann ich den ganzen Stab sichern und auch freigeben. Also sozusagen ein elektronisches "Zündschloß" damit kein anderer mit rumspielen kann :flute:

Gestern und heute hab ich im Bedienteil (das Gehäuse am Kabel) noch eins von Dirk seinen USB-Modulen (PL2303 USB TO TTL MODULE) aus dem Shop verbaut. Die Pfostenleiste habe ich abgelötet und den USB-Stecker auch. Dafür hab ich ne USB-B-Buchse angelötet damit nichts aus dem Gehäuse steht. Jetzt hab ich am Stab also auch eine serielle Debug-Schnittstelle mit 9600Baud 8n1 über USB :cool:

PA201756.JPG

Gruß
Dino
 
Hallo zusammen,

und er entwickelt sich weiter :cool: In so einen Mega32 paßt schon ne Menge rein. Nicht mal 40% sind gefüllt. ;)

Da ich mal etwas genauer wissen wollte was da so unter der Haube im Speicher ab geht hab ich mal mit den Befehlen $DBG, DBG und dem Stack-Analyzer rumexperimentiert. Damit kann man dann sehen wieviel vom HWStack, SWStack und Framespace verbraucht wird. Dabei habe ich auch einen kleinen Haken bei $DBG gefunden den man beachten sollte.

Ich benutze ja in meinem Programm Variablen die an festen Speicherstellen im SRAM angelegt sind. Das habe ich gemacht um nachher ohne Übergabe von Variablenadressen in Assembler schnell Werte abholen und verändern zu können. Ich habe dafür die gesamte Variablendeklaration ganz an den Anfang geschrieben damit nichts dazwischenfunken kann. Bei $DBG werden allerdings auch SRAM-Zellen verwendet die sofort mit diesem Befehl angelegt werden. Man sollte also $DBG hinter der Variablendeklaration im Programm anordnen damit alles zusammenpaßt.

Nun kann ich auf meinem Steuergerät durch INT0 den Debug-Modus auslösen und bekomme dann alle Stackwerte auf der seriellen Schnittstelle (mit USB-Wandler) geliefert. Also Frame und SWStack kann ich noch stark verkleinern ohne Probleme zu bekommen. Da ich aber im Moment noch genug Luft im SRAM habe kann ich mir damit auch noch Zeit lassen :D

Dann hat sich im RGB-Modus auch noch was getan. Ich kann nun zusätzlich einen Flash auslösen. Damit wird innerhalb weniger Schleifendurchläufe auf volle Helligkeit gedimmt. Also nicht sofort auf voll sondern in 30er oder 40er-Schritten alle PWM-Kanäle auf 250 hochgedreht. Das macht schon ne Menge her wenn man den Stab dabei auch noch auf den Boden stampft :cool: Wusch ... alles hell :cool:

In den 8 vorhandenen Betriebsmodi werden also je nach vorhandenem Dimmwert und betätigten Tasten zusätzlich weitere Aktionen ausgelöst. Es muß ja alles schnell und mit einer Hand bedienbar sein.

Beim letzten Einsatz wurde der Stab nach ner Feuerjonglage auch noch als "Abbaulicht" verwendet. Problemloses Arbeiten auf dem Areal möglich :p

Gruß
Dino
 
...
Ich kann nun zusätzlich einen Flash auslösen. Damit wird innerhalb weniger Schleifendurchläufe auf volle Helligkeit gedimmt. Also nicht sofort auf voll sondern in 30er oder 40er-Schritten alle PWM-Kanäle auf 250 hochgedreht. Das macht schon ne Menge her wenn man den Stab dabei auch noch auf den Boden stampft :cool: Wusch ... alles hell :cool:
...
Und dann hinterher etwas langsamer alles wieder runter...
[Gandalf-Mode=on]DU DARFST NICHT VORBEI![/Gandalf-Mode];)
 
Hi,

Und dann hinterher etwas langsamer alles wieder runter...
[Gandalf-Mode=on]DU DARFST NICHT VORBEI![/Gandalf-Mode];)
stimmt ;) Man kann aber dann beim runterdimmen ja noch bestimmen über welche Farbkombinationen das geschehen soll. Also zB von Voll (weiß) über Gelb auf Rot. Oder von Voll über Cyan auf Blau.

Das Teil wird also trotz (oder wegen) wenigen Tasten langsam komplizierter in der Bedienung.

Gruß
Dino
 
Du brauchst eben doch noch ein VoiceRecognition-IC...
und dann -> fleißig Zaubersprüche lernen...
 
Hallo,

nach all der Zeit (3 Jahre) sind die Akkus des neuen Magierstabs platt. :rolleyes: Ob nun von den starken Entladeströmen oder manchmal langen Nutzungspausen kann man sich nun aussuchen. Beim alten Magierstab waren die Akkus bereits vor einem Jahr auch platt (nach etwa 7-8 Jahren). Also war mal nen Akkutausch dran.

Die Ladezustände der Akkus haben sich durch die Reihenschaltung auch ein wenig ungleichmäßig verteilt.

Der große Stab läuft wieder. Der alte wartet noch auf Erneuerung.

Gruß
Dino
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)