taylor22
17.10.2007, 23:28
Habe folgendes Programm zur Ansteuerung meiner 4 Motoren über PWM
geschrieben! Die Funkton setMotorSpeed() soll wie der Name schon sagt
die Geschwindigkeit der Motoren setzen! Das wird über den OCRnx Wert
gemacht, um so die PWM-Breiten zu verändern! Nur wie schreibe ich diesen
Wert in das 16-Bit Register OCRnx! Das OCRnxH Register ist dabei immer
0, da ich nur einen 8-Bit PWM verwende! So wie's da ist geht's irgendwie
nicht! Wie beschreibe ich diese 16-Bit Register richtig? Verwende einen
ATmega128! Besten Dank!
#include <avr/io.h>
#include <avr/interrupt.h>
//function definition
void setMotorSpeed(unsigned char motorSpeed1, unsigned char motorSpeed2,
unsigned char motorSpeed3, unsigned char motorSpeed4);
int main(void){
sei();
//setting PWM-Ports as output
DDRB|=(1<<PB7)|(1<<PB6)|(1<<PB5);
DDRE|=(1<<PE3);
// PWM,Phase correct,8-Bit mode
TCCR1A|=(1<<WGM10);
TCCR3A|=(1<<WGM30);
// Timer running on MCU clock/8
TCCR1B|=(1<<CS11);
TCCR3B|=(1<<CS31);
//set Motor Speed
setMotorSpeed(200,100,160,220);
while(1);
return 0;
}
void setMotorSpeed(unsigned char motorSpeed1, unsigned char
motorSpeed2,unsigned char motorSpeed3, unsigned char motorSpeed4){
unsigned char sreg;
//store global interrupt flag
sreg=SREG;
//turn off interrupts
cli();
OCR1AH=0;
OCR1AL=motorSpeed1;
OCR1BH=0;
OCR1BL=motorSpeed2;
OCR1CH=0;
OCR1CL=motorSpeed4;
OCR3AH=0;
OCR3AL=motorSpeed4;
SREG=sreg;
}
geschrieben! Die Funkton setMotorSpeed() soll wie der Name schon sagt
die Geschwindigkeit der Motoren setzen! Das wird über den OCRnx Wert
gemacht, um so die PWM-Breiten zu verändern! Nur wie schreibe ich diesen
Wert in das 16-Bit Register OCRnx! Das OCRnxH Register ist dabei immer
0, da ich nur einen 8-Bit PWM verwende! So wie's da ist geht's irgendwie
nicht! Wie beschreibe ich diese 16-Bit Register richtig? Verwende einen
ATmega128! Besten Dank!
#include <avr/io.h>
#include <avr/interrupt.h>
//function definition
void setMotorSpeed(unsigned char motorSpeed1, unsigned char motorSpeed2,
unsigned char motorSpeed3, unsigned char motorSpeed4);
int main(void){
sei();
//setting PWM-Ports as output
DDRB|=(1<<PB7)|(1<<PB6)|(1<<PB5);
DDRE|=(1<<PE3);
// PWM,Phase correct,8-Bit mode
TCCR1A|=(1<<WGM10);
TCCR3A|=(1<<WGM30);
// Timer running on MCU clock/8
TCCR1B|=(1<<CS11);
TCCR3B|=(1<<CS31);
//set Motor Speed
setMotorSpeed(200,100,160,220);
while(1);
return 0;
}
void setMotorSpeed(unsigned char motorSpeed1, unsigned char
motorSpeed2,unsigned char motorSpeed3, unsigned char motorSpeed4){
unsigned char sreg;
//store global interrupt flag
sreg=SREG;
//turn off interrupts
cli();
OCR1AH=0;
OCR1AL=motorSpeed1;
OCR1BH=0;
OCR1BL=motorSpeed2;
OCR1CH=0;
OCR1CL=motorSpeed4;
OCR3AH=0;
OCR3AL=motorSpeed4;
SREG=sreg;
}