Hey Leute ... ich hab einen Code für eine PWM geschrieben, der eigentlich auch gut lief, aber dann hab ich zwischendurch ein wenig rumgespielt damit und auf einmal läuft es nichtmehr. Sieht einer von euch woran es liegen könnte? Es soll eigentlich nur eine LED heller und dunkler werden. #include <avr/io.h> #include <util/delay.h> void main (void) { DDRD=0xff; DDRB = 0x02; TCCR1A = 0xC1; //8-Bit PWM TCCR1B = 0x01; //Teiler mit CPU Frequenz int i=50; int k=2; while (k!=1) { while (i!=250) { i=i+1; _delay_ms(5); OCR1A=i; } i=250; while (i!=1) { i=i-1; _delay_ms(5); OCR1A=i; } } }
> PWM Bitte dringend Hilfe
Und warum jetzt so dringend? Helfen wird dir das Wort hier sicher
nicht...
Verstehst du denn den Code, den du geschrieben hast?
Und gewöhn dir Einrückung an, das hilft nicht nur zuletzt dir.
Dringend, weil ich an einem Hochzeitsgeschenk bastel, wofür ich das brauche und das sollte bis Donnerstag laufen. Ich hab mir das aus verschiedenen Foren zusammengesucht. Also so wirklich was da gemacht wird weiß ich nicht. Wäre aber super wenn mir jemand helfen könnte. Danke
Dein Code ist zwar scheuslich formatiert und auch sonst eher ungelenk, aber im großen und ganzen sehe ich nichts was da die Funktion verhindern würde. Welcher Prozessor ist das überhaupt? Bist du sicher, dass du die LED an den richtigen Pins hast?
OCR1A=i Was wird da eigentlich zugewiesen, das high-Byte oder das low-Byte? i ist "int" was ja wohl 16bit bedeutet. Vielleicht besser "unsigned short int i" definieren.
Karl heinz Buchegger schrieb: > Dein Code ist zwar scheuslich formatiert und auch sonst eher ungelenk, So sollte das aussehen
1 | #include <avr/io.h> |
2 | #include <util/delay.h> |
3 | |
4 | #define LED_1 PB0
|
5 | #define LED_2 PB1
|
6 | |
7 | int main (void) |
8 | {
|
9 | DDRD = 0xff; |
10 | DDRB = (1<<LED_1) | (1<<LED_2); |
11 | |
12 | TCCR1A = (1<<COM1A1) | (1<<COM1A0) // set on up, clear on down |
13 | | (1<<WGM01); // phase correct PWM, 8 Bit |
14 | TCCR1B = (1<<CS10); // Prescaler: 1 |
15 | |
16 | while( 1 ) |
17 | {
|
18 | for( i = 0; i < 250; ++i ) |
19 | {
|
20 | OCR1A = i; |
21 | _delay_ms(5); |
22 | }
|
23 | |
24 | for( i = 249; i > 0; --i ) |
25 | {
|
26 | OCR1A = i; |
27 | _delay_ms(5); |
28 | }
|
29 | }
|
30 | }
|
Ein ganz großes SORRY, hab den Fehler gefunden. Ich hab aus versehen beim rumbasteln auf der Platine eine Lötstelle mit weggesaugt und schon kam von PB1 nichts mehr ...
Helmut S. schrieb: > OCR1A=i > > Was wird da eigentlich zugewiesen, das high-Byte oder das low-Byte? Low > i ist "int" was ja wohl 16bit bedeutet. > Vielleicht besser "unsigned short int i" definieren. aus Effizienzgründen: ja. Da sein Code aber sowieso _delay_ms benutzt, spielt es keine große Rolle
Nycromatic schrieb: > Ich hab mir das aus > verschiedenen Foren zusammengesucht. Also so wirklich was da gemacht > wird weiß ich nicht. Das ist durchaus bemerkenswert - und da ist ohne jegliche Ironie gemeint. Viele andere sind dazu nicht in der Lage und darüberhinaus auch bei weitem nicht, das dann bei Erstkontakt mit der Materie eigenständig und funktionierend auf eine Platine zu bringen. Ich hoffe, du fühlst dich ermutigt, auf dem Gebiet weiterzumachen. Aber Vorsicht, der eigenen Hochzeit muss sowas nicht unbedingt zuträglich sein =)
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.