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;
}
....
OCR1A=motorSpeed1;
OCR1B=motorSpeed2;
OCR1C=motorSpeed3;
OCR3A=motorSpeed4;
....
Wenn ich das so mit deiner Variante simuliere (in AVR Studio) wird OCR1A
zwar noch korrekt beschrieben, OCR1B aber schon nicht mehr! Der Wert von
OCR1B wird in das H-Register geschrieben! Bei OCR1C und OCR3A wird dann
gar nichts mehr geschrieben!
Ist im Simulator der richtige Controller eingestellt?
(muss du ja noch mal extra machen)
Außerdem sind die 16Bit-Register im Simulator mit Vorsicht zu genießen,
siehe "Help"->"Simulator"->"Known Issues".
Zu deiner main() im ersten Post: mach das sei() am besten erst als
letztes vor der Endlosschleife, dann können die Interrupts nicht in die
Initialisierung reinspielen.
hth. Jörg