Gast
#677710
habe folgenden Code zur Ansteurung meiner 4 Motoren geschrieben:
#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){
//setting PWM-Ports to output is needed
DDRB|=(1<<PB7)|(1<<PB6)|(1<<PB5);
DDRE|=(1<<PE3);
// 8-Bit no-inverting PWM on OC1A,OC1B,OC1C & OC3A
TCCR1A|=0xA9;
TCCR3A|=0x81;
// Timer running on MCU clock/8
TCCR1B|=(1<<CS11);
TCCR3B|=(1<<CS11);
//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){
//turn off interrupts (is needed to write OCR1A usw)
cli();
OCR1AH|=0x00;
OCR1AL|=motorSpeed1;
OCR1BH|=0x00;
OCR1BL|=motorSpeed2;
OCR1CH|=0x00;
OCR1CL|=motorSpeed3;
OCR3AH|=0x00;
OCR3AL|=motorSpeed4;
//turn on interrupts
sei();
}
Zuerst mal vorweg: Das ist das erste Programm das ich mit PWM
geschrieben habe! Ist das eigentlich soweit korrekt, geht das so?
Wenn ich das im AVR studio simuliere klappt die Simulation auch ganz
gut, bis zum Zeitpunkt wo ich OCR1BH setzen will! Sollte ja null sein,
aber es schreibt dann den Wert motorspeed2 dort rein! und weiter unten
schreibt es dann überhaupt nichts mehr! OCR1AL ging noch problemlos! bin
froh um jeden Tipp!