PWM Beispeil/Allround-Programm gesucht

Gast #1582391
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
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
Gast
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 ^^
Gast
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
Gast
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
Gast
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
Gast
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 :)
Gast
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: http://www.youtube.com/watch?v=XVzBbxJkVvI

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
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
Gast
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.