DOGM mit SPI ansteuern

Gast #2603166
Lesenswert?

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.
#2603175
Lesenswert?

Steeef schrieb:

> Ich weis ich könnte das ganze als Funktion schreiben um das ganze
> übersichtlicher zu machen aber das mache ich später.

Da hast du natürlich recht. Sowas macht man immer später.
Ein Code ....
1
  SendByte( 0x38 );          //Function Set
2
  SendByte( 0x38 );          //Function Set
3
  SendByte( 0x18 );          //Internal OSC frequency
4
  SendByte( 0x7A );          //Contrast Set
5
  SendByte( 0x50 );          //Power/ICON/Contrast control
6
  SendByte( 0x68 );          //Follower control
7
  SendByte( 0x0C );          //Display ON/OFF control
8

9
//Jetzt könnte ich doch die Übertragung Starten oder?
.... wäre ja viel zu übersichtlich um zu kontrollieren, ob du die 
richtigen Bytes sendest bzw. ob du etwas vergessen hast einzustellen.

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