Also als erstes möchte ich mal ein riesiges Dankeschön an euch
loswerden!
Sehr freundliche und kompetente Hilfe die ihr zwei mir hier gegeben
habt.
Habe eure Anregungen in mein Programm einfließen lassen und siehe da -
mit dem folgenden Code werden immerhin schon mal die Daten die ich sende
fehlerfrei angezeigt. Der Rest des Displays ist zwar noch Pixelsalat,
was aber durch Überschreiben des gesamten Displayinhalts in den Griff zu
bekommen sein sollte.
Direkt nach der Programmierung des ATMegas wird leider kein
Displayinhalt dargestellt, was aber vermutlich daran liegen sollte, dass
der ISP-Programmer den Displaycontroller etwas durcheinander bringt, da
die beiden ja am selben SPI-BUS hängen.
Was mich gerade aber etwas verwundert ist, dass die gesendeten Daten
auch ohne den Befehl "show SRAM content"(0xA4) angezeigt werden.
Werde mir im Datenblatt die Befehlstabelle wohl nochmal zu Gemüte führen
müssen.
1 | #include<avr/io.h>
|
2 | #define F_CPU 1000000
|
3 | #include <util/delay.h>
|
4 |
|
5 | #define CHIPSELECT PORTB &= ~(1<<1);
|
6 | #define CHIPUNSELECT PORTB |= (1<<1);
|
7 |
|
8 | #define DATA PORTB |= (1<<0);
|
9 | #define COMMAND PORTB &= ~(1<<0);
|
10 |
|
11 | #define RESETHIGH PORTB |= (1<<2);
|
12 | #define RESETLOW PORTB &= ~(1<<2);
|
13 |
|
14 |
|
15 | void SPI_MasterInit(void)
|
16 | { //Dieser Programmabschnitt scheint funktionsfähig zu sein,
|
17 | }
|
18 |
|
19 | unsigned char spi_out(char b)
|
20 | {
|
21 | //Byte senden
|
22 | SPDR = b;
|
23 | //Warten bis Sendevorgang komplett
|
24 | while(!(SPSR &(1<<SPIF)));
|
25 | //SPIF löschen durch lesen von SPDR
|
26 | return SPDR;
|
27 |
|
28 | }
|
29 |
|
30 | void sendCommand(char command)
|
31 | { CHIPSELECT;
|
32 | COMMAND;
|
33 | //Byte senden
|
34 | spi_out(command);
|
35 | CHIPUNSELECT;
|
36 | }
|
37 |
|
38 | void sendData(char data)
|
39 | { CHIPSELECT;
|
40 | DATA;
|
41 | //Byte senden
|
42 | spi_out(data);
|
43 | CHIPUNSELECT;
|
44 | }
|
45 |
|
46 | void DisplayInit(void)
|
47 | { //Display reset
|
48 | RESETLOW;
|
49 | _delay_ms(1);
|
50 | RESETHIGH;
|
51 | _delay_ms(5);
|
52 |
|
53 | //Display init
|
54 |
|
55 | sendCommand(0x40);
|
56 | sendCommand(0xA1);
|
57 | sendCommand(0xC0);
|
58 | //sendCommand(0xA4);
|
59 | sendCommand(0xA6);
|
60 |
|
61 | sendCommand(0xA2);
|
62 | sendCommand(0x2F);
|
63 | sendCommand(0x27);
|
64 | sendCommand(0x81);
|
65 | sendCommand(0x10);
|
66 |
|
67 | sendCommand(0xFA);
|
68 | sendCommand(0x90);
|
69 | sendCommand(0xAF);
|
70 |
|
71 |
|
72 |
|
73 |
|
74 | }
|
75 |
|
76 | int main(void)
|
77 | { SPI_MasterInit();
|
78 | DisplayInit();
|
79 | /*Ein Paar Daten testweise senden.
|
80 | Erwartung: Schwarzes Kästechen von 5*8 Pixeln in der
|
81 | oberen linken Ecke*/
|
82 |
|
83 | sendCommand(0b00000000);
|
84 | sendCommand(0b00010000);
|
85 | sendData(0xFF);
|
86 | sendCommand(0b00000001);
|
87 | sendCommand(0b00010000);
|
88 | sendData(0xFF);
|
89 | sendCommand(0b00000010);
|
90 | sendCommand(0b00010000);
|
91 | sendData(0xFF);
|
92 | sendCommand(0b00000011);
|
93 | sendCommand(0b00010000);
|
94 | sendData(0xFF);
|
95 | sendCommand(0b00000100);
|
96 | sendCommand(0b00010000);
|
97 | sendData(0xFF);
|
98 | //SRAM Inhalt darstellen!
|
99 | //sendCommand(0xA4); //Merkwürdig!
|
100 |
|
101 | while(1);
|
102 |
|
103 | }
|
MfG
Steven