Danke Linux_80,
Für die noch so späte Hilfe.
Jetz funktioniert es.
Hier den code:
Code:/* ========================================================================== */ /* */ /* PWM_Robot_8_Board_Atmega8_1.c */ /* (c) 2008 Enterprise */ /* */ /* Mit Taster PD3 drehen die beide Motoren links herum. */ /* */ /* Mit Taster PD3 drehen die beide Motoren rechts herum. */ /* */ /* ========================================================================== */ #include <avr/io.h> #include <stdint.h> void main() { //Prescaler 256 TCCR1B |= (1<<CS12); // Timer in den Fast PWM Mode, 8 Bit schalten TCCR1A |= (1<<WGM10); TCCR1B |= (1<<WGM12); // Compare Output mode einstellen: Pin geht auf high bei Compare match, auf low bei Überlauf. Ergibt nichtinvertierte PWM. TCCR1A |= (1<<COM1A1) | (1<<COM1B1) ; // Port PB1 "0C1A" und PB2 "0C1B" als Ausgang geschaltet. DDRB |= (1<<PB1) | (1<< PB2); // PWM-Wert abgelegt. Erlaubter Bereich: 0 bis 255. OCR1A = 0; // M1 Geschwindigkeit OCR1B = 0; // M2 Geschwindigkeit // PWM-Signal liegt an den Pins an! DDRD |= (1<<PD4) | (1<< PD6); // M2 und M1 Drehrichtung links DDRD |= (1<<PD7) | (1<< PD5); // M2 und M1 Drehrichtung rechts // Port PD2 und PD3 Taster PORTD = (1<<PD2) | (1<< PD3); while(1){ if ( PIND & (1<<PIND2) ) { PORTD |= ((1<<PD4) | (1<<PD7)); OCR1A = 255; OCR1B = 255; } else { PORTD &= ~((1<<PD4) | (1<<PD7)); OCR1A = 0; OCR1B = 0; } if ( PIND & (1<<PIND3) ) { PORTD |= ((1<<PD6) | (1<<PD5)); OCR1A = 255; OCR1B = 255; } else { PORTD &= ~((1<<PD6) | (1<<PD5)); OCR1A = 0; OCR1B = 0; } } }
mfg
Enterprise







Zitieren

Lesezeichen