Hallo Ich hab schon alles ab gegoogelt und mit den beiträgen hier komm ich teilweiße nicht klar. Ich noch totaler anfänger. Hab hier einen M16 mit 8 mhz und drei leds an Portb.0 - b.2 hab schon etliches versucht mit timern usw. aber bekomme nichts hin. ich will so einen schönen farbübergang bekommen nur ich weiß nicht ganz wie man das anstellt eins hab ich schon geschafft das die leds blinken und nach einander aus und an gehen hab hier auch ein paar bücher nur mit denen hab erst den anfang geschafft und jetzt das mit den leds da komm ich einfach nicht weiter hoffe ihr könnt mir das erklären das ich des dann auch versteh danke schon mal
Ist zwar für ATMEL vieleich kannst du was damit anfangen. Sieht viel Code aus, liegt aber darann, weil ich noch versucht hatte die Seriele Schnitstelle zu simuliren, zweks Einstellung der Farwerte
Was ist ein "M16"?? Was ist ein "Atmel"?? Ansonsten: http://www.mikrocontroller.net/forum/forum.php?query=%2Bpwm+%2Brgb&forums%5B%5D=4&forums%5B%5D=1&number=100&action=sendsearch ...
Falls du mit M16 einen Atmel ATmega16 meinst, müsste dir das o.g. PWM-Tutorial helfen. Für RGB brauchst du jedoch 3 PWM-Kanäle, müsstest also Timer 1 und Timer 2 für PWM nutzen bzw einen Software-PWM aufbauen.
O.K. ...HanneS... Du has ja recht. Ich war wieder schlampig. Aber wenn man die Anlage öffnet, dann kann man an der inc - Datai erkennen, was ich meine. War halt müde. Sorry ;-)
@Christof: Das war eigentlich als Scherz (mit ernstem Hintergrund) gedacht. Denn den Mega16 sollte man nicht M16 nennen, da es einen 16-Bit-Mikrocontroller mit diesem Namen gibt. Und da ich einmal dabei war, ist mir eingefallen, dass ATMEL nicht nur AVRs herstellt, sondern auch 8051er, ARMs und etliches mehr. Nimms also bitte nicht persönlich... Bit- & Bytebruch... ...HanneS...
Also als M16 meinte ich den Atmega 16 Ja nach den ganzen links hab ich aber immer noch nicht ganz verstanden wie man so ein Software PWM aufbaut. Also entweder stell ich mich zu blöd an oder ich brings irgend wie nicht hin
Ist ganz simpel. Was macht den eine PWM? Eine PWM ist zunaechst mal ein periodisches Signal. D.h. alle x Zeiteinheiten beginnt ein neuer Zyklus und das Signal geht auf High. Nach einer bestimmten Zeitdauer, die kleiner als die Periodendauer ist, nennen wir sie mal y, geht das Signal wieder auf low. Und das wars dann auch schon. Indem du y variierst, kannst du bestimmen, wieviele % der Zeit von x das Signal auf high ist und wieviele % es auf low ist. <---y-----> +---------+ +---------+ | | | | | | | | -----+ +---------+ +------- <---------- x ------> Du realisierst dir das zb. mit einem Timer. Den stellst du zb. so ein, dass die Zeitdauer x mit, sagen wir mal 1000 Timer Overflows erreicht wird. d.h. du hast innerhalb des Timer Overflows einen Zaehler mitlaufen, der bei jedem Overflow um 1 erhoeht wird. Ist er bei 1000 angelangt (der 1000.-te Overflow ist gerade duerchgekommen), dann setzt du den Zaehler wieder auf 0. Damit hast du den Basistakt, der die Zeitdauer x mittels 1000 Timer Overflows festlegt. Jedes mal wenn der Zaehler auf 0 zurückgesetzt wird, schaltest du den Ausgang auf High. Und wenn der Zaehler einen bestimmten Wert, eben y, erreicht hat, schaltest du den Ausgang wieder auf Low. Durch Variation von y kannst du jetzt in diesem Zeittakt den Ausgang nur ganz kurz einschalten oder auch länger.
Das Beispiel im Anhang ist zwar (aus heutiger Sicht) auch nicht das Nonplusultra, aber es könnte dir beim Verständnis der Software-PWM helfen. ...
Hätt ich gewusst, dass Karl-Heinz antwortet, hätt ich mir meinen Beitrag sparen können... ;-) (Und hätte ich Enten gekauft, dann wären die Hühner nicht ersoffen...) > kannst du bestimmen, wieviele % der Zeit... Hmmm... Prozente (auf Basis 100) sind was für Menschen. Auf dem AVR verwende ich gerne "binäre Prozente", also auf Basis 256 oder 128... Duck & weg... ...Bit- & Bytebruch... ...HanneS... Achja, einige weitere Beispiele mit Software-PWM findest du auf www.hanneslux.de/avr/ unter Modellbau in den verschiedenen Fahrtregler-Projekten.
Damit ich auch mal was beitrage: Hier meine SW-PWM fuer 8 Kanäle am B-Port (Wird im Endausbau ein geiles Ding: an praktisch jedem Portpin haengt eine PWM ueber die ich weisse LEDS in der Helligkeit steuere. Meine Frau wünscht sich einen Sternenhimmel, also kriegt sie ihn auch. Einfach nur LEDS ist aber fad. Die muessen schon unabhängig voneinander flackern koennen :-) #include <avr/io.h> #include <avr\signal.h> #include <avr\interrupt.h> volatile unsigned char PWM[8]; volatile unsigned char PWM_Cnt; SIGNAL( SIG_OVERFLOW0 ) { unsigned char i; unsigned char NewPortState = 0; PWM_Cnt++; for( i = 0; i < 8; ++i ) { if( PWM_Cnt < PWM[i] ) { NewPortState |= ( 1 << i ); } } PORTB = NewPortState; } int main() { PWM_Cnt = 0; PWM[0] = 99; PWM[1] = 89; PWM[2] = 79; PWM[3] = 04; PWM[4] = 03; PWM[5] = 02; PWM[6] = 01; PWM[7] = 00; DDRB = 0xFF; PORTB = 0x00; TCCR0 = ( 1 << CS00 ); TIMSK = ( 1 << TOIE0 ); sei(); while( 1 ) { ; } }
Oops, da hab ich etwas zuviel rausgelöscht. Die Overflow Funktion muss natürlich so aussehen: SIGNAL( SIG_OVERFLOW0 ) { unsigned char i; unsigned char NewPortState = 0; PWM_Cnt++; for( i = 0; i < 8; ++i ) { if( PWM_Cnt < PWM[i] ) { NewPortState |= ( 1 << i ); } } PORTB = NewPortState; if( PWM_Cnt > 99 ) PWM_Cnt = 0; } Der Periodenzähler muß ja uch zurückgesetzt werden. :-)
schön und gut dein code würde ja funktionieren wenn ich wüsste wie ich im avr studio 4 irgend wie will des net hab die meiste zeit oder hauptsächlich nur mit dem bascom also basic angefangen und mit dem assembler hab ich noch gar nix gemacht sorry
- AVR-Studio von ATMEL downloaden, - AVR-Studio installieren, - AVR-Studio aufrufen, - neues Projekt (im eigenen Ordner) anlegen (Simulator, ATMega8535), - den Quelltext in das Editorfenster des Projekts kopieren, - mit F7 speichern und assemblieren, - im Output-Fenster (unten links) die Meldungen überprüfen, - wenn fehlerfrei, dann: - mit Control-F7 Simulator starten, - mit F11 im Einzelschrittmode das Programm simulieren und versuchen zu verstehen. - Im anderen Fenster Datenblatt des ATMega8535 aufrufen und bei Unklarheiten darin nachschlagen. ...
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.