RoboPunk
27.10.2007, 21:09
Hallo,
ich habe einen Atmega8535 und will einen Motor über den Ausgang OC0 und PC0/PC1 ansteuern. PWM Mode: Fast PWM, Frequenz: 256.
Als "Versuchsmotor" benutze ich eine LED mit 100Ohm Vorwiderstand über den Schaltkreis L298. Ich bringe sie aber leider nicht zum Leuchten!
Hier mal mein Code:
/* ************************************************** ******
PWM
PWM-Ausgang: OC0/PB4
I/O-Pins: PC0/PC1
************************************************** *** */
#include <avr/io.h>
#include <stdint.h>
// Funktion zur Steuerung der Motoren
// speed[-255-255]=Motorgeschwindigkeit/Vorwärts-/Rückwärtsdrehen
int motor(int speed)
{
if (speed<0)
{
PORTC |= ( 1 << PC0 ); // Linksdrehen
PORTC |= ( 0 << PC1 );
OCR0 = -speed; // Vergleichswert festlegen=Geschwindigkeit einstellen(0-255)
}
if (speed>=0)
{
PORTC |= ( 0 << PC0 ); // Rechtsdrehen
PORTC |= ( 1 << PC1 );
OCR0 = speed;
}
PORTC |= ( 0 << PC0 );
PORTC |= ( 1 << PC1 );
OCR0 = speed;
}
// PWM initialisieren
int pwm_init(void)
{
DDRC = 0x11000000;
DDRB = 0x000010000;
TCCR0 = (0<<WGM01)|(1<<WGM00)|(1<<COM01)|(0<<COM00)|(1<<CS02)|(0<<CS01)|(0<<CS00); // Fast-PWM-Mode, toogle at Top
}
int main(void)
{
pwm_init();
while(1)
{
motor(160);
}
}
Kann es sein dass ich noch einen Fehler im Programm übersehen hab oder liegt es sicher an der Hardware?
Gruß
Bene
ich habe einen Atmega8535 und will einen Motor über den Ausgang OC0 und PC0/PC1 ansteuern. PWM Mode: Fast PWM, Frequenz: 256.
Als "Versuchsmotor" benutze ich eine LED mit 100Ohm Vorwiderstand über den Schaltkreis L298. Ich bringe sie aber leider nicht zum Leuchten!
Hier mal mein Code:
/* ************************************************** ******
PWM
PWM-Ausgang: OC0/PB4
I/O-Pins: PC0/PC1
************************************************** *** */
#include <avr/io.h>
#include <stdint.h>
// Funktion zur Steuerung der Motoren
// speed[-255-255]=Motorgeschwindigkeit/Vorwärts-/Rückwärtsdrehen
int motor(int speed)
{
if (speed<0)
{
PORTC |= ( 1 << PC0 ); // Linksdrehen
PORTC |= ( 0 << PC1 );
OCR0 = -speed; // Vergleichswert festlegen=Geschwindigkeit einstellen(0-255)
}
if (speed>=0)
{
PORTC |= ( 0 << PC0 ); // Rechtsdrehen
PORTC |= ( 1 << PC1 );
OCR0 = speed;
}
PORTC |= ( 0 << PC0 );
PORTC |= ( 1 << PC1 );
OCR0 = speed;
}
// PWM initialisieren
int pwm_init(void)
{
DDRC = 0x11000000;
DDRB = 0x000010000;
TCCR0 = (0<<WGM01)|(1<<WGM00)|(1<<COM01)|(0<<COM00)|(1<<CS02)|(0<<CS01)|(0<<CS00); // Fast-PWM-Mode, toogle at Top
}
int main(void)
{
pwm_init();
while(1)
{
motor(160);
}
}
Kann es sein dass ich noch einen Fehler im Programm übersehen hab oder liegt es sicher an der Hardware?
Gruß
Bene