• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Lampenansteuerung mit Atmel AVR

Geo Chief

Geocacher
Angeregt durch das geniale Atmel AVR-Licht habe ich Lust auf mehr bekommen.
Könnte sich jemand mit mir für die Entwicklung einer gescheiten Lampensteuerung begeistern?

Mir schwebt folgendes vor:
- Handelsüblicher 55W-Halogenbeamer (umgebaut auf 12V)
- Dimmer mit PWM (PWM idealerweise über Software und up/down-Tasten regelbar oder Poti)
- Akkuüberwachung
- Evtl. integrierte Akkuladeschaltung
- Einsatz von NiMh aus dem Modellbaubereich (schnelladefähig)
- Alternativ Li-Ion wobei diese schwerer zu besorgen, problamtisch zu laden und relativ teuer sind
- Optional, sofern Platz in der Lampe ist, Einbau von einigen LED´s für die Wegausleuchtung

Das kann man zwar alles auch auf konventionelle Weise lösen aber warum einfach wenn es auch kompliziert geht und es sich dann herausstellt, daß es doch total einfach ist wie beim reaktiven Atmel-Licht 8)
 

fulbrich

Geocacher
Geo Chief schrieb:
Angeregt durch das geniale Atmel AVR-Licht habe ich Lust auf mehr bekommen.
- Handelsüblicher 55W-Halogenbeamer (umgebaut auf 12V)
- Dimmer mit PWM (PWM idealerweise über Software und up/down-Tasten regelbar oder Poti)
- Akkuüberwachung

Hmmm sieht nach einer Gefechtsfeldbeleuchtung aus 8) . Wird diese an einem Cache eingebaut :?:
 
OP
Geo Chief

Geo Chief

Geocacher
Nein, damit sollen natürlich die reaktiven Lichter auf 1km Entfernung gefunden werden :)
Das könnte in etwa so ausschauen:

cpl2006.jpg


Im Bild sieht man die letzte Aldi-Lampe die sich hervorragend für solche Umbauten eignet.
Daneben übrigens mein reaktives Licht (Prototyp).
 

fulbrich

Geocacher
Achso, es geht um den Lampenumbau eines Flakscheinwerfers 8) , nun verstehe ich. Interessanter Gedanke so eine Dimmerschaltung :!:
 

Windi

Geoguru
Geo Chief schrieb:
Dimmer mit PWM (PWM idealerweise über Software und up/down-Tasten regelbar oder Poti)
PWM hab ich schon realisiert. Allerdings nur mal als Versuch bei meinem Blinker. Schaut einfach edel aus wenn das Licht nicht kurz blitzt sondern schön soft an und ausgeht.
Statt der LED einen Leistungstransistor dran und schon sollte das auch für die Lampe gehen.

Für das was Du alles vorhast brauchen wir aber einen größeren Chip. Vor allem die Ladeschaltung dütfte ziemlich kompliziert werden da man jede Zelle einzeln laden und überwachen sollte.
 
OP
Geo Chief

Geo Chief

Geocacher
Jo, PWM sollte gut gehen. Ich habe mich da auch schon ein wenig eingelesen. Leider liegen meine letzten Programmierungen schon einige Zeit zurück und ich fange praktisch wieder bei Null an. Und als die Mikroprozessoren verstärkt in die (Selbstbau-) Elektronik Einzug gehalten hatten, habe ich praktisch nichts mehr gemacht in Sachen Elektronik.
Die Ladeschaltung wäre nur nice2have. Überwachung einzelner Zellen würde vermutlich den Rahmen sprengen. Bei 12 V kommen da schon einige Zellen zusammen.
 
OP
Geo Chief

Geo Chief

Geocacher
Windi, kannst Du das Listing von Deiner PWM-Schaltung bitte hier mal posten?
Ich habe mich ziemlich lange nach verwertbaren Programmen/Schaltungen umgesehen aber bin noch nicht fündig geworden.
Mir schwebt vor, daß ich mit einer Taste die Lampe einschalte und mit dieser dann z.B. 5 Stufen (30%, 50%, 70% 90%, 100%) durchschalten kann.
Es gibt ja bei den Chips einen extra PWM-Modus. Sollte man den dann auch nutzen oder könnte man das auch "einfacher" durch eine geschickte Blinkprogrammierung pro Leuchtstufe (entsprechende Puls-/Pausenzeit) regeln?

Der nächste Punkt der mich interessieren würde wäre der AD-Wandler für eine Spannungsmessung. Hat hier zufällig jemand ein Listing in der Schublade? Hier stelle ich mir vor, daß ich über einen Spannungsteiler die Akkuspannung messe, diese dann mit einer Referenzspannung (idealerweise intern vom Chip) vergleiche und dann auf einem Port ein entsprechendes Signal ausgebe (z.B. Dauerleuchten und Blinken einer Kontroll-LED) und bei einer Mindestspannung, die nicht unterschritten werden darf, die Lampe ausschaltet.
 

Windi

Geoguru
Bitteschön hier ist das Listing.

Ich lasse damit eine LED stufenlos "hochfahren" und dann wieder "runterfahren". Ich hab das ganze mit dem waitms-Befehl realisiert.
Man muss nur aufpassen dass man nicht zu viele Stufen nimmt sonst bemerkt man ein deutliches Flackern.
Schöner wäre es mit dem waitus-Befehl gewesen aber der läßt leider keine Variablen als Parameter zu.
Mit dem internen PWM-Timer habe ich mich noch nicht gespielt, ebensowenig mit dem A/D-Wandler und dem Analog-Komperator.

Code:
'============================================================
'
' ************************************
' ***                              ***
' ***    Dimmendes Blinklicht      ***
' ***                              ***
' ************************************
'
' µC: ATtiny13
' +Ub: 3,00 V
'
'
'============================================================

$regfile = "ATtiny13.DAT"
$crystal = 128000                                           'Reale Frequenz des internen 128kHz-Oszillators

Config Portb = &B00011000                                   'Pinb.3 und 4 auf 'Ausgang', Rest auf 'Eingang' schalten
Portb = &B11100111                                          'Pullups zuschalten, außer für Pinb.3 und .4
Stop Adc                                                    'A/D-Wandler abschalten, um Strom zu sparen
Stop Ac                                                     'Analog-Komparator abschalten, um Strom zu sparen

Dim A As Byte
Dim B As Byte
Dim Stufen As Byte

Stufen = 20

Do

For A = 0 To Stufen
B = Stufen - A
Gosub Pwm
Next
For A = Stufen To 0 Step -1
B = Stufen - A
Gosub Pwm
Next
Waitms 1000

Loop

Pwm:
        Portb.3 = 1
        Waitms A
        Portb.3 = 0
        Waitms B
        Return

End
 

DeepImpact

Geocacher
Ich bastele gerade eine Mikrocontroller-gesteuerte Step-Up DC-DC Converter LED Driver Schaltung für ne Maglite... Konstanter Strom an einer 3W Luxeon bis die Batterien komplett leer sind, und hoher Wirkungsgrad wenn sie frisch sind, plus Mikrocontroller-Spielereien:

Beitrag dazu

Vielleicht lässt sich das mit nem anderen Regler auch für nen Flakscheinwerfer machen, Step-Up ist sicher nur bei Primärzellen sinnvoll, aber die Regelung, Dimmbarkeit und guter Wirkungsgrad ist ja auch schon was. Vielleicht mit einem MAX1744 o.ä.?

Step-Up wäre für den "Pocket-Flakscheinwerfer" nett... Ein paar Batterien rein, und die immerhalb von Minuten mit 50 W leerbraten :) Pro Monozelle ergibt das ein paar Minuten Leuchtdauer...
Wie viel Energie kann man einer Alkali-Mangan Monozelle entnehmen?
 

DeepImpact

Geocacher
Hm... also wäre der Energieinhalt ganz grob 1,5V * 20 Ah = 30 Wh. Bei so starkem Entladestrom aber weniger, vielleicht 20 Wh.
Der Step-Up Regler hat einen Wirkungsgrad von sagen wir 50 %. Bleiben 10 Wh für die Lampe. Mit einer 50 W-Halogenlampe bekommen wir dann immernoch eine Brenndauer von gut 10 Minuten, bei mehr Zellen entsprechend mehr. Gar nicht so schlecht!
 

radioscout

Geoking
Kannst Du eine Spannungsüberwachung implementieren? Dann kann man auch Akkus verwenden. Bei in Reihe geschalteten Zellen sollte bei 1 V/Zelle abgeschaltet werden.
 

Winfried

Geocacher
Alkaline Batterien werden recht schnell hochohmig, wenn man sie entlädt. Selbst in neuem Zustand sind sie gegenüber Akkus recht hochohmig.

Wenn man z.B. aus einer Mignonzelle gerade mal 300mA zieht, ist man schon bei halber Entladung der Gesamtkapazität bei 1Volt.

20 A aus einer Monozelle? Ich glaub, das ist wenig praktikabel. Bei Akkus ist das überhaupt kein Problem. Bei solchen Strömen sollte man allerdings auch keine normalen Batteriefächer mit Federkontakten nehmen. Da fällt überall einiges an Spannung ab. Zellen verlöten oder verschweißen und dicke Kabel und ordentliche Stecker für große Ströme. Ist ja alles Standard im Modellbau.
 

DeepImpact

Geocacher
Stimmt, daran hab ich natürlich nicht gedacht. Sind die NiMH-Akkus denn schon so hochstromfähig wie NiCd-Akkus?
Hast Du vielleicht einen Wert für den Innenwiderstand einer Alkaline-Monozelle? Das wäre nämlich auch für mein eigentliches Bastelprojekt wichtig...
 

Winfried

Geocacher
Bei Monozellen Alkaline liegt der Innenwiderstand bei etwa 0.08 Ohm. Siehe: http://www.panasonic.com/industrial/battery/oem/chem/alk/index.html

Bei Entladung nimmt er kontinuierlich zu.

Bei Monozellen NIMH bei nur 2 Milliohm! Allerdings ist das ein Wert bei 1KHz gemessen. Von daher nicht direkt vergleichbar.

Insofern: Bei Hochstromsachen immer Akkus verwenden. NIMH ist da nahezu genauso gut wie NICD.
 

El-man

Geocacher
Hallo Leute,

ich habe es geschafft Hardware PWM auf dem Tiny umzusetzen.
Hier der Code:

Code:
'============================================================
'
' ************************************
' ***                              ***
' *** Hardware PWM 06.07.2006      ***
' ***                              ***
' ************************************
'
' µC: ATtiny13
' Hardware Pwm auf Portb.0
' Fusebit DCBA 1001 (4,8 MHz)
'
'
'
'============================================================
'
$regfile = "ATtiny13.DAT"
$crystal = 4800000
Config Pinb.0 = Output
Tccr0a = &B11110001
Tccr0b = &B00000011
Dim I As Byte
Do

For I = 1 To 255
Ocr0a = I
Waitms 5
Next I
For I = 255 To 1 Step -1
Ocr0a = I
Waitms 5
Next I
Loop

End

Gruß Thomas
 
OP
Geo Chief

Geo Chief

Geocacher
Hallo zusammen!

Leider konnte ich mich in der letzten Zeit mit dem Thema nicht beschäftigen aber jetzt habe ich es endlich mal wieder aufgegriffen. Nach den Tips hier und auf anderen Seiten bin ich fündig geworden und habe hier ein schön funktionierendes PWM zusammengebastelt. Momentan steuert es zwar nur eine LED an aber die Ansteuerung eines BUZ11 ist vermutlich das kleinste Problem.

Hier erstmal das Listing:

Code:
'--------------------------------------------------------------
' PWM-Lampenregelung
' Speichert letzte Helligkeit im FlashROM (Speicherung nur nach Tastenbetätigung um das FlashROM zu schonen)
' Taster an PB3 (heller) und PB4 (dunkler), LED ("ist gespeichert-Signal") an PB2
' Ausgäne an PB0 und PB1
' Hauptquelle PWM: http://www.roboternetz.de/phpBB2/viewtopic.php?p=216633

' Fusebits:
' H : 0
' G : 1
' F : 1
' E : 1
' DCBA: z.B. 0011
'---------------------------------------------------------------

$regfile = "ATtiny13.DAT"
$crystal = 113000
$hwstack = 6

Config Pinb.0 = Output                   '1. PWM-Ausgang für 55W Halogenlampe
Config Pinb.1 = Output                   '2. PWM-Ausgang
Config Pinb.2 = Output                   'Ausgang für "gespeichert Signal"
Config Pinb.3 = Input                    'Taster "heller"
Config Pinb.4 = Input                    'Taster "dunkler"
Portb.3 = 1                              'PullUP ein
Portb.4 = 1                              'PullUP ein

Config Timer0 = Pwm , Pwn = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
'Prescale 1 entspricht ca. 220Hz, Prescale 8 ca 27Hz (vermutlich zu langsam für Lampenregelung) bei 128kHz Oszillatorfrequenz

Enable Timer0
Enable Interrupts

Dim D As Byte                            'D = Drehzahl
Dim Z As Long                            'Zähler für "FlashROM-Schonung"
Dim T As Byte                            'toggle für "FlashROM-Schonung"
Dim E As Eram Byte

Readeeprom D , &H10

If D = 0 Then D = 127                    'Wenn gespeicherte Helligkeit 0% oder 100% beträgt wird 50% eingestellt
If D = 255 Then D = 127

'D = 0                                   'Ausgang = high
'D = 255                                 'Ausgang = low
'D = 127                                 'Ausgang = 50% / 50%

Do

Waitms 10                                'Geschwindigkeit für Hell-/Dunkelregelung

Ocr0a = D                                'PWM Wert setzen
Ocr0b = D

If Pinb.3 = 0 And D > 0 Then             'heller
   Decr D
   T = 1                                 'Wenn Taste, dann auf 1 toggeln,
End If                                   'damit irgendwann gespeichert wird

If Pinb.4 = 0 And D < 255 Then           'dunkler
   Incr D
   T = 1
End If

Incr Z                                   'Zähler erhöhen bei jedem Durchlauf
If Z > 500 Then                          'Nach 500 Durchläufen (ca. 3 Sekunden)...
   Z = 0                                 'wird Zähler auf 0 gesetzt...
   If T = 1 Then                         'und wenn eine Taste gedrückt wurde...
      Writeeeprom D , &H10               'wird die Helligkeitseinstellung im FlashROM gespeichert...
      T = 0                              'und der Tastenindikator auf 0 gesetzt
      Portb.2 = 1                        'Port 2 wird für 100ms auf HIGH gesetzt... (Der Teil wird nicht benötigt)
      Waitms 100
      Portb.2 = 0                        'Port 2 wird wieder auf 0 low gesetzt
      'Waitms 1000
   End If
End If

Loop

End

Das Programm erzeugt ein sauberes PWM-Signal laut Oszilloskop und lässt sich zwischen 0 und 100% stufenlos regeln bei ca. 220Hz Grundfrequenz. Ob das mit der 55W-Halolampe auch gut funktioniert muß noch getestet werden.

Hat jemand Verbesserungsideen zum Programm?

Im nächsten Schritt würde ich gerne noch eine Akku-Überwachung hinzufügen. Hier bin ich aber auch nach längerer Suche nicht fündig geworden, wie ich das programmiertechnisch lösen kann. Spontan fällt mir folgendes ein:

Abfrage der Betriebsspannung über Spannungsteiler an Port 2 und Vergleich mit der internen Referenzspannung. Wenn die Betriebsspannung über dem Spannungsteiler unter einen bestimmten Wert fällt, soll, Port 2 auf "Output" schalten und über eine LED dies signalisieren. Alternativ könnte auch die 55W-Lampe z.B. ein paarmal kurz aufblinken um die Portumschaltung zu sparen.

Ist es möglich, den nicht benötigten 2. PWM-Ausgang des Tiny13 abzuschalten und als In- bzw. Outputport zu nutzen? Wenn ja wie? Hier bin ich leider auch nicht fündig geworden.
 

still-hide

Geomaster
Hmm...tolle Idee mit dem PWM, aber wie schaut denn der Schaltplan dazu aus? Glaube nicht das meine Schaltung (aus dem Kochbuch im reaktiven Licht mit Attiny13 - Forum) dazu passend ist...

Heiko
 

Starglider

Geoguru
Geo Chief schrieb:
Ist es möglich, den nicht benötigten 2. PWM-Ausgang des Tiny13 abzuschalten und als In- bzw. Outputport zu nutzen? Wenn ja wie? Hier bin ich leider auch nicht fündig geworden.
Wenn die Compare Match Output B Mode Bits COM0B1 und COM0B0 im Timer/Counter Control Register A nicht gesetzt sind (was der Voreinstellung entspricht) sollte der Pin als normaler Port geschaltet sein.

Datenblatt Seite 68/69.
 
Oben