Forum: Mikrocontroller und Digitale Elektronik AVR mega16 PWM + LM3405


von Axel K. (Gast)


Lesenswert?

Hallo zusammen

Ich beschäftige mich neben bei ein bisschen mit MC's
Auf meiner Bastelliste steht nun eine Gruben Kopflampe.

Diese enthält zwei LEDS(CREE Q5 @ 800mA) + (Cree® XLamp® MC-E4 4-fach 
Emitter @ Iges. = 700mA  (2x2 in Serie)diese dann Parallel)

Jeder der LED's hat einen LM3405 als Treiber.

Gedacht war das ich die Treiber mit einem TINY 13 ( hat ja zwei PWM Ch. 
) ansteuere.

Heute habe ich einen Versuchsaufbau mit einem mega16 gemacht und dabei 
auf einen sehr komisches Problem gestoßen

Zur Hardware. Der mega16 steckt im STK500. Von PortD 4. und 5. gehen
die PWM Signal per "freiluftleitung" zu den LM3405.
PWM frequenz hab ich auf ~280Hz (1MHz,8bit,Pre8)

Das TestProgramm ist ganz einfach.
Funktioniert auch, am anfang.
Nach "zufalls Zeit oder Tasten kombo" wird der Helligskeit's wert B 
nicht mehr übernommen
Hab dem Programm auch ein LCD zur kontrolle hinzugefügt.

Wert B wird größer, aber bei COMPARE1B ignoriert.


Was gibt es für Fehler Möglichkeiten? Kann es sein das die LM3405 sehr 
stark den AVR Stören? kann ich das Minimiren?


Ich hoffe ihr könnt mir Helfen.


Danke für eure Mühen
Axel



$regfile = "m16def.dat"
$crystal = 1000000
$hwstack = 5
$swstack = 5
$framesize = 5

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B 
Pwm = Clear Down , Prescale = 8

Dim D As Byte
Dim B As Byte

Nah1 Alias Pina.0
Config Nah1 = Input
Porta.0 = 1

Nah2 Alias Pina.1
Config Nah1 = Input
Porta.1 = 1

Weg Alias Pina.2
Config Weg = Input
Porta.2 = 1

Nah1 = 0
Nah2 = 0

 Do

    If D < 249 Then
       If Nah1 = 0 Then
       D = D + 50
       Waitms 200
       End If
    End If

    If B < 249 Then
       If Nah2 = 0 Then
       B = B + 50
       Waitms 200
       End If
    End If

    If Weg = 0 Then
    D = 0
    B = 0
    Cls
    End If

    Compare1a = D
    Compare1b = B

  Loop

End

von Volker S. (volkerschulz)


Lesenswert?

Aaaaalso.. Habe nie mit Bascom gearbeitet, versuche Dir aber dennoch zu 
helfen.

1.) Du setzt Nah1 zweimal auf Input, Nah2 gar nicht... Tippfehler in der 
Zeile nach "Nah2 Alias Pina.1"?

2.) Warum PWM-Mode 8? Fuer LED-Dimmen ist eine einfache Fast-PWM voellig 
ausreichend. Wuerde auf irgendwas knapp ueber 1KHz gehen. Dann musst Du 
auch nur noch EINEN Register-Wert setzen um die Helligkeit zu bestimmen.

Volker

von Volker S. (volkerschulz)


Lesenswert?

3.) Bei 1MHz,8bit,Pre8 komme ich auf mehr als 480Hz, nicht 280Hz...?!?

von Axel K. (Gast)


Lesenswert?

Hi

Oh hab den "Nah1" fehler behoben. ändert leider nichts.

Eine geringe PWM Frequenz ist besser, da damit ( lt. Datenblatt LM3405 
die effizenz besser wird bzw. man näher an den eingestellten Strom 
herran kommt.)

Was ist fast PWM, gibts dazu Literatur online?
--> söber mal ein bissel im Netz
oder hat jemand einen guten link.

Gruß Axel

von Volker S. (volkerschulz)


Lesenswert?

4.) Warum initialisierst Du Nah1 und Nah2 mit 0, D und B aber nicht?

von Volker S. (volkerschulz)


Lesenswert?

> Was ist fast PWM, gibts dazu Literatur online?
> --> söber mal ein bissel im Netz
> oder hat jemand einen guten link.

Es gibt sogar ein Datenblatt zum Mikrocontroller... Da steht sowas drin! 
;)

Ansonsten noch das AVR-Tutorial unter PWM.

Volker

von Volker S. (volkerschulz)


Lesenswert?

..und die Fast-PWM ist genau das, was Du zu benutzen versuchst! Du hast 
aber den Mode auf phasen- und frequenzkorrekte PWM gesetzt.

Volker

von Axel K. (Gast)


Lesenswert?

Hi Volker

Danke für deine Hilfe.
Hm habe den Text bis lang nicht gelesen, da in "Assembler?" geschrieben 
und das verstehe ich nicht.

okay jetzt also gelesen.
Wenn ich das richtig verstehe wird bei Fast-PWM nur (bei 8 bit) bis 255 
hoch gezählt. dann der timer auf 0 gesetzt und beginnt wieder.

Bei dem wert X wird der Pin geschaltet.
d.h. es wird nicht mehr runter gezählt. Das würde heißen die Frequenz 
verdoppelt sich.

aber was mir noch nicht ganz klar ist, wie ich jetzt sage welcher Mode
ich benutze

Hat das was mit der schreibweise OCR1A bzw Compare1A zu tuhen... stehe 
da echt auf dem schlauch.

axel

von Volker S. (volkerschulz)


Lesenswert?

Wie gesagt, ich kenne Bascom nicht, gehe aber davon aus, dass "Pwm = 8" 
der Mode ist.

Die Frequenz verdoppelt sind nicht. Der Rest ist korrekt:

1) Bei der 8-Bit PWM startet der Timer bei 0 und setzt den Ausgang HIGH 
oder LOW

2) Wird der Grenzwert erreicht, wird der Ausgang getogglet.

3) Wird 255 erreicht, wird im nachsten Schritt wieder bei 1) angefangen.


Der Single-Slope zaehlt halt immer in eine Richtung.


Volker

von Axel K. (Gast)


Lesenswert?

Hmm ne
"Pwm = 8"

Steht für die Auflösung des Timer's

8 = 255
9 = 512
10  1024

Was meinst du den ist der Grund warum das mit dem "Phase correct Mode" 
nicht geht?.

von Volker S. (volkerschulz)


Lesenswert?

Dann benutzt er bei "Timer1 = Pwm" vermutlich sowieso die Fast-PWM

Dann sehe ich eigentlich softwareseitig nur noch das Problem, dass die 
Register bei jedem loop gesetzt werden. Setz die doch nur, wenn sich die 
Werte tatsaechlich aendern und sag mal ob's was gebracht hat.

Volker

von Volker S. (volkerschulz)


Lesenswert?

Und da Du das Ding ja eh auf dem STK500 hast, benutz doch mal dessen 
LEDs anstatt der Treiber um Probleme mit diesen ausschliessen zu 
koennen.

Volker

von Axel K. (Gast)


Lesenswert?

... und dieser Tipp ja so sowas von logisch, das ich mich jetzt seehr 
blöd fühle.

Da klapp es jetzt auch ohne Probleme.... Viele Gedanken um nichts Gmrl


Hast du zufällig ne Idee wie ich das jetzt händeln kann.
habe jetzt den MC dierekt auf den EN/DIM eingang vom Lm3405 gelegt + 
1kOhm Pulldown


Wie kann ich das den wohl jetzt entstören?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.