Forum: Mikrocontroller und Digitale Elektronik LCD Pins vertauscht


von Jack (Gast)


Lesenswert?

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?

von Wolle (Gast)


Lesenswert?

verKABELt bedeutet für mich, du hast LÖSBARE Verbindungen geschaffen. 
Warum korrigierst du das nicht?

von Alex W. (a20q90)


Lesenswert?

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!

von Wolle (Gast)


Lesenswert?

Alex W. schrieb:
> Wenn das Problem aber bei einer hergestellten PCB ist, so wird das nix!
Das hat er so aber nicht geschrieben.

von Sherlock Watson (Gast)


Lesenswert?

"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.

von Jack (Gast)


Lesenswert?

Hi, mit verkabelt meinte ich, dass es auf einer Platine fest aufgelötet 
ist.. vergessen zu sagen..

von Michael R. (mexman) Benutzerseite


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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?

von Sven Wagner (Gast)


Lesenswert?

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

von Jack (Gast)


Lesenswert?

Danke Lothar, dein Code funktionierte auf anhieb! Jetz hab ich auch 
verstanden wie es funktioniert.

von Jack (Gast)


Lesenswert?

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.

von mode (Gast)


Lesenswert?

Fuse für den Bootloader gesetzt und keinen Bootloader geflasht?

von Jack (Gast)


Lesenswert?

Quarz auf 64ms startup time hats gelößt!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jack schrieb:
> Danke Lothar, dein Code funktionierte auf anhieb!
Ja, so ein Glück aber auch...  ;-)

von spess53 (Gast)


Lesenswert?

Hi

>Quarz auf 64ms startup time hats gelößt!

Eher kaschiert. Deine Wartezeit vor der Initialisierung ist zu klein.

MfG Spess

von Peter D. (peda)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.