Forum: Mikrocontroller und Digitale Elektronik MSP430 - UC1611s Display Hello World mir SPI


von Dorian W. (2knuckels)


Lesenswert?

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
    }
}

von auf die schnelle (Gast)


Lesenswert?

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.

von Dorian W. (2knuckels)


Lesenswert?

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

von auf die schnelle (Gast)


Lesenswert?

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

von Dorian W. (2knuckels)


Lesenswert?

Danke für den Link.

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
Noch kein Account? Hier anmelden.