PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM an OC2 geht nicht



js3269
19.06.2006, 23:51
Hallo,
ich betreibe an OC0 und OC2 (verstärkt durch einen ULN2803A) zwei
Gleichstrommotoren (max. 300mA) pulsweitenmoduliert.
Die Aufgabe ist auf Schalterdruck (hängt an PB0) die Motoren
anzuhalten, mit den Ausgängen PC1 und PC2 zwei (Doppel-)Relais
umzuschalten (ändert Drehrichtung der Motoren) und dann ein PWM -
Signal auf die Motoren zu geben.
Für OC0 funktioniert alles wunderbar, initialisiere ich jedoch OC2 als
pulsweitenmoduliert geht gar nichts mehr. Nach Schalterdruck pfeiffen
die Motoren, auch der an OC0 geht nicht mehr.
Beide Relais sind absolut gleich geschaltet.
Ich bin für jede Idee dankbar, Jörg

Quellcode
#include <avr/io.h>
#include <util/delay.h>
//#include "motor.h"
//#include "befehle.h"

int main (void)
{
DDRB &= ~(1<<PB0); /*Taster an PB0 initialisieren*/
PORTB |= (1<<PB0); /*Taster on active low vorbereiten*/
DDRC |= (1<<PC1); DDRC |= (1<<PC2); DDRC |= (1<<PC0);
PORTC &= ~(1<<PC2); PORTC &= ~(1<<PC1); PORTC &= ~(1<<PC0);
/*Schaltausgänge PC1 und PC2 sowie KontrollLED
initialisieren*/
TCCR0 = _BV(WGM00) | _BV(WGM01) | _BV(COM01) | _BV(CS00);
TCCR2 = _BV(WGM20) | _BV(WGM21) | _BV(COM21) | _BV(CS20);
OCR0=0; OCR2=0; /*PWM initialisieren*/
while(1)
{ if (bit_is_clear(PINB,PB0))
{ OCR0=0; OCR2=0; /*Motoren aus*/
for (int i=0;i<40;i=i+1)
{_delay_loop_2(25294);}
PORTC |= (1<<PC1); PORTC |= (1<<PC2); PORTC |= (1<<PC0);
/*Relais umschalten für Rückwärtsfahrt, LED an*/
for (int i=0;i<40;i=i+1)
{_delay_loop_2(25294);}
OCR0=150; OCR2=150; /*Motoren einschalten, Rückwärtsfahrt*/
for (int i=0;i<40;i=i+1)
{_delay_loop_2(25294);}
OCR0=0; OCR2=0; /*Motoren aus*/
for (int i=0;i<40;i=i+1)
{_delay_loop_2(25294);}
PORTC &= ~(1<<PC1); PORTC &= ~(1<<PC2); PORTC &= ~(1<<PC0);
/*Relais umschalten für Vorwärtsfahrt, LED an*/
for (int i=0;i<40;i=i+1)
{_delay_loop_2(25294);}
OCR0=150; OCR2=150; /*Motoren an*/
}
else
{
OCR0=150; OCR2=150;
for (int i=0;i<2;i=i+1)
{_delay_loop_2(25294);}

};
}
return 0;
}