1 | #include <avr/io.h>
|
2 | #define F_CPU 1000000UL // Systemtakt in Hz - Tesboardtakt = 3686400UL
|
3 | #include <util/delay.h>
|
4 |
|
5 | #define CHIPSELECT PORTB &= ~(1<<1);
|
6 | #define CHIPUNSELECT PORTB |= (1<<1);
|
7 |
|
8 | #define DATEN PORTB |= (1<<0);
|
9 | #define KOMMANDO PORTB &= ~(1<<0);
|
10 |
|
11 | #define RESETHIGH PORTB |= (1<<2);
|
12 | #define RESETLOW PORTB &= ~(1<<2);
|
13 |
|
14 | void SPI_MasterInit(void); //SPI Intialisierung
|
15 | unsigned char spi_out(char byte); //übergibt Kommandos oder Daten an das SPI Register
|
16 | void sendekommando(char kommando); //Display Kommandos senden
|
17 | void sendedaten(char daten); // Anzeige Daten aufs Display senden
|
18 | void displayInit(void); //Initialisiert das DOGS Display
|
19 |
|
20 | int main(void)
|
21 | {
|
22 |
|
23 | SPI_MasterInit();
|
24 |
|
25 |
|
26 | displayInit();
|
27 |
|
28 |
|
29 | /*Ein Paar Daten testweise senden.
|
30 | Erwartung: Schwarzes Kästechen von 5*8 Pixeln in der
|
31 | oberen linken Ecke*/
|
32 | sendekommando(0b00000000);
|
33 | sendekommando(0b00010000);
|
34 | sendedaten(0xFF);
|
35 | sendekommando(0b00000001);
|
36 | sendekommando(0b00010000);
|
37 | sendedaten(0xFF);
|
38 |
|
39 | sendekommando(0b00000010);
|
40 | sendekommando(0b00010000);
|
41 | sendedaten(0xFF);
|
42 | sendekommando(0b00000011);
|
43 | sendekommando(0b00010000);
|
44 | sendedaten(0xFF);
|
45 | sendekommando(0b00000100);
|
46 | sendekommando(0b00010000);
|
47 | sendedaten(0xFF);
|
48 |
|
49 | sendekommando(0xA4);
|
50 |
|
51 | while(1);
|
52 |
|
53 | return(0);
|
54 | }
|
55 |
|
56 | void SPI_MasterInit(void) //SPI Intialisierung
|
57 | {
|
58 | // Set MOSI and SCK output (aus Handbuch)
|
59 | DDRB = (1<<5)|(1<<7); //DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK);
|
60 |
|
61 | //PB0, PB1 und PB2 als Ausgang (für Chipselekt, Reset und Daten/Kommando)
|
62 | DDRB |= ((1<<0)|(1<<1)|(1<<2));
|
63 |
|
64 | // Enable SPI, Master, set clock rate fck/16 (aus Handbuch)
|
65 | SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
|
66 | }
|
67 |
|
68 | unsigned char spi_out(char byte) //übergibt Kommandos oder Daten an das SPI Register
|
69 | {
|
70 | //Byte übergeben
|
71 | SPDR = byte;
|
72 |
|
73 | //Warten bis Sendevorgang komplett ist
|
74 | while(!(SPSR &(1<<SPIF)));
|
75 |
|
76 | //SPIF löschen durch auslesen des SPDR Registers
|
77 | return SPDR;
|
78 | }
|
79 |
|
80 | void sendekommando(char kommando) //Display Kommandos senden
|
81 | {
|
82 | CHIPSELECT;
|
83 |
|
84 | // PB0 auf low -> Kommando!
|
85 | KOMMANDO;
|
86 |
|
87 | //Byte senden
|
88 | spi_out(kommando);
|
89 |
|
90 | CHIPUNSELECT;
|
91 | }
|
92 |
|
93 | void sendedaten(char daten) // Anzeige Daten aufs Display senden
|
94 | {
|
95 | CHIPSELECT;
|
96 |
|
97 | //PB0 auf high -> Daten!
|
98 | DATEN;
|
99 |
|
100 | //Byte senden
|
101 | spi_out(daten);
|
102 |
|
103 | CHIPUNSELECT;
|
104 | }
|
105 |
|
106 | void displayInit(void) //Initialisiert das DOGS Display
|
107 | {
|
108 | //Display reset
|
109 | RESETLOW;
|
110 | _delay_ms(1);
|
111 | RESETHIGH;
|
112 | _delay_ms(5);
|
113 |
|
114 | //Display Initialisierungskommandos
|
115 | sendekommando(0x40);
|
116 | sendekommando(0xA1);
|
117 | sendekommando(0xC0);
|
118 | sendekommando(0xA4);
|
119 | sendekommando(0xA6);
|
120 | sendekommando(0xA2);
|
121 | sendekommando(0x2F);
|
122 | sendekommando(0x27);
|
123 | sendekommando(0x81);
|
124 | sendekommando(0x10);
|
125 | sendekommando(0xFA);
|
126 | sendekommando(0x90);
|
127 | sendekommando(0xAF);
|
128 | }
|