Forum: Mikrocontroller und Digitale Elektronik DOGM mit SPI ansteuern


von Steeef (Gast)


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.

von wie immer (Gast)


Lesenswert?

beschreib doch bitte WAS genau nicht geht

von Peter D. (peda)


Lesenswert?

Steeef schrieb:
> das DOGM LCD Display ansteuern

Welches?


Peter

von Steeef (Gast)


Lesenswert?

Ich sehe nicht das sich am Display irgend etwas tut. Normal müsste ich 
doch etwas sehen das wenn ich beispielsweise den Kontrast einstelle. 
Oder?

von Karl H. (kbuchegg)


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.

von Steeef (Gast)


Lesenswert?

Das DOGM162

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.