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_t spiMasterE;
|
2 |
|
3 | const char init[] = {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( u8 i = 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:
1 | uint8_t SPI_MasterTransceiveByte(SPI_Master_t *spi, uint8_t TXdata) {
|
2 |
|
3 | while(!(spi->module->STATUS & SPI_IF_bm)) {
|
4 | }
|
5 | }
|
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.