Guten Abend,
ich möchte einen H-Brücke aufbauen und nutze dafür zwei IR 2104 MOSFET 
Treiber. Der angeschlossene Motor soll die Drehrichtung ändern können. 
Der Betrieb ist wie folgt gedacht: Einer der unteren (abhängig von der 
gewünschten Drehrichtung) MOSFETs ist dauerhaft an. Hierfür muss SD high 
und IN low sein (PWM Signal aus). Eine Seite der H-Brücke schaltet dann 
im Wechsel den HS - und LS MOSFET (abhängig von der gewünschten 
Drehzahl).
Mir reicht also ein PWM Signal, welches ich auf zwei unterschiedlichen 
BIT's ausgeben könnte. Ich nutze einen MSP430 G2553 - dieser kann auf 
P1.2 & P1.6 das (PWM) TA0.1 Signal ausgeben. Via Befehl möchte ich 
zwischen den Ausgängen umschalten:
Einmal soll bspw. an BIT6 das PWM Signal anliegen und BIT2 soll low 
sein.
Für einen Drehrichtungswechsel kehrt sich die eben genannte 
Konstellation um.
| 1 | //Der Wert von "y" wird via Taster geändert  
 | 
| 2 | switch(y)
 | 
| 3 |           {
 | 
| 4 |             case(0):
 | 
| 5 |               {
 | 
| 6 |               P1DIR &= ~BIT6;        // P1.6 Input
 | 
| 7 |               P1SEL &= ~BIT6;        // P1.6 Option select
 | 
| 8 |               delay_ms(10);
 | 
| 9 |               P1DIR |= BIT2;                          // P1.2 Output
 | 
| 10 |               P1SEL |= BIT2;                          // P1.2  Option select
 | 
| 11 |               lcdSetText("Drehrichtungs-",0,0);
 | 
| 12 |               lcdSetText("wechsel",0,1);
 | 
| 13 |               delay_s(2);
 | 
| 14 |               lcdClear();
 | 
| 15 |               }
 | 
| 16 |             break;
 | 
| 17 | 
 | 
| 18 |             case(1):
 | 
| 19 |               {
 | 
| 20 |               P1DIR &= ~BIT2;        // P1.2 Input
 | 
| 21 |               P1SEL &= ~BIT2;        // P1.2 Option select
 | 
| 22 |               delay_ms(10);
 | 
| 23 |               P1DIR |= BIT6;                          // P1.6 Output
 | 
| 24 |               P1SEL |= BIT6;                          // P1.6  Option select
 | 
| 25 |               lcdSetText("Drehrichtungs-",0,0);
 | 
| 26 |               lcdSetText("wechsel",0,1);
 | 
| 27 |               delay_s(2);
 | 
| 28 |               lcdClear();
 | 
| 29 |               }
 | 
| 30 |             break;
 | 
| 31 |           }
 | 
Testweise habe ich keinen Motortreiber sonder 2 Led's angeschlossen. 
Leider musste ich feststellen, dass auf P1.2 ein geringer (bislang noch 
nicht gemessener) Strom fließt. Die LED leuchtet glimmt. Der elektrische 
Aufbau ist auf einem Steckboard erfolgt und wurde mehrfach überprüft.
Auch habe ich gesondert versucht die PWM einzeln auf die Bit's auzugeben 
und komme zu selbigen Resultat.
Folgend:
Aufbau auf Steckboard. LED an P1.2 und P1.6 mit dem Launchpad verbunden 
und im Wechsel mit BIT2 und BIT6 debuggt. LED an P1.2 glimmt wenn kein 
PWM Signal anliegt. Lege ich das PWM Signal auf P1.2 und ist das 
Tastverhältnis 0, erlischt auch die LED
| 1 | #include "msp430g2553.h"
 | 
| 2 | 
 | 
| 3 | unsigned long duty_cycle=0;
 | 
| 4 | void main(void)
 | 
| 5 | {
 | 
| 6 |    WDTCTL = WDTPW  + WDTHOLD;        // stop WDT
 | 
| 7 | 
 | 
| 8 |    TACTL=TASSEL_2 + TACLR;        // SBCLK + TA Reset
 | 
| 9 |    P1DIR  |=    BIT6;               // P1.2 -> output
 | 
| 10 |    P1SEL  |=    BIT6;            // P1.2 option select
 | 
| 11 |    TACCR0  =    1023;               // CCR0 -> cycle time (10ms)
 | 
| 12 |    TACCR1  =     duty_cycle;         // CCR1 -> duty cycle
 | 
| 13 |    TACCTL1  =     OUTMOD_7;           // reset/set
 | 
| 14 |    TACTL   |=     MC_1;              // up-mode
 | 
| 15 | 
 | 
| 16 | 
 | 
| 17 |    // ADC configuration,V+ref=3V,V-ref=0V,Channel=A0
 | 
| 18 | 
 | 
| 19 |    ADC10CTL0  = ADC10ON + ADC10IE;
 | 
| 20 | 
 | 
| 21 |    ADC10AE0   |= INCH_0;           // channel A0
 | 
| 22 | 
 | 
| 23 |    ADC10CTL0 |= ENC + ADC10SC;       // Start Conversion
 | 
| 24 | 
 | 
| 25 |    _BIS_SR(LPM0_bits +GIE);          // Go to LPM0,interrupts enabled
 | 
| 26 | }
 | 
| 27 | 
 | 
| 28 | // interrupt
 | 
| 29 | 
 | 
| 30 | #pragma vector = ADC10_VECTOR
 | 
| 31 | __interrupt void adc10_interrupt(void)
 | 
| 32 | {
 | 
| 33 | __delay_cycles(5);
 | 
| 34 |   ADC10CTL0 |= ENC + ADC10SC;  // Start Conversion again
 | 
| 35 |   duty_cycle=(unsigned long)ADC10MEM;
 | 
| 36 |               TACCR1=duty_cycle;
 | 
| 37 | 
 | 
| 38 | }
 | 
Ist ein Fehler im obigen Code oder woran könnte es liegen?
Vielen Dank.