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
Lesezeichen