Forum: Mikrocontroller und Digitale Elektronik SPI Display UC1608 PIC32MX795


von Richie Rich (Gast)


Lesenswert?

Hallo,

ich habe immer wieder dasselbe Problem.
Ich nutze ein 240x120 Pixel Display mit dem folgenden Displaycontroller:

http://www.orientdisplay.com/pdf/UC1608.pdf

Ich steuere das Display via 4 wire SPI an und via Ansteuerung auf dem 
Starterkit funktioniert wiederum alles tadellos.
Das Starterkit ist mit einem PIC32MX795F512L bestückt.

Auf meiner eigenen Platine sieht das ganze wie folgt aus:
- PIC32MX795F512L

Config Bits:
1
#pragma config FNOSC    = FRCPLL            // Oscillator Selection Bit -> Fast RC Osc with PLL
2
#pragma config POSCMOD  = OFF               // Primary Oscillator disabled
3
#pragma config FPLLIDIV = DIV_2             // PLL Input Divider
4
#pragma config FPLLMUL  = MUL_20            // PLL Multiplier
5
#pragma config FPLLODIV = DIV_1             // System PLL Output Clock 
6
#pragma config FWDTEN   = OFF               // Watchdog Timer Disable
7
#pragma config FPBDIV   = DIV_8             // Peripheral Clock Divisor
8
#pragma config FSOSCEN = OFF                // Secondaray Osc disabled
9
//******************************************
10
#pragma config IESO = OFF
11
#pragma config FCKSM = CSDCMD
12
#pragma config OSCIOFNC = OFF
13
#pragma config WDTPS = PS1024
14
15
#pragma config CP = OFF
16
#pragma config BWP = OFF
17
#pragma config PWP = OFF
18
#pragma config DEBUG = OFF

Der Systemtakt ist auf 10 MHz eingestellt:

Die SPI Init sieht folgendermaßen aus:
1
void spi_init(void)
2
{
3
    char dummy;
4
    SPI1CONbits.ON      = 0;        // disable SPI to reset any previous 
5
    dummy               = SPI1BUF;  // clear receive buffer
6
    SPI1BRG             = 0x01;
7
    SPI1CONbits.MSTEN   = 1;        // enable master mode
8
    SPI1CONbits.CKE     = 1;        // set clock-to-data timing 1:Serial output data changes on transition from active clock state to idle clock state (see CKP bit)
9
10
    SPI1CONbits.CKP     = 1;        // 1: 1 = Idle state for clock is a high level; active state is a low level
11
12
    SPI1CONbits.ON      = 1;        // turn SPI on
13
14
}

Laut Datenblatt ergibt sich die SPI Clock aus:
1
FSCK = FPB/[2*(SPI1BRG + 1)]

Für FPB = 10 MHZ und SPI1BRG = 1 ergibt sich dann 2,5 MHz SPI CLOCK. 
Dies habe ich mit dem Oszi verifiziert, sieht eigentlich gut aus. Leider 
funktioniert die komplette SPI Kommunikation nicht, d.h. das Display 
zeigt nichts an (im Gegensatz zu dem Projekt auf dem Starterkit, auf dem 
alles tadellos funktioniert).

In dem Datenblatt des Displaykontrollers finde ich keine Spezifikationen 
in welchen Rahmen sich die SPI Clock befinden darf. ??


Hier nochmal der Code:
1
#include <p32xxxx.h>
2
#include <stdio.h>
3
#include <stdlib.h>
4
#include <plib.h>
5
6
#include "delay.h"
7
#include "SPI_test.h"
8
9
// ... Config bits siehe oben
10
11
int main() {
12
  
13
14
    ERC_CS_OUT;     // Chipselext Ausgang
15
    ERC_RES_OUT;    // Reset Ausgang
16
    ERC_CD_OUT;     // CD Ausgang
17
18
    delay_millis(200);
19
    spi_init();
20
21
    delay_millis(1500);
22
    Initial();
23
    delay_millis(1500);
24
    
25
26
    Clear_Display();
27
28
29
    Set_Page_Address(5);
30
    Set_Column_Address(1);
31
32
    lettertodisplay('a');
33
}

von W.S. (Gast)


Lesenswert?

Du erwartest nicht wirklich, daß sich jemand durch deine geposteten 
Quellteile und das µC-Manual durcharbeitet, um dir den entscheidenden 
Rat zu geben.

Ganz pauschal: setze den Takt doch einfach mal runter oder guck dir an, 
ob sowas wie SSEL oder andere Signale (A0 oder sowas wie RS usw.) 
richtig gesetzt sind.

W.S.

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.