Hallo zusammen,
ich hoffe ihr könnt mir helfen. Es geht um folgendes und zwar will ich
mit meinem PIC18F2525 mit Hilfe des SPI das DOGM LCD Display ansteuern
aber irgendwie will das nicht so recht. Anbei sende ich euch meinen
bisherigen Code und hoffe das ihr ihn versteht:
1 | /****Programmkopf**************************************************
|
2 | #pragma code
|
3 |
|
4 | void main(void)
|
5 | {
|
6 |
|
7 | /****Anfangsbedingung für die SPI Schnittstelle********************
|
8 | //SSPSTAT-Register
|
9 | SSPSTATbits.SMP=0x00;
|
10 | SSPSTATbits.CKE=0x00;
|
11 | //SSPCON1-Register
|
12 | SSPCON1bits.SSPEN=0x01;
|
13 | SSPCON1bits.CKP=0x01;
|
14 | SSPCON1bits.SSPM3 = 0x00;
|
15 | SSPCON1bits.SSPM2 = 0x00;
|
16 | SSPCON1bits.SSPM1 = 0x00;
|
17 | SSPCON1bits.SSPM0=0x00;
|
18 | //SPI IO-Pins //PIC -> LC-Display
|
19 | TRISCbits.TRISC5=0x00; //SDO -> SDO
|
20 | TRISCbits.TRISC3=0x00; //SCK -> CLK
|
21 | TRISAbits.TRISA5=0x01; //SS -> CSB
|
22 | TRISAbits.TRISA4=0x00; //RA4 -> RS
|
23 |
|
24 | /****LC-Display initialisieren*************************************
|
25 | //Function Set
|
26 | Delay10TCYx(1);
|
27 | PORTAbits.RA5=0x00;
|
28 | LATAbits.LATA4=0x00;
|
29 | SSPBUF=0x38;
|
30 | while(SSPSTATbits.BF==0x00);
|
31 | PORTAbits.RA5=0x01;
|
32 | SSPSTATbits.BF=0x00;
|
33 |
|
34 | //Function Set
|
35 | Delay10TCYx(1);
|
36 | PORTAbits.RA5=0x00;
|
37 | LATAbits.LATA4=0x00;
|
38 | SSPBUF=0x38;
|
39 | while(SSPSTATbits.BF==0x00);
|
40 | PORTAbits.RA5=0x01;
|
41 | SSPSTATbits.BF=0x00;
|
42 |
|
43 | //Internal OSC frequency
|
44 | Delay10TCYx(1);
|
45 | PORTAbits.RA5=0x00;
|
46 | LATAbits.LATA4=0x00;
|
47 | SSPBUF=0x18;
|
48 | while(SSPSTATbits.BF==0x00);
|
49 | PORTAbits.RA5=0x01;
|
50 | SSPSTATbits.BF=0x00;
|
51 |
|
52 | //Contrast Set
|
53 | Delay10TCYx(1);
|
54 | PORTAbits.RA5=0x00;
|
55 | LATAbits.LATA4=0x00;
|
56 | SSPBUF=0x7A;
|
57 | while(SSPSTATbits.BF==0x00);
|
58 | PORTAbits.RA5=0x01;
|
59 | SSPSTATbits.BF=0x00;
|
60 |
|
61 | //Power/ICON/Contrast control
|
62 | Delay10TCYx(1);
|
63 | PORTAbits.RA5=0x00;
|
64 | LATAbits.LATA4=0x00;
|
65 | SSPBUF=0x50;
|
66 | while(SSPSTATbits.BF==0x00);
|
67 | PORTAbits.RA5=0x01;
|
68 | SSPSTATbits.BF=0x00;
|
69 |
|
70 | //Follower control
|
71 | Delay10TCYx(1);
|
72 | PORTAbits.RA5=0x00;
|
73 | LATAbits.LATA4=0x00;
|
74 | SSPBUF=0x68;
|
75 | while(SSPSTATbits.BF==0x00);
|
76 | PORTAbits.RA5=0x01;
|
77 | SSPSTATbits.BF=0x00;
|
78 |
|
79 | //Display ON/OFF control
|
80 | Delay10TCYx(1);
|
81 | PORTAbits.RA5=0x00;
|
82 | LATAbits.LATA4=0x00;
|
83 | SSPBUF=0xC;
|
84 | while(SSPSTATbits.BF==0x00);
|
85 | PORTAbits.RA5=0x01;
|
86 | SSPSTATbits.BF=0x00;
|
87 |
|
88 | //Jetzt könnte ich doch die Übertragung Starten oder?
|
89 | }
|
Ich weis ich könnte das ganze als Funktion schreiben um das ganze
übersichtlicher zu machen aber das mache ich später.