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!
Das mit dem Schreiben der 16-Bit-Register bei den Timern ist ein bekannter Bug im Simulator vom AVRStudio. Es ist oft sinnvoll, sich in der AVRStudio-Hilfe die bekannten Einschränkungen und Fehlfunktionen anzuschauen.
ich bin mir jetzt gar nicht mehr sicher ob ich da wirklich die richtigen PWM Ports ausgewählt habe? welche Ports kann ich für PWM beim ATmega128 verwenden? Im Datenblatt heisst es ja er habe insgesamt sechs! aber momentan sehe ich es folgendermassen: 2PWM (8-bit) und 6PWM(16-bit)????
john wrote: > ich bin mir jetzt gar nicht mehr sicher ob ich da wirklich die richtigen > PWM Ports ausgewählt habe? welche Ports kann ich für PWM beim ATmega128 > verwenden? Wieso schaust Du nicht einfach erstmal bei den Pin Configurations, wo Deine Ausgänge überhaupt liegen. Ich hab jetzt ehrlich gesagt keine Zeit und Lust, Deine TCCRnA-Werte zu überprüfen. Schreib die Sachen demnächst besser auch in der "1<<BIT"-Schreibweise. Dann kann man sofort sehen, was für Bits da gesetzt werden. > Im Datenblatt heisst es ja er habe insgesamt sechs! aber > momentan sehe ich es folgendermassen: 2PWM (8-bit) und 6PWM(16-bit)???? "6 PWM Channels with Programmable Resolution from 2 to 16 Bits" heißt was? Überleg mal, ob das mit 8-Bit-Timern geht... Die 8-Bit-PWM-Kanäle finden da gar keine Erwähnung. OC2 lässt sich übrigens auch nur alternativ zu OC1C verwenden, weil die beiden am selben Portpin hängen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.