Hallo liebe Community... Mitlerweile komme ich gut mit der Programmierung von ATMegas in AVR-GCC zurecht. Doch da ich nun ein neues Projekt anstrebe kommen natürlich auch wieder viele Probleme. Folgende Idee: Ich möchte 3 Motoren für eine Lasershow mit PWM ansteuern. Die Geschwindigkeiten sollen per zufall sein für alle 3 Motoren. Natürlich sollen die Geschwindigkeiten der einzelnen Motoren unterschiedlich sein... Diese sollen natürlich auch in einem Zeitabstand von 5 Sekunden oder so wechseln... Ich hätte mir da gedacht, 3 der 4 PWM ausgänge eines ATMega 16 zu nehmen. Also OC0 OC1A und OC1B Schaltung und so ist kein Problem aber dafür die Software. Ich habe hier im Forum bereits viel über PWM gelesen und möchte jetzt erstmal klein Anfangen indem ich EINE Led an OC0 dimme. Und hier komme ich schon nicht mehr weiter... Könnte mir vielleicht mal jemand einen Code dafür schicken oder einen Link zu Programmbeispielen?? Komme nämlich im moment einfach nicht weiter Grüße Sebastian
Schau mal hier, da wird eine Motorregelung mit ATmega realisiert. Dort kann auch der Source Code heruntergeladen werden. http://www.mikrokopter.com/ucwiki/ Stefan
Hm das ist aber schon mal ganz schön kompliziert für den Anfang. Gibt es denn nich einfachere Codes oder eben Tutorials die besser sind als das PWM Tutorial hier im Forum? Wäre echt toll wenn mir da jemand weiterhelfen könnte :) Grüße Sebastian
>Hm das ist aber schon mal ganz schön kompliziert für den Anfang. Gibt es >denn nich einfachere Codes oder eben Tutorials die besser sind als das >PWM Tutorial hier im Forum? Vielleicht ist die Aufgabe zu kompliziert für den Anfang? Vielleicht solltest du mit einer blinkenden LED anfangen?? Tutorials dienen dazu, dem Einsteiger Hilfe beim Erlernen eines Sachverhaltes zu geben. Zum Verständnis: Programmieren bedeutet nicht, irgendwelche Codeschnipsel zusammenzukopieren!
hab ja geschrieben dass ich erstmal eine LED dimmen möchte :) LEDs Blinken lassen ist kein Problem... genauso wenig wie UART, LCDs ansteuern usw... Nur mit PWM komm ich gar net zurecht... Deswegen such ich nach einem Verständlichen tutorial :) Grüße Sebastian
Software PWM hab ich mittlerweile hinbekommen aber immer noch nicht das mit der Hardware... Keiner hier der weiß wo es ein gutes Tutorial gibt? Grüße Sebastian
Bitte Helft mir ... Ich hab zwar das Programm schon mit Software PWM aber das ist ewig lang und ich würde lieber die Hardware PWMs nutzen :) Aber ich finde einfach keine Tutorials darüber die verständlich sind... Grüße Sebastian
Z.B.: http://www.mikrocontroller.net/articles/AVR-Tutorial:_PWM http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#PWM_.28Pulsweitenmodulation.29 http://www.mikrocontroller.net/articles/AVR_PWM http://www.mikrocontroller.net/articles/LED-Fading ...
Aus dem Tut zusammengestellt ggf. Anpassen
1 | TCCR1A = (1<<WGM11)|(1<<WGM10)|(1<<COM1A1); |
2 | TCCR1B = (1<<CS10); |
3 | OCR1A = 32; |
PS: Der betreffende Port muss natürlich noch als Ausgang konfiguriert werden.
Ich danke euch vielmals, dafür dass ihr euch die mühe gemacht habt :) Hab auch was in nem anderen Forum gefunden dass auch sehr hilfreich ist. Ich denke mithilfe des Datenblattes dürfte es nun kein Problem mehr sein. Danke euch vielmals :) Ich schreib hier nochmal den Code für eine LED dimmen sobald ich das fertig habe. DAnke nochmal Grüße Sebastian
wenn ich das jetzt richtig verstanden habe hat der Code folgende eigenschaften: (ich trenn das ganze ein wenig auf) Korrigiert mich bitte wenn ein Fehler drin ist: TCCR1A (welcher PWM ausgang also OC1A OC1B OC0 oder OC2) (1<<WGM11)|(1<<WGM10) (die Auflösung... Also hier 10 Bit -> obergrenze ist 1023) (1<<COM1A1) (Anschalten des Timers) TCCR1B = (1<<CS10); (quelle des Timers... in dem Fall CPU Takt) OCR1A = 32; (Ausgabe des Wertes 32 an dem Pin also ca. 0,15 V ??) Wenn ich jetzt noch den OC1B aktivieren will muss ich nur noch OCR1A = 32; eingeben da die ja mit dem selben Timer laufen oder?? Hab ich das richtig verstanden? Grüße Sebastian
okay also funktionieren tut der Code schonmal... So als Frage nebenbei: Gibt es in AVR GCC eine funktion für eine Random Zahl (z.B Randomzahl aus 255)?? Grüße Sebastian
k hat sich erledigt -> anderer Beitrag Kann geschlossen werden Grüße Sebastian
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.