Hi, ich habe dummerweise mein LCD falsch verkabelt: DB4 an PA3 DB5 an PA2 DB6 an PA1 DB7 an PA0 µC ist ein Atmega8515 LCD hat einen HD44780 Controller also genau falsch herum... mein Problem ist jetzt das ich nicht weis wie ich das Programm ändern muss, dass es anders ausgegeben wird daher das LCD funktioniert und keine merkwürdigen Zeichen anzeigt. Als LCD ansteuerung benutze ich das Beispiel aus dem GCC Tutorial. // Sendet eine 4-bit Ausgabeoperation an das LCD static void lcd_out( uint8_t data ) { data &= 0xF0; // obere 4 Bit maskieren LCD_PORT &= ~(0xF0>>(4-LCD_DB)); // Maske löschen LCD_PORT |= (data>>(4-LCD_DB)); // Bits setzen lcd_enable(); } ich denke mal dort müsste man etwas verändern?
verKABELt bedeutet für mich, du hast LÖSBARE Verbindungen geschaffen. Warum korrigierst du das nicht?
Wolle schrieb: > verKABELt bedeutet für mich, du hast LÖSBARE Verbindungen geschaffen. > Warum korrigierst du das nicht? Wenn das Problem aber bei einer hergestellten PCB ist, so wird das nix!
Alex W. schrieb: > Wenn das Problem aber bei einer hergestellten PCB ist, so wird das nix! Das hat er so aber nicht geschrieben.
"35µ-flachverkabelt"? Kein Problem: Verkablungslayer quer zur Leitungsführung trennen & links und rechts davon längs schlitzen, so daß eine Zunge entsteht. Diese strecken, um 180° verwinden und wieder mit dem "Festland" verlöten.
Hi, mit verkabelt meinte ich, dass es auf einer Platine fest aufgelötet ist.. vergessen zu sagen..
Wolle schrieb: > verKABELt bedeutet für mich, du hast LÖSBARE Verbindungen geschaffen. > Warum korrigierst du das nicht? Weil´s leichter ist, wenn ihm jemand die Software korrigiert, als einen Loetkolben in die Hand zu nehmen ;-) Gruss Michael
Jack schrieb: > ich denke mal dort müsste man etwas verändern? Richtig. Du wirst jedes einzelne Bit per Handschlag verabschieden müssen, oder das Nibble umdrehen. Eine Suche im Forum bringt den Beitrag "Re: Wie drehe ich eine Bitreihenfolge um??" Daraus kannst du dann die oberen 4 Bits mit dieser Funktion umdrehen:
1 | unsigned char umkehr(unsigned char n){ |
2 | n=((n>>1)&0x50)|((n<<1)&0xa0); |
3 | n=((n>>2)&0x30)|((n<<2)&0xc0); |
4 | return n; |
5 | }
|
Also sieht deine Funktion so aus:
1 | static void lcd_out( uint8_t data ) |
2 | {
|
3 | |
4 | data &= 0xF0; // obere 4 Bit maskieren |
5 | data =((data >>1)&0x50)|((data <<1)&0xa0); // Bits tauschen |
6 | data =((data >>2)&0x30)|((data <<2)&0xc0); |
7 | |
8 | LCD_PORT &= ~(0xF0>>(4-LCD_DB)); // Maske löschen |
9 | LCD_PORT |= (data>>(4-LCD_DB)); // Bits setzen |
10 | lcd_enable(); |
11 | }
|
Alex W. schrieb: > Wenn das Problem aber bei einer hergestellten PCB ist, so wird das nix! Fädeldraht?
Jack schrieb: > ich denke mal dort müsste man etwas verändern? Ja. Bau doch testweise erstmal sowas ein: http://graphics.stanford.edu/~seander/bithacks.html#BitReverseObvious Grüße Sven
Danke Lothar, dein Code funktionierte auf anhieb! Jetz hab ich auch verstanden wie es funktioniert.
Habe jetzt ein merkwürdiges neues Problem.. wenn ich den AVR frisch Programmiert hab, dann Zeigt das LCD etwas an. Sobald ich den Strom wegnehme und wieder einschalte tauchen nur Fragezeichen auf.
Hi
>Quarz auf 64ms startup time hats gelößt!
Eher kaschiert. Deine Wartezeit vor der Initialisierung ist zu klein.
MfG Spess
spess53 schrieb: >>Quarz auf 64ms startup time hats gelößt! > > Eher kaschiert. Deine Wartezeit vor der Initialisierung ist zu klein. Nö. Quarze haben eine hohe Güte und brauchen daher lange zum Anschwingen. Für Quarze daher immer die längste Resetzeit nehmen! Sonst funktioniert das Reset nicht und der Programmcounter startet irgendwo, statt bei 0x0000. Peter
Hi >Nö. >Quarze haben eine hohe Güte und brauchen daher lange zum Anschwingen. Das ist mir bekannt. Hier liegt es aber daran, das das Display noch langsamer als der Controller startet. Die notwendige Wartezeit sollte Bestandteil des Programms (Initialisierung) und nicht von Controllereinstellungen abhängig sein. MfG Spess
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.