SPI Display mit PIC32

Gast #4185779
Lesenswert?

Hallo,

ich habe das folgende Display:

http://www.buydisplay.com/default/tft-5-inch-lcd-display-module-w-controller-board-serial-i2c-ra8875

per 4-wire SPI (SDI1, SDO1, CS u. SCK) und eine gesonderte RESET Leitung 
erfolgreich per Starterkit und Expansion Board angesteuert.

Das Starterkit ist mit dem PIC32MX795F512L bestückt.

Funktioniert alles tadellos.

Ich habe mir eine eigene Platine fertigen lassen, ebenfalls mit dem 
PIC32MX795F512L und einen SPI Header (1: CS; 2: RESET; 3: SDI; 4: SDO 
und 5: SCK). SCK, SDI und SDO sind definitiv an den richtigen PINs des 
PIC32 und auch RESET und CS sind an denselben Pins wie auf dem 
Starterkit. Zusätzlich habe ich an RESET einen 10K Pull Up und an CS 
einen 10K Pull Up angebracht.

Das Display schließe ich jetzt genauso an wie ehemals an dem Starterkit. 
Die Fehlerquelle sollte also hier gering bis ausgeschlossen sein.
Spi Leitungen auf der Platine sind auch sehr kurz gehalten.

Problem ist dass dasselbe Programm welche auf dem Starterkit 1A läuft 
bei der eigenen Platine nicht mal das Display richtig initialisiert.
Ich habe die Pull UPs an RESET und CS runtergelötet, SDI und SDO 
vertauscht usw, alles ohne Erfolg.

Wie gesagt ist ein Software Fehler auszuschließen, da dasselbe Programm 
bei selben Leitungen, selbiger Verdrahtung, selber MCU usw. tadellos 
läuft.

Wenn ich die Config Bits des PICs ändere initialisert sich das Display 
zumindest. Trotzdem funktionieren alle weitere Funktionen nicht.

Normal müßte dasselbe Programm 1 zu 1 vom Starterkit auf die Platine 
portierbar sein.

Jemand Ideen welche Fehlerquellen in Frage kommen könnten?

Vielen Dank!
Gast #4186510
Lesenswert?

Arc N. schrieb:
> Dasselbe Programm oder nur dieselben Routinen zum Ansteuern des
> Displays?
> Sind die Analogfunktionen der Pins, die für SPI verwendet werden, in
> AD1PCFG ausgeschaltet (Bit = 1, Default nach Reset ist 0 d.h. analog)?

ich hab per Default mal alle Pins auf digital gestellt.

AD1PCFG = 0xFFFF;   // Pins to digital

Wie gesagt funktioniert dies ja auch auf dem Starterkit ohne diese 
Einstellung, aber danke für den Einwand!

Ich habe das Gefühl, dass es was mit den Config Bits zu tun haben muss, 
obwohl es mir trotzdem unerklärlich ist, da es sich wie gesagt um ein 
und denselben MCU handelt.
Gast #4186527
Lesenswert?

Anderer Quarz? Rennt der PIC vl durch unpassende Config-Bits auf dem 
internen Quarz (typischer Fallback)?

Wenn der Takt zu hoch oder das Timing fürs Display unpassend ist, dann 
kann das die Effekte schon erklären.
Gast #4186539
Lesenswert?

hier mal die CONGIF Bits:
1
// Primary Osc w/PLL (XT+,HS+,EC+PLL)
2

3
#pragma config FNOSC = PRIPLL
4

5
// XT osc mode
6

7
#pragma config POSCMOD = XT
8

9
// PLL Input Divider: 1 2 3 4 5 6 10 12
10

11

12
#pragma config FPLLIDIV = DIV_2
13

14
// PLL Multiplier: 15 16 17 18 19 20 21 24
15

16

17
#pragma config FPLLMUL = MUL_20
18

19

20
// System PLL Output Clock Divider: 1 2 4 8 16 32 64 256
21

22

23
#pragma config FPLLODIV = DIV_1
24

25
// Peripheral Clock Divisor: Pb_Clk = Sys_Clk / DIV_1, DIV_2, DIV_4, DIV_8
26

27
#pragma config FPBDIV = DIV_8
28

29

30
// Secondary Oscillator Enable: ON OFF
31

32
#pragma config FSOSCEN = OFF
33

34
// Internal/External Switch Over: ON OFF
35

36
#pragma config IESO = OFF
37

38
// Clock Switch Disable, FSCM Disabled
39

40
#pragma config FCKSM = CSDCMD
41

42
// CLKO Output Signal Active on the OSCO Pin: ON OFF
43

44
#pragma config OSCIOFNC = OFF
45

46

47
// Watchdog Timer Enable: ON, OFF (WDT Disabled (SWDTEN Bit Controls))
48

49

50

51
#pragma config FWDTEN = OFF
52

53

54

55
// Watchdog Timer Postscaler: 1:1, 1:2, 1:4, ... 1:65536, 1:1048576
56

57

58

59
#pragma config WDTPS = PS1024
60

61
// Code Protect: ON, OFF
62

63
#pragma config CP = OFF
64

65

66

67
// Boot Flash Write Protect bit: ON, OFF
68

69
#pragma config BWP = OFF
70

71

72

73
// Program Flash Write Protect: PWP512K, PWP508K, ... PWP504K, OFF
74

75
#pragma config PWP = OFF
76

77
#pragma config DEBUG = OFF

so funktioniert es alles auf dem Starterkit einwandfrei mit Primary OSC 
und selben Takt.

Ich muss gestehen, dass ich jetzt nicht jede Zeile der Config Bits 
erklären kann, aber es wird ja kein secondary Oscillator auf dem 
Starterkit genutzt den ich auf der Platine nicht habe.
Gast #4186720
Lesenswert?

morph1 schrieb:
> Der Config nach würde das einen externen Quarz mit 8MHz
> voraussetzen und
> einen internen Takt von 80MHz ergeben (wenn ich mich grad nicht
> verrechnet habe).
>
> Hast du einen externen 8MHz Quarz dran?

Vielen Dank, ich glaube die "Spur" ist die Richtige.
Vorweg, ich habe keinen 8 Mhz angeschlossen, ich lese aus den CONFIG 
Bits aber auch nicht heraus, warum dies der Fall sein sollte.

Habe mir gerade das Reference Manual für Oscillator durchgelesen und 
versucht meine Config Bits einmal zu entschlüsseln, mit folgenden 
Ergebnis:
1
#pragma config FNOSC = PRIPLL // Oscillator Selection Bits -> Primary Oscillator
2
#pragma config POSCMOD = XT   // Primary Oscillator -> Resonator, crystal or resonator
3
#pragma config FPLLIDIV = DIV_2   // PLL Input Divider = 2
4
#pragma config FPLLMUL = MUL_20   // PLL Multiplier = 20
5
#pragma config FPLLODIV = DIV_1   // System PLL Output Clock Divider
6
#pragma config FPBDIV = DIV_8     // Peripheral Clock Divider; Pb_Clk SystemClock/8
7
#pragma config FSOSCEN = OFF      // Secondaray Osc disabled
8
#pragma config FCKSM = CSDCMD
9
#pragma config OSCIOFNC = OFF
10
#pragma config FWDTEN = OFF
11
#pragma config WDTPS = PS1024
12
#pragma config CP = OFF
13
#pragma config BWP = OFF
14
#pragma config PWP = OFF
15
#pragma config DEBUG = OFF

Wo genau steht hier etwas von externen Quarz?
Ich habe doch nur den internen Primary Oscillator ausgewählt?
Wie genau bekomme ich mein System ohne externen 8 mhz Quarz zum laufen? 
Wie müßten die Config Bits dann aussehen.
Wie hast du die 80 Mhz Systemtakt errechnet?

Es stimmt schon, dass meines Wissens auf dem Starterkit ein externer 8 
Mhz Quarz drauf ist. Ich kann dies nur noch nicht mit den Config Bits in 
Zusammenhang bringen, da ich gerade erst anfange mich mit PIC32 zu 
beschäftigen.

Vielen Dank an Morph für die Hilfe!
Gast #4186801
Lesenswert?

Ich habe es jetzt mal mit dem internen Fast RC Ozillator with PLL 
versucht und den Systemtakt auf 80 MHz versucht einzustellen:
1
#pragma config FPLLIDIV = DIV_2
2
#pragma config FPLLMUL  = MUL_20
3
#pragma config FPLLODIV = DIV_1
4
#pragma config FWDTEN   = OFF
5
#pragma config POSCMOD  = OFF
6
#pragma config FNOSC    = FRCPLL
7
#pragma config FPBDIV   = DIV_1
8
#pragma config FCKSM    = CSECME

Leider bekommen ich jetzt gar keine Ausgabe.

Ich fasse nochmal zusammen:
1. Starterkit mit 8 Mhz externer Quarz funktioniert
2. eigene Platine mit selbigen MCU ohne externen 8 Mhz Quarz 
funktioniert nicht. Wie muss ich die Config Bits genau setzen, damit das 
alles wieder reibungslos funktioniert?
#4186841
Lesenswert?

Hallo,

auf deinem starterkit hast du:
#pragma config FPBDIV = DIV_8 !!!

jetzt auf dem bastelboard:
#pragma config FPBDIV   = DIV_1

du weisst schon was das macht?
vorher CPU = 80Mhz PBus = 10Mhz (dein starterkit)
jetzt  CPU = 80Mhz PBus = 80Mhz (bastelboard ohne quarz)

so, jetzt weiss aber niemand wie du delays etc erzeugst (timer?).
oder von welchem takt dein SPI modul lebt, also ohne code zeigen, dauert 
mir das zu lange.

Ach, immer ALLE config wörter zeigen, sonst kann dir nur schwer geholfen 
werden.
Also alle pragmas für DEVCFG0 - DEVCFG3.

ps: ich mache IMMER zuerst ein blinky, mit sw delay, dann erwetern mit 
timer usw,
um ein "neues" board zu prüfen und welcher takt denn wirklich wo am 
werkeln ist.

mfG
Peter
Gast #4187229
Lesenswert?

Mia sain mia schrieb:
> Vorweg, ich habe keinen 8 Mhz angeschlossen, ich lese aus den CONFIG
> Bits aber auch nicht heraus, warum dies der Fall sein sollte.

Wegen des Aufbau des Oszillators im PIC :)
Beim Eingangsteiler von 2 muss der Quarz 8Mhz haben, weil das PLL-Modul 
nur 4MHz akzeptiert.

Ich würde mir das Kapitel mal genauer ansehen. Wie der Vorposter schon 
schrieb, du hast 80MHz Peripheral-Clock, dein Starterkit nur 10.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren