Hallo, ich versuche gerade ein Graphik Display zum laufen zu bringen mit UC1611s Chip auf einem MSP430 F2619 Verbindungstyp ist: 4 Draht 8bit SPI IDE: CodeComposer 5 Der nachfolgende Code sollte alle Pixel abwechseln Ein und wieder Aus schalten (Die ebenfalls angesteuerte LED blinkt auch, nur das Display leider nicht.) Hat einer eine Idee oder ein beispiel mit dem Displaytyp ? Bin um jeden Tip dankbar. // SPI Schnittstelle für Display #include <msp430.h> int main(void) { volatile unsigned int i; WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer P1DIR |= BIT0; // P1.0 -> Output (LED) P1DIR |= BIT3; // P1.3 -> Output (CS0 immer LOW) P1DIR |= BIT4; // P1.4 -> Output (C/D Command:LOW Data:High) P1OUT |= BIT0; // P1.0 -> HI P1OUT |= BIT3; // P1.3 -> HI P1OUT |= BIT4; // P1.4 -> HI P3SEL |= 0x0E; // P3.3,2,1 option select UCB0CTL0 |= UCMST+UCSYNC+UCCKPL+UCMSB; // 3-pin, 8-bit SPI master UCB0CTL1 |= UCSSEL_2; // SMCLK UCB0BR0 = 0x02; // /2 UCB0BR1 = 0; // UCB0CTL1 &= ~UCSWRST; // **Initialize USCI state machine** P1OUT &= ~BIT0; // P1.0 -> LOW P1OUT &= ~BIT3; // P1.3 -> LOW //(CS0 immer LOW -> Display selektiert) for(i=50;i>0;i--); // Init Warteschleife // Endlosschleife for(;;) { while (!(IFG2 & UCB0TXIFG)); // Warte bis der Buffer TX bereits ist P1OUT = 0x00; // P1.4 -> LOW: COMMAND UCB0TXBUF = 0xA4; // Transmit data (Schalte alle Pixel AUS) for(i=15000;i>0;i--); // WarteSchleife while (!(IFG2 & UCB0TXIFG)); // Warte bis der Buffer TX bereits ist P1OUT = 0x00; // P1.4 -> LOW: COMMAND UCB0TXBUF = 0xA5; // Transmit data (Schalte alle Pixel EIN) for(i=15000;i>0;i--); // WarteSchleife } }
Dorian Walcher schrieb: > P1OUT = 0x00; // P1.4 -> LOW: COMMAND damit sprichst du den ganzen Port an. P1OUT &= ~BIT4; wie du es oben weiter geschrieben hast. Da kommt 2 mal in der endlos Schleife vor.
Der Einwand stimmt. Nur die Idee dahinter war das sowieso der ganze Port LOW werden soll, weil die Bedingung für Command senden ist das: P1.3 (CSO) = LOW für Display wird aktiviert P1.4 (C/D) = LOW für Command und P1.0 toggelt (hier ist ein Fehler beim C&P passsiert) RICHTIG ist: while (!(IFG2 & UCB0TXIFG)); P1OUT = 0x00; // P1.4 -> LOW: COMMAND P1.0->LOW // 0b00000000 UCB0TXBUF = 0xA4; // Transmit data (Schalte alle Pixel AUS) for(i=15000;i>0;i--); // WarteSchleife while (!(IFG2 & UCB0TXIFG)); P1OUT = 0x01; // P1.4 -> LOW: COMMAND P1.0->HIGH // 0b00000001 UCB0TXBUF = 0xA5; // Transmit data (Schalte alle Pixel EIN) for(i=15000;i>0;i--); // WarteSchleife
Je nach Optimierung können die Warteschleifen von Compiler entfernt werden. Sonst hier schauen: http://mykyta.info/a/embedded/msp430/group___m_o_d___s_p_i.html
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.