Hallo,
hab mal zum Atmega32 gewechselt und versuche grad nen ST7920
anzusteuern.
Komischerweise tut mein SPI gar nichts. Wenn ich den uC programmiere
tauchen irgendwelche Grafiken auf dem LCD auf. Aber wenn ich den uC und
das Display vom strom trenne und wieder verbinde, passiert nichts.
Ich hab auch zum testen ne LED an die SCK Leitung angeschlossen. Wenn
ich den uC programmiere, dann leuchtet diese auch und das flashen klappt
weiterhin. Nur beim strom trennen und verbinden, zeigt auch die LED
keinerlei reaktion vom SPI bzw. SCK.
1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 |
|
4 | //SPI Definitionen
|
5 | #define DDR_SPI DDRB
|
6 | #define DD_MOSI DDB5
|
7 | #define DD_SCK DDB7
|
8 |
|
9 | void SPI_Init(void)
|
10 | {
|
11 | //MOSI und SCK als Output
|
12 | DDR_SPI |= (1<<DD_MOSI)|(1<<DD_SCK);
|
13 | /*SPI Einschalten / Konfiguration als Master /
|
14 | bei 8MHz Systemtakt -> 500KHz SPITakt (Teiler von 16)*/
|
15 | SPCR |= (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0); //|(1<<CPOL)|(1<<CPHA)
|
16 | }
|
17 | void SPI_Send(unsigned char Data1)
|
18 | {
|
19 | //Data in den SPI-Sende-Register schreiben
|
20 | SPDR = Data1;
|
21 | //Warten bis die Übertragung abgeschlossen ist
|
22 |
|
23 | }
|
24 | void SendCommand(unsigned char Data)
|
25 | {
|
26 | //Zu sendende Daten in zwei variabeln schreiben
|
27 | unsigned char H_Data = Data;
|
28 | unsigned char L_Data = Data;
|
29 | //Löschen der 4 niederwertigen Bits bei H_Data
|
30 | H_Data &= 0x0F;
|
31 | //Löschen der 4 höherwertigen Bits von L_Data
|
32 | L_Data &= 0xF0;
|
33 | /*verschieben um 4 bits nach links
|
34 | 00001111 wird somit zu 11110000 */
|
35 | L_Data <<= 4;
|
36 | //Senden das ein Kommando folgt
|
37 | SPI_Send(0xF8);
|
38 | //Senden der 4 höherwertigen Bits von H_Data
|
39 | SPI_Send(H_Data);
|
40 | //Senden der jetzt 4 höherwertigen Bits von L_Data
|
41 | SPI_Send(L_Data);
|
42 | }
|
43 | void SendData(unsigned char Data)
|
44 | {
|
45 | //Zu sendende Daten in zwei variabeln schreiben
|
46 | unsigned char H_Data = Data;
|
47 | unsigned char L_Data = Data;
|
48 | //Löschen der 4 niederwertigen Bits bei H_Data
|
49 | H_Data &= 0x0F;
|
50 | //Löschen der 4 höherwertigen Bits von L_Data
|
51 | L_Data &= 0xF0;
|
52 | /*verschieben um 4 bits nach links
|
53 | 00001111 wird somit zu 11110000 */
|
54 | L_Data <<= 4;
|
55 | //Senden das Daten folgen
|
56 | SPI_Send(0xFA);
|
57 | //Senden der 4 höherwertigen Bits von H_Data
|
58 | SPI_Send(H_Data);
|
59 | //Senden der jetzt 4 höherwertigen Bits von L_Data
|
60 | SPI_Send(L_Data);
|
61 | }
|
62 |
|
63 | int main(void)
|
64 | {
|
65 |
|
66 | SPI_Init();
|
67 |
|
68 |
|
69 | _delay_ms(200);
|
70 | SendCommand(0x30);
|
71 | _delay_ms(50);
|
72 | SendCommand(0x30);
|
73 | _delay_ms(50);
|
74 | SendCommand(0x0F);
|
75 | _delay_ms(50);
|
76 | SendCommand(0x01);
|
77 | _delay_ms(50);
|
78 | SendCommand(0x06);
|
79 | _delay_ms(50);
|
80 |
|
81 | }
|