www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hardware-PWM mit Bascom


Autor: Dominique Görsch (dgoersch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich stehe zum ersten mal vor der Aufgabe (nein keine Hausaufgabe, aus 
dem Alter bin ich leider schon etwas raus g) PWM verwenden zu müssen 
bzw. wollen.

Mein Sohn hat in seinem Kinderzimmer eine Wolke aus Blau lackiertem Holz 
in der rund 100 Löcher sind (hab grad nicht nachgezählt aber hab sowas 
in erinnerung). Dort Steckten bis vor kurzem Lämpchen einer Lichterkette 
drin, quasi als Sterne. Nachdem die Lichterkette schon eine Weile kaputt 
ist und wir beim letzten Umzug auch die Lämpchen aus den Löchern 
entfernt haben, kam mir die Idee dort LEDs einzusetzen und diese auch 
ein wenig hin und her zu dimmen. Da die Lampe beim Einschlafen meistens 
an ist (war) sollte das ganze natürlich nicht zu unruhig flackern oder 
blinken.

Bei meinen Überlegungen bin ich auf den ATtiny2313 gestossen der 4 
Hardware PWM-Kanäle bietet, d.h. ich würde damit 4 Gruppen von etwa 25 
LEDs ansteuern und sanft hin und her faden.

Ich habe zwar mit dem tiny2313 schon ein paar Dinge gemacht, aber habe 
PWM noch nie benutzt. Die Programmiersprache meiner Wahl ist Bascom 
(bitte keine Diskussionen pro/contra Basic, C, ASM, whatever, ...) und 
weder die Forensuche, ncoh Google oder die ansonsten sehr gute Bascom 
Onlinehilfe war hier hilfreich, ich konnte schlicht nichts finden. Hat 
jemand vielleicht einen Tipp, einen Link oder ein Codesnippet zum Thema 
Hardware-PWM mit Bascom auf einem ATtiny2313?

Danke und Gruß
Dominique Görsch

PS: Wie würdet ihr die Versorgungsspannung dimensionieren und wie würdet 
ihr aus den PWM-Ausgängen die LEDs treiben? Ist ja doch schon eine nette 
Anzahl...

Autor: Gast2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sei froh, dass er jetzt ohne diesen Unfug einschlaeft.

Gast2

Autor: Dominique Görsch (dgoersch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nunja, er hat jetzt andere Lichtquellen als Alternative. Finde es aber 
auch nicht schlimm, wenn Kinder lieber bei etwas Licht einschlafen. 
Kenne das ganze noch von meiner Schwester: bei ihr musste immer eine 
kleine Lampe im Flur stehen und die Türe einen Spalt offen bleiben. Mein 
Sohnemann (5) hat lieber die Türe zu, mag dafür aber eben ein bisschen 
Licht in seinem Zimmer haben (aktuell von einer Benjamin 
Blümchen-Kinderlampe und einer Lichterkette an der Wand).

Aber es geht doch nicht nur um das Einschlaflicht, sondern auch um den 
Deko-Effekt dieser Wolke, die sein Großvater für ihn mal gemacht hat.

Gruß
Dominique Görsch

Autor: Carsten Pietsch (papa_of_t)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dim z1 as byte
dim z2 as byte
dim z3 as byte
dim z4 as byte

do

  incr z1
  if z1 > 100 then
    z1=0
    toggle port_von_led1
  endif

  incr z2
  if z2 > 50 then
    z2=0
    toggle port_von_led2
  endif

  'usw. für 3 und 4

  'hier evtl. bremsen, für langsamere PWM

loop

die 50  100  ... durch Variablen ersetzen und zur Laufzeit verändern. 
Braucht nichtmal Hardware-PWM.

Stromstarker Transistor mit guter Kühlung sollte ausreichen. 
Versorgungsspannung ist unkritisch (altes Steckernetzteil?) sollte zum 
Transistor und zum Vorwiderstand passen.

Autor: Dominique Görsch (dgoersch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Schleifen hintereinander halte ich für ungünstig, dann gibts den 
Zustand ganz dunkel, das ist dann nicht "smooth" genug und könnte 
störendes "blinken" an den Wänden und so ergeben.

OK, dann mache ich das ganze in Soft-PWM... hab grad mal die Löcher 
gezählt, sind "nur" 78. Gehen wir also mal von 80 LEDs aus. Ich wollte 
nun natürlich nicht 80 LEDs mit jeweils einem Vorwiderstand versehen, 
brauch ich den Überhaupt, wenn ich beim PWM nie voll aufdrehe?

Als LEDs wollte ich zu den ganz einfachen 5mm Low Cost gelb greifen. Die 
sind mit 2,1V Vorwärtsspannung angegeben. bei 12V Versorgungsspannung 
könnte ich ja 5 LEDs mit 75Ohm in Reihe schalten. Macht dann noch 16 
Vorwiderstände. Oder wie löst man sowas besser?

Als Transistor dann 4x (pro PWM-Kanal einen) einen Typ der den Strom der 
20 LEDs (400mA) aushält?

Gruß
Dominique Görsch

//Nachtrag: Wenn ich ohnehin zu Soft-PWM greife, könnte ich ja auch 
mehrere Kanäle realisieren und die I/Os des 2313 weiter ausnutzen...

Autor: Dominique Görsch (dgoersch)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hab nun mal angehängten Plan fabriziert. Ein Bekannter meinte, der BC547 
könnte ausreichen, da ja der Strom nicht konstant fließt, ist der denn 
dennoch zu kühlen? Brauch ich Basiswiderstände? Brauche ich noch Cs um 
den Spannungsregler?
Der Kram rechts mit dem T und den LEDs ist dann im Endeffekt 5mal da, an 
PC0-4, somit komme ich auf meine 80 LEDs.

Kommentare zum Schaltplan erwünscht.

Gruß
Dominique Görsch

PS: ISP hab ich mir im Plan geschenkt, auf die Platine wird er 
allerdings kommen denke ich.

Autor: Dominique Görsch (dgoersch)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier mal das Gebilde um das es überhaupt geht anbei. Bei den 
Widerständen hab ich mich übriegens vertan, das müssten wohl 180 Ohm, 
nicht 220.

Autor: Dieter Engelhardt (netdieter) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dominique Görsch wrote:
> Die Schleifen hintereinander halte ich für ungünstig, dann gibts den
> Zustand ganz dunkel, das ist dann nicht "smooth" genug und könnte
> störendes "blinken" an den Wänden und so ergeben.
>
> OK, dann mache ich das ganze in Soft-PWM... hab grad mal die Löcher

Schau Dir doch mal das Datenblatt des ATtiny2313 an. Dort sollest Du 
finden, was Du brauchst und die PWM-Timer zu bestücken.
Das sieht in VB auch nicht viel anders aus, als in C.

Autor: Dominique Görsch (dgoersch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dieter Engelhardt wrote:
> Schau Dir doch mal das Datenblatt des ATtiny2313 an. Dort sollest Du
> finden, was Du brauchst und die PWM-Timer zu bestücken.
> Das sieht in VB auch nicht viel anders aus, als in C.

VB geht auch auf dem AVR? ;)
Hab mich nun für Soft-PWM entschieden, da ich da nicht an die Anzahl der 
Hardware-PWM-Kanäle des µC beschränkt bin. Trotzdem danke für den Tipp.

Autor: dani (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke es geht hier um eine PWM = Puls Weiten Modulation!?

Mit dem Programm:

do
incr z1
  if z1 > 100 then
    z1=0
    toggle port_von_led1
  endif
loop

... blinkt doch die LED nur, quasi eine PWM mit einem Tastverhältnis 
50:50.
Eine Änderung der "100" ändert nur die Blinkfrequenz.

Oder habe ich jetzt einen Denkfehler?

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sieht nach Pulsfrequenzmodulation aus. Das geht für
diesen Zweck auch.

MfG Paul

Autor: Dominique Görsch (dgoersch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau dir einfach mal an, wie ich es in meinem Projekt schlussendlich 
gelöst habe: Beitrag "Re: Ansteuerung von 80 LEDs mit PWM"

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.