www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR mega16 PWM + LM3405


Autor: Axel K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Volker Schulz (volkerschulz)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Volker Schulz (volkerschulz)
Datum:

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

Autor: Axel K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Volker Schulz (volkerschulz)
Datum:

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

Autor: Volker Schulz (volkerschulz)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Volker Schulz (volkerschulz)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Axel K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Volker Schulz (volkerschulz)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Axel K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?.

Autor: Volker Schulz (volkerschulz)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Volker Schulz (volkerschulz)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Axel K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.