Hej leute. Ich baue gerade für meinen kleinen Jungen ein Elektro Bobby Car. Die Mechanik ist schon fast fertig. Zum Einsatz kommt ein Getriebe Motor und ein Fahrtenregler außem Modellbau mit vorwerts und rückwerts. Mit einem Servotester funktioniert das ganze auch wunderbar. Ich möchte jetzt einen ATmega8 und 2 Taster dazu nutzen um 3 PWM Situationen zu erzeugen. OCR2 = 1 >>Rückwerts >>Taster1 zu OCR2 = 128 >>Motor aus >>Taster1 | 2 offen OCR2 = 255 >>Vorwerts >>Taster2 zu Ich habe auch schon einen Code zusammen gefriemelt aber der Funktioniert noch nicht so toll. Wenn ich am Ausgang einen Servo dran mache funktioniert das ganze halbwegs. Aber nicht optimal wie z.b. mit einem Servotester. Hier ist mein Code. Ich hab nen Atmega8 mit externen 4MHz Quarz. Ich benötige eigendlich am PWM Ausgang ein PWM mit 50Hz. Bekomme es aber nicht so richtig hin.
1 | #define F_CPU 4000000UL
|
2 | #include <avr/io.h> |
3 | |
4 | int main(void) |
5 | {
|
6 | DDRC = (0<<PC0) | (0<<PC1); |
7 | DDRB |= (1 << DDB3); |
8 | // PB3 is now an output
|
9 | |
10 | OCR2 = 90; |
11 | // set PWM for 50% duty cycle
|
12 | |
13 | TCCR2 |= (1 << COM21); |
14 | // set none-inverting mode
|
15 | |
16 | TCCR2 |= (1 << WGM21) | (1 << WGM20); |
17 | // set fast PWM Mode
|
18 | |
19 | TCCR2 |= (1 << CS22) ; //64 |
20 | |
21 | while (1) |
22 | {
|
23 | if (!(PINC & (1<<PINC0))) |
24 | {
|
25 | OCR2 = 2; |
26 | }
|
27 | if (PINC & (1<<PINC0)) |
28 | {
|
29 | OCR2 = 90; |
30 | }
|
31 | if (!(PINC & (1<<PINC1))) |
32 | {
|
33 | OCR2 = 253; |
34 | }
|
35 | if (PINC & (1<<PINC1)) |
36 | {
|
37 | OCR2 = 90; |
38 | }
|
39 | }
|
40 | }
|
Wäre für Tipps sehr dankbar. LG