Hallo,
Die Problemchen gehen mir nicht aus... ;-)
Ich hatte die Hintergrundbeleuchtung zuerst fest an 5V angeschlossen, da
mir das aber irgendwann zu grell wurde habe ich mir gedacht, wäre doch
nett, diese über ein PWM szeuern zu können...
deshalb habe ich sie flux auf PB1 gelötet.
leider mag das nicht so recht funktionieren...
1 | #include </usr/lib/avr/include/avr/io.h>
|
2 | #include </usr/lib/avr/include/avr/iom8.h>
|
3 | #include <util/delay.h>
|
4 | #include <string.h>
|
5 |
|
6 | void SPI_MasterInit(void)
|
7 | {
|
8 | /* Set MOSI and SCK output, all others input */
|
Hier kommts...
1 | DDRB = (1<<DDB3)|(1<<DDB5)|(1<<DDB6)|(1<<DDB7); // DDB6 und DDB7 wegen der Display-verschaltung.
|
2 | // DDRB = (1<<DDB1)|(1<<DDB3)|(1<<DDB5)|(1<<DDB6)|(1<<DDB7); // DDB6 und DDB7 wegen der Display-verschaltung.
|
Wenn ich die momentan auskommentierte Zeile "Aktiviere" die andere
natürlich "deaktiviere" funktioniert die initialisierung nicht mehr...
1 | /* Enable SPI, Master, set clock rate fck/16 */
|
2 | SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
|
3 | }
|
4 |
|
5 | void SPI_MasterTransmit(char cData)
|
6 | {
|
7 | /* Start transmission */
|
8 | SPDR = cData;
|
9 | /* Wait for transmission complete */
|
10 | while (!(SPSR & (1<<SPIF)));
|
11 | }
|
12 |
|
13 | void init_LCD(void)
|
14 | {
|
15 | PORTB = (0<<DDB7);
|
16 | _delay_ms(200); //Nicht kleiner als 100ms da sonst keine Funkion des LCD!!!
|
17 | SPI_MasterInit();
|
18 | _delay_ms(10);
|
19 | SPI_MasterTransmit(0x39);
|
20 | _delay_ms(10);
|
21 | SPI_MasterTransmit(0x1D);
|
22 | _delay_ms(10);
|
23 | SPI_MasterTransmit(0x50);
|
24 | _delay_ms(10);
|
25 | SPI_MasterTransmit(0x6C);
|
26 | _delay_ms(10);
|
27 | SPI_MasterTransmit(0x7C);
|
28 | _delay_ms(10);
|
29 | SPI_MasterTransmit(0x38);
|
30 | _delay_ms(10);
|
31 | SPI_MasterTransmit(0x0C);
|
32 | _delay_ms(10);
|
33 | SPI_MasterTransmit(0x01);
|
34 | _delay_ms(50);
|
35 | }
|
36 |
|
37 | void print_LCD(char* string)
|
38 | {
|
39 | int i;
|
40 | for (i=0;i<48;i++) // Schreiben von 3x16 = 48 Zeichen auf das LCD
|
41 | {
|
42 | PORTB = (1 << DDB6); // high
|
43 | if (i<strlen(string)) SPI_MasterTransmit(string[i]); // Schreiben des Strings aufs LCD
|
44 | else SPI_MasterTransmit(' '); // Auffüllen der nicht genutzten Zeichen mit ' '
|
45 | _delay_ms(2);
|
46 | PORTB &= ~(1 << DDB6); //low
|
47 | asm volatile ("nop");
|
48 | PORTB = (1 << DDB6); // high
|
49 | }
|
50 | }
|
51 |
|
52 | int main(void)
|
53 | {
|
54 | init_LCD();
|
55 | char* string1 = "Hallo Welt :-)";
|
56 | char* string2 = "Hallo Welt :-|";
|
57 | char* string3 = "Hallo Welt :-?";
|
58 | char* string4 = "Hallo Welt :-(";
|
59 |
|
60 | while (1)
|
61 | {
|
62 | print_LCD(string1);
|
63 | _delay_ms(50);
|
64 | print_LCD(string2);
|
65 | _delay_ms(50);
|
66 | print_LCD(string3);
|
67 | _delay_ms(50);
|
68 | print_LCD(string4);
|
69 | _delay_ms(50);
|
70 | }
|
71 | return 0;
|
72 | }
|
hat jemand eine Idee dazu?