mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PWM Beispeil/Allround-Programm gesucht


Autor: adrian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,
ich bin auf der Suche nach einem (am besten in Assembler geschriebenem) 
Beispielprogramm, woran ich mich endlich mal in PWM einfinden kann. Mit 
kleinen erklärungen etc. Ich habe das AVR Tutorial durchgemacht, aber 
ich tue mich an PWM sehr schwer. Die Sache an sich verstehe ich, nur ich 
weiß nicht wie ich es eintippen muss :(
Ein kleines Programm, welches nur eine LED durchfadet, oder sowas in der 
Art, wäre total nett.
Tut mir leid wenn ich in der Beziehung so begriffsstutzig bin :)

An µCs habe ich hier Attiny13/85/2313 und Atmega8 rumliegen. Ist also 
recht Wurst wofür das Prog ist =)

Danke im Vorraus
mfg Adrian

Autor: Volker Schulz (volkerschulz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
adrian schrieb:
> [...] Ich habe das AVR Tutorial durchgemacht, aber
> ich tue mich an PWM sehr schwer. Die Sache an sich verstehe ich, nur ich
> weiß nicht wie ich es eintippen muss :(
> Ein kleines Programm, welches nur eine LED durchfadet, oder sowas in der
> Art, wäre total nett.

Aber genau das steht doch im AVR-Tutorial inkl. ASM-Code....

•PWM: Ein Timer dimmt eine LED
http://www.mikrocontroller.net/articles/AVR-Tutorial:_PWM

Woran fehlt's denn?

Volker

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

> Ich habe das AVR Tutorial durchgemacht,...

Und auch das Datenblatt gelesen?

MfG Spess

Autor: adrian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja die beiden Programmierungen habe ich schon draufgespielt gehabt.
Wie beschrieben sieht man da ja nur wie 6 Dimmstufen aussehen und bei 
dem anderen ist die LED relativ lagnweilig nur am Blinken.
Suche ne Mischung aus beidem xD

Ja das Datenblatt habe ich bereits gelesen. Aber nicht das ganze ^^

Autor: Volker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
adrian schrieb:
> Wie beschrieben sieht man da ja nur wie 6 Dimmstufen aussehen und bei
> dem anderen ist die LED relativ lagnweilig nur am Blinken.

Und drunter steht:

Nachdem die Funktion und das Zusammenspiel der einzelnen Register jetzt 
klar ist, ist es Zeit aus dem Blinken ein echtes Dimmen zu machen. Dazu 
genügt es den Vorteiler des Timers auf 1 zu setzen:

[CODE-Schnipsel]

Werden wieder die beiden OCR1A Werte 0x6DFF und 0x10FF ausprobiert, so 
ist deutlich zu sehen, dass die LED scheinbar unterschiedlich hell 
leuchtet.

Volker

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Du willst wahrscheinlich, das die Led z.B. langsam heller wird?

MfG Spess

Autor: Volker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
spess53 schrieb:
> Hi
>
> Du willst wahrscheinlich, das die Led z.B. langsam heller wird?
>
> MfG Spess

Nein, er will ein "Allround-Programm", steht doch im Betreff! ;)

Volker

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Nein, er will ein "Allround-Programm", steht doch im Betreff! ;)

Von Dunkel bis ganz hell ist doch 'Allround'. Mehr geht nicht.

MfG Spess

Autor: adrian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau spess53 :)

Mit Allround, meinte ich doch nur, das ich den Code auch für andere 
Dimmprogrammierungen nutzen könnte ;)

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Mit Allround, meinte ich doch nur, das ich den Code auch für andere
>Dimmprogrammierungen nutzen könnte ;)

Das ist nicht so einfach. Es gibt 8- und 16-Bit-Timer und es gibt 
verschiedene PWM-Modi. Aber wenn du das Prinzip einmal richtig 
verstanden hast, brauchst du auch kein 'Allround Programm' mehr. Denn 
das reduziert sich eigentlich auf die Initialisierung des Timers. Das 
Dimmen erreichst du durch die Veränderung des OCR-Werts.

MfG Spess

Autor: Wolfgang Schmidt (wsm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@adrian

hast du PWM verstanden oder suchst du auch noch Erklärungen für PWM ?

Autor: adrian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So hoffe ich es auch, spess53 :)
Nur ich brauche iwie wohl einen kleinen Anstupser damit ich einmal 
reinkomme.
Wie gesagt, das Tutorial habe ich auch schon durchgelesen und was 
möglich war simuliert und auf den µC geladen. Nur diese riesigen 
Zusammenspiel aus Stackpointer, Timer und hastenichgesehn ist mir iwie 
zu viel für den Anfang.

Ich habe das Prinzip verstanden. Durch kleine 1 Signale in einer 
Frequenz wird die LED dunkler. Das macht man mit Timern und durch die 
Vorteiler kann man dies einstellen.
Nur mein wirkliches Problem ist es, es passend im Code zu formatieren.

    ldi      temp1, 1<<COM1A1 | 1<<WGM11
    out      TCCR1A, temp1

    ldi      temp1, 1<<WGM13 | 1<<WGM12 | 1<<CS12
    out      TCCR1B, temp1

Ist so ein Codeschnipsel sozusagen eine "Mustereinstellung" bei der ich 
nur die für mein Programm spezifischen Einstellungen ändern muss?

Danke für eure Hilfe :)

Autor: adrian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kann euch ja mal ein Projekt zeigen welches ich auf µC umbauen 
möchte.
Es geht um ein LED Herz was ich für meine Freundin gebaut habe.
Die "Intelligenz" dabei ist bisher noch ein Dekadenzähler und ein NE555 
als Takt (per Poti einzustellen).
Hier der Link: Youtube-Video "LED Herz"

Wie ihr seht sind die Übergänge etwas ruppig. Daher möchte ich die LEDs 
faden.

Mir würds aber für den Anfang genügen wenn ich EINE LED zum faden 
bringen würde :D

Autor: Wolfgang Schmidt (wsm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein einfaches BASCOM-Programm habe ich beigelegt.

===  Code  =================================================

$regfile = "m8def.dat"
$crystal = 10001666                               'Mini-Atmega 4-Platine
$hwstack = 32                                     'default use 32 for 
the hardware stack
$swstack = 10                                     'default use 10 for 
the SW stack
$framesize = 40                                   'default use 40 for 
the frame space


Dim A As Integer , Da As Integer , I As Word , Full As Word , Full2 As 
Word

A = 100                                           'muss nur >10 sein
Da = 1                          'Additionswert für die Fade-Schritte
Full = 500                      'Maximalzahl der PWM-Schritte oder 
-Stufen
Full2 = Full / 2                                  'entspricht 50%

Config PortB= Output

Do

A = A + Da                           'PWM-Wert erhöhen

Portb.1 = 1                          'LED einschalten

For I = 1 To Full                     'PWM-Laufschleife für ein on/off

If I = A Then Portb.1 = 0             'LED bei I=A ausschalten

Next I                                'und Restzeit ausgeschaltet lassen

If A = Full2 Or A = 10 Then Da = -da  'Fade-Richtung umdrehen

Loop

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Ist so ein Codeschnipsel sozusagen eine "Mustereinstellung" bei der ich
nur die für mein Programm spezifischen Einstellungen ändern muss?

Jein. Das trifft für 16-Bit-Timer zu, ist aber nicht ganz vollständig. 
Da hilft dir das Datenblatt. Du solltest dir über die Funktion der COM-, 
WGM- und CS-Bits im klaren sein. Versuche einfach mal, die 
Einstellungen, die hiermit gemacht werden:

>    ldi      temp1, 1<<COM1A1 | 1<<WGM11
>    out      TCCR1A, temp1

>    ldi      temp1, 1<<WGM13 | 1<<WGM12 | 1<<CS12
>    out      TCCR1B, temp1

an Hand des Datenblattes vom ATMega8 nachzuvollziehen. Wenn du es heraus 
hast, melde dich wieder.

MfG Spess

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.