Hallo erst mal an alle
ich weiß ,dass es schon sehr viele Beiträge zu diesem Display gibt,
jedoch komm ich trotz dass ich sie alle gelesen hab nicht voran.
Ich möchte mit dem PIC18F4685 über SPI das DOG S 102 Display ansteuern
bzw. erstmal nur initialisieren.
Die SPI übertragung funktioniert, da ich sie mit dem Oszi überprüft hab.
Trotz allem tut sich nichts:(,
Die Verbindungen zum Display hab ich mehrmals auch überprüft und sollten
stimmen.
Ich hab beim Display jedoch mal aus versehen die Versorgungsspannung
verkehrt angeschlossen :(, ich hoffe das hat es überlebt.
und ich hab bei den externen Kondis Elkos verwendet, hab jedoch schon
darauf geachtet dass sie richtig angeschlossen sind.
Hier ist die main
1 | #include "p18f4685.h"
|
2 | #include "delays.h"
|
3 | #include "Alexander_functions.h"
|
4 |
|
5 | #define RESET LATCbits.LATC0
|
6 | #define CD LATCbits.LATC1
|
7 | #define CS LATCbits.LATC2
|
8 |
|
9 | char send_Byte,get_Byte[12];
|
10 | int write=0,read=1;
|
11 | char byte,command,data;
|
12 | char i;
|
13 | char abc;
|
14 |
|
15 | void Ports_Init(void);
|
16 |
|
17 |
|
18 | void main (void)
|
19 | {
|
20 | Delay10KTCYx(200);
|
21 |
|
22 | Ports_Init();
|
23 | SPI_INIT();
|
24 | Delay10KTCYx(10);
|
25 | INIT_GDISPLAY();
|
26 | Delay10KTCYx(10);
|
27 |
|
28 | SEND_COMMAND(0b00000000);
|
29 | SEND_COMMAND(0b00010000);
|
30 | SEND_DATA(0xFF);
|
31 | SEND_COMMAND(0b00000001);
|
32 | SEND_COMMAND(0b00010000);
|
33 | SEND_DATA(0xFF);
|
34 | SEND_COMMAND(0b00000010);
|
35 | SEND_COMMAND(0b00010000);
|
36 | SEND_DATA(0xFF);
|
37 | SEND_COMMAND(0b00000011);
|
38 | SEND_COMMAND(0b00010000);
|
39 | SEND_DATA(0xFF);
|
40 | SEND_COMMAND(0b00000100);
|
41 | SEND_COMMAND(0b00010000);
|
42 | SEND_DATA(0xFF);
|
43 |
|
44 | SEND_COMMAND(0xa4);
|
45 |
|
46 |
|
47 | while(1);
|
48 | } // end of main
|
49 |
|
50 |
|
51 | void Ports_Init(void)
|
52 | {
|
53 |
|
54 | TRISCbits.TRISC3 = 0; // Master, so SCK is output
|
55 | TRISCbits.TRISC4 = 1; // SDI is input
|
56 | TRISCbits.TRISC5 = 0; // SDO is output
|
57 | TRISCbits.TRISC6 = 0; // Chip Select
|
58 |
|
59 | TRISCbits.TRISC0 = 0; // Master, so SCK is output
|
60 | TRISCbits.TRISC1 = 0; // Master, so SCK is output
|
61 | TRISCbits.TRISC2 = 0; // Master, so SCK is output
|
62 |
|
63 | RESET=1;
|
64 | CS=1; // Chip select
|
65 | }
|
das sind die Funktionen
1 | #include "p18f4685.h"
|
2 | #include "delays.h"
|
3 | #include "Alexander_functions.h"
|
4 |
|
5 | void SPI_INIT(void)
|
6 | {
|
7 | SSPCON1bits.SSPEN = 1; // Enable MSSP
|
8 | SSPCON1bits.CKP = 0; // IDLE is low level
|
9 | SSPCON1bits.SSPM3 = 0;
|
10 | SSPCON1bits.SSPM2 = 0;
|
11 | SSPCON1bits.SSPM1 = 1; // Master Mode, Clock is Fosc/64 (20MHz / 64 = 300 kHz)
|
12 | SSPCON1bits.SSPM0 = 0;
|
13 |
|
14 | SSPSTATbits.SMP = 0; // Input data sampled at middle of data output time
|
15 | SSPSTATbits.CKE = 1; // Transmit on transition from Idle to active clock state
|
16 | }
|
17 |
|
18 | int SPI_BYTE(char byte)
|
19 | {
|
20 | SSPBUF = byte;
|
21 | while(SSPSTATbits.BF == 0);
|
22 | PIR1bits.SSPIF = 0; // Clear Interrupt flag (wird immer gesetzt wenn ein Byte ankommt)
|
23 | byte = SSPBUF; // Read
|
24 |
|
25 | return byte;
|
26 | }
|
27 |
|
28 | void INIT_GDISPLAY(void)
|
29 | {
|
30 | char i,init_array[12]={0x40,0xa1,0xc0,0xa6,0xa2,0x2f,0x27,0x81,0x10,0xfa,0x90,0xaf};
|
31 |
|
32 | Delay10KTCYx(10);
|
33 | RESET=0; // Reset
|
34 | Delay10KTCYx(10);
|
35 | RESET=1;
|
36 | Delay10KTCYx(10); // 20ms delay
|
37 |
|
38 | for(i=0;i<12;i++)
|
39 | {
|
40 | SEND_COMMAND(init_array[i]);
|
41 | }
|
42 | }
|
43 |
|
44 | void SEND_COMMAND(char command)
|
45 | {
|
46 | CD=0; // Command Data
|
47 | CS=0; // Chip select
|
48 | SPI_BYTE(command);
|
49 | CS=1; // Chip select
|
50 | }
|
51 |
|
52 | void SEND_DATA(char data)
|
53 | {
|
54 | CD=1; // Command Data
|
55 | CS=0; // Chip select
|
56 | SPI_BYTE(data);
|
57 | CS=1; // Chip select
|
58 | }
|
und noch die include datei
1 | #define RESET LATCbits.LATC0
|
2 | #define CD LATCbits.LATC1
|
3 | #define CS LATCbits.LATC2
|
4 |
|
5 | extern void SPI_INIT_(void);
|
6 | extern void INIT_GDISPLAY(void);
|
7 |
|
8 | extern void SEND_COMMAND(char command);
|
9 | extern void SEND_DATA(char data);
|
10 | extern int SPI_BYTE(char byte);
|
Das Programm macht schon was es sollte jedoch das display nich, wenn
jemand nen Felher im Programm findet wäre das super:)
danke im voraus für jede Hilfe
mgf
alex