Hallo Nachbar,
in Bascom bin ich ja die bekannte Doppelnull - wo ich doch schon in Cäh ne Null bin. Aber hier mal auf die Schnelle ein Schnippsel, wie ICH bei meinen Döschen die Motoren schalte (ist aber ein H-Brücken-IC). Weiß ja nicht ob Dir das hilft. In den Wahrheitstabellen der H-Brücken-ICs gibts vielleicht auch ne Hilfe/Erklärung.
Vielleicht bringt Dir das RNWiki mehr Hilfe?Code:Initialisierung: /* ============================================================================== */ /* == PWM-Routinen zur Motoransteuerung ======================================= */ void TC0PWM_init(void) //Init Timer/Counter0 für Erzeugung des PWM-Signals { TCCR0A |= (1<<COM0A1)|(1<<COM0B1); //Clear/set OC0A/OC0B on Compare Match, // doc S102 , OC0A/OC0B ist Port PD6/D5 TCCR0A |= (1<<WGM01)|(1<<WGM00); // Fast PWM, TOP=0xFF=dez255, doc S104 // das ergibt aus 20 MHz mit Prescaler 1/64 1220 Hz TCCR0B |= (1<<CS01)|(1<<CS00); // Prescaler ist clk/64 doc S106 TIMSK0 &= ~(1<<OCIE0A)|(1<<OCIE0B); // Tmr/Cntr0 Oput CompB Match intrrpt dsabld TIMSK0 &= ~(1<<TOIE0); // Tmr/Cntr0 Overflow interrupt disabled OCR0A = 0; // PWM auf Null setzen OCR0B = 0; // PWM auf Null setzen Iz_diff0 = 0; isum12 = isum34 = 0; ie_mot12 = ie_mot34 = 0; ie_alt12 = ie_alt34 = 0; } /* ============================================================================== */ void setPWMrechts(uint8_t speed) //Geschwindigkeit Motor 12 (rechter) {OCR0B = speed;} // PWM auf PD5/OC0B, korrig. 24mrz09 /* ============================================================================== */ void setPWMlinks(uint8_t speed) //Geschwindigkeit Motor 34 (linker) {OCR0A = speed;} // PWM auf PD6/OC0A, korrig. 24mrz09 /* ============================================================================== */ ... und die verschiedenen Richtungen: // Drehrichtungsbefehle für Motor 1,2 = "rechter" Motor void M12pos (void) // Mot12 dreht im Uhrzeigersinn = neg. math. { PORTB |= (1<<PB4); PORTD &= ~(1<<PD4); mdir12 = 1; } // r r r r r r r Motor 1,2 = rechter Motor r r r r r r void M12neg (void) // Mot12 dreht im mathematisch positiven Drehsinn { PORTB &= ~(1<<PB4); PORTD |= (1<<PD4); mdir12 = -1; } // r r r r r r r Motor 1,2 = rechter Motor r r r r r r void M12stp (void) // Motor 12 aus { PORTB &= ~(1<<PB4); PORTD &= ~(1<<PD4); } // ----------------------- // Drehrichtungsbefehle für Motor 3,4 = "linker" Motor void M34neg (void) // Mot3,4 dreht im Uhrzeigersinn = neg. math. { PORTB |= (1<<PB0); PORTD &= ~(1<<PD7); mdir34 = 1; } // l l l l l l l Motor 3,4 = linker Motor l l l l l l void M34pos (void) // Mot3,4 dreht im mathematisch positiven Drehsinn { PORTB &= ~(1<<PB0); PORTD |= (1<<PD7); mdir34 = -1; } // l l l l l l l Motor 3,4 = linker Motor l l l l l l void M34stp (void) // Motor 12 aus { PORTB &= ~(1<<PB0); PORTD &= ~(1<<PD7); } // - - - - Anmerkung zum Code: beim Mot12 geht Mot12neg in die mathematisch positive Richtung, weil Motxxneg natürlich "fahre rückwärts" heißt.







Zitieren

Lesezeichen