Hallo zusammen.
Ich habe ein Problem mit dem Senden der Daten über SPI an ein DOGM
Display.
http://www.lcd-module.de/pdf/grafik/dogm128.pdf
Mit diesem Code initialisiere ich das SPI. Dazu nutze ich den SPI Driver
von ATMEL:
1
SPI_Master_tspiMasterE;
2
3
constcharinit[]={0x40,//Display start line 0
4
0xa1,//ADC reverse
5
0xc0,//Normal COM0...COM63
6
0xa6,//Display normal
7
0xa2,//Set Bias 1/9 (Duty 1/65)
8
0x2f,//Booster, Regulator and Follower On
9
0xf8,//Set internal Booster to 4x
10
0x00,
11
0x27,//Contrast set
12
0x81,
13
0x0f,
14
0xac,//No indicator
15
0x01,
16
0xaf,//Display on
17
0xb0,//Page 0 einstellen
18
0x10,//High-Nible der Spaltenadresse
19
0x00,//Low-Nible der Spaltenadresse
20
0xAF
21
};
22
23
//Display initialisieren an PORT E
24
SPI_MasterInit(&spiMasterE,
25
&SPIE,
26
&PORTE,
27
false,
28
SPI_MODE_0_gc,
29
SPI_INTLVL_MED_gc,
30
false,
31
SPI_PRESCALER_DIV4_gc);
32
33
for(u8i=0;i<18;i++)
34
{
35
36
37
SPI_MasterTransceiveByte(&spiMasterE,init[i]);
38
39
40
}
Die Initialisierung funktioniert soweit auch. Doch das Sendeflag, dass
die Übertragung abgeschlossen ist, wird einfach nicht gesetzt.
So sieht die Transceive Funktion aus:
Doch diese Schleife wird nie verlassen und das Programm hängt immer nur
da drin herum.
Das Display an sich schicht keine Daten zurück, man kann also nur Daten
an das Display senden. Ob das jetzt was ausmacht, weiß ich auch niucht
genau.
Hallo Hans,
hast Du das Ganze mal ozilloskopiert?
Ich vermisse CS1 - vielleicht kommt das ja auch nur aus dem
Programmfragment nicht heraus.
Gruß
Helmut
was ist cs1?
Das Problem ist, dass ich im Debugger sehe, dass das Datenregister des
SPI-E Ports garnicht beschrieben wird.
warum weiß ich allerdings auch nciht.
Das Display braucht zum eigentlichen SPI noch zusätzlich drei
Steuerleitungen A0, CS1, und Reset. Diese müssen taktgenau mit dem SPI
gesteuert werdens (siehe st7676r.pdf). Ohne Aktivierung von A1 und CS1
kommt keine Statusrückmeldung zustande.
Siehe meine Anwendung: http://www.basteln-mit-avr.de/xatmega.html