Hallo, mein µC ist ein ATmega128, im Moment ist nur ein HD44780 LCD im 4-Bit Modus dran. Leider startet mein kleines Programm Hallo Welt nur richtig, wenn der AVRISP MKII dran hängt. Wenn der nicht dran hängt, muß ich den Reset-Taster drücken. Die Reset Pin Beschaltung die ich auf der Platine vorgefunden habe: 1N4148 nach +5V 4k7 nach +5V 10n nach GND Habe jetzt 100k & 10µF drin, hat auch keine Besserung gebracht.
> 1N4148 nach +5V > 4k7 nach +5V > 10n nach GND So? 1N4148 4k7 Vcc 5V o----->|-----###---+---o RESET-Pin | GND o---------||-------+ 10n Die 1N4148 ist richtig herum eingesetzt?
Das Problem ist, dass Du das Display zu früh ansprichst, es ist dann noch nicht bereit Daten zu empfangen. Das hat mit dem Reset Pin ansich erstmal nichts zu tun. Wenn der MKII dran ist, führt der Controller nach ca 1/2 Sek. noch einen weiteren Reset durch. Dann ist auch das Display soweit. Warte mal einen Moment mit deinem Programmablauf zum start. (z.b. durch)
1 | _delay_ms(100); |
Dann klappts auch...
Fabian schrieb: > Warte mal einen Moment mit deinem Programmablauf zum start. (z.b. durch) > _delay_ms(100); > Dann klappts auch... 1. Ich hatte mir sowas schon gedacht und eine eigene Delay-Routine aufgerufen. Bringt aber leider auch nix. 2. was muss ich includen damit ich
1 | _delay_ms(100); |
benutzen kann?
Ein kleiner Bastler schrieb: > und eine eigene Delay-Routine lass mich raten, du hast eine große Schleife gebastelt, die der Optimizer (zu Recht) einfach wieder rausgeschmissen hat.
Klaus schrieb: > lass mich raten, du hast eine große Schleife gebastelt, die der > Optimizer (zu Recht) einfach wieder rausgeschmissen hat.
1 | void Pause(volatile unsigned long int i) |
2 | {
|
3 | for(;i;i--) |
4 | {
|
5 | asm volatile("NOP"); //1 |
6 | asm volatile("NOP"); //2 |
7 | asm volatile("NOP"); //3 |
8 | asm volatile("NOP"); //4 |
9 | asm volatile("NOP"); //5 |
10 | asm volatile("NOP"); //6 |
11 | asm volatile("NOP"); //7 |
12 | asm volatile("NOP"); //8 |
13 | }
|
14 | }
|
Nö
Tishima schrieb: > Hallo! > > Nimm mal die Diode ganz raus oder dreh sie um. Habe den Eindruck, des Fehler liegt woanders
1 | void LCD_Init() |
2 | {
|
3 | LCD_Instruction(40); //Function Set (4 bits) |
4 | LCD_Instruction(40); //Function Set (4 bits) |
5 | LCD_Instruction(40); //Function Set (4 bits) |
6 | LCD_Instruction(1); //Display clear |
7 | Pause(2000); |
8 | LCD_Instruction(2); //Cursor home |
9 | Pause(2000); |
10 | LCD_Instruction(6); //Entry mode (increment/display freeze) |
11 | LCD_Instruction(12); //Display on/off control (oder 14 !) |
12 | }
|
Hallo, wenn es wirklich ein HD44780 ist, stimmt da garnichts. Erstmal 50ms warten. 0x3 an die Datenleitungen legen E-Clock 5ms warten E-Clock 5ms warten E-Clock 5ms warten. Das sendet 3x 0x30 mit Pausen an das Display im 8-Bit-Mode! Die nicht angeschlossenen unteren 4 Bit werden vom Display ignoriert. Das ist der Software-Reset für das Display, einige 44870-kompatible haben eine interne Resetsteuerung, da kann man das theoretisch weglassen. 0x2 an die Displaydaten E-Clock Hier erfolgt die Umschaltung auf 4 Bit (immernoch im 8-Bit-Mode des Display, also nicht das untere Nibble auch senden... An jetzt sind wir im 4-Bit-Mode und ab jetzt müssen beide Nibble gesendet werden. 0x28 senden (bei 2-Zeilen-Display 0x01 Display löschen usw. usw. PS: die Wartezeiten sind aus einer Source von mir, die genauen stehen im Datenblatt des HD44780 Gruß aus Berlin Michael
Jetzt geht es!
1 | void LCD_Init() |
2 | {
|
3 | for(unsigned char n=3;n;n--) |
4 | {
|
5 | PORTE = (PORTE & 0x0F) | 0x30; |
6 | LCD_Load_puls(); |
7 | Pause(5000); |
8 | }
|
9 | |
10 | PORTE = (PORTE & 0x0F) | 0x20; |
11 | LCD_Load_puls(); |
12 | Pause(5000); |
13 | |
14 | LCD_Instruction(0x01); //Display clear |
15 | Pause(2000); |
16 | LCD_Instruction(0x02); //Cursor home |
17 | Pause(2000); |
18 | LCD_Instruction(0x06); //Entry mode (increment/display freeze) |
19 | LCD_Instruction(0x0C); //Display on/off control (oder 14 !) |
20 | }
|
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.