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.
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.
Vielleicht bringt Dir das RNWiki mehr Hilfe?
Lesezeichen