Guten Tag! Ich benutze den AVR-NET-IO mit einem ATMega644, habe die Software von U.Radig/G. Menke erfolgreich angepasst (Die beiden haben einen Orden verdient - wenn ich sowas denn verteilen könnte!) Nun möchte ich ein LCD anschließen (nicht: "LCD-Display") und arbeite das Tutorial durch. Ich bin davon ausgegangen, dass ich den 10-poligen EXT-Wannenstecker mit dem Display verbinde, finde laut Pollin-Datenblatt fürs AVR-NET-IO PD0 und PD1 hier nicht. Offenbar sind sie für den seriellen Anschluss verwendet. Ich würde nun die Sourcen lcd-routines.h und lcd-routines.c so abändern: Statt // LCD DB4-DB7 <--> PORTD Bit PD0-PD3 #define LCD_PORT PORTD #define LCD_DDR DDRD #define LCD_DB PD0 // LCD RS <--> PORTD Bit PD4 (RS: 1=Data, 0=Command) #define LCD_RS PD4 // LCD EN <--> PORTD Bit PD5 (EN: 1-Impuls für Daten) #define LCD_EN PD5 dann also: // LCD DB4-DB7 <--> PORTD Bit PD4-PD7 #define LCD_PORT PORTD #define LCD_DDR DDRD #define LCD_DB PD4 // LCD RS <--> PORTD Bit PD2 (RS: 1=Data, 0=Command) #define LCD_RS PD2 // LCD EN <--> PORTD Bit PD3 (EN: 1-Impuls für Daten) #define LCD_EN PD3 Reichen diese Änderungen aus? Funktionieren dann die folgenden Bitschiebereien auch noch? 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(); } Dass beim TC1602E die ersten 3 Pins vertauscht sind, weiß ich. Gibt es sonst noch was zu beachten? Danke für Eure Hilfe! Bernd M.
Pollin-konform wäre folgende Verdrahtung: EXT LCD PORT ------------------------------ 1 --> Pin 5 RW PORTD2 2 --> Pin 4 RS PORTD3 3 --> Pin 11 DB4 PORTD4 4 --> Pin 12 DB5 PORTD5 5 --> Pin 13 DB6 PORTD6 6 --> Pin 14 DB7 PORTD7 7 --> Pin 6 E PORTB0 8 --> Backlight PORTB3 ACHTUNG: Bei Pollin nicht vorgesehen!!! 9 --> Pin 1 GND Bitte mit LCD-Datenblatt abgleichen 10 --> Pin 2 +5V manche LCDs haben diese Pins vertauscht
Danke, ok - das ist die Verdrahtung. Ich meine nun aber die Software: Reicht es, einfach die #defines für LCD_xy abzuändern? Danke Bernd M.
Hallo zusammen, ich habe zwar schon viele Softwareprojekte realisiert, auch und besonders beruflich; mit dem AVR-NET-IO habe ich mich inzwischen auch angefreundet (ist ja auch Software), aber jetzt geht's ans Löten. Und da merke ich, dass ich mich bei der Verbindung vom μC (EXT) zum LED etwas schwer tue. Die Pfostenbuchse ist am Flachbandkabel, aber jetzt muss das andere Ende ans LCD. Meine Befürchtung ist: Wenn ich es nicht richtig mache, gibt es später einen Wackelkontakt, oder eine der Adern bricht. Wer kann mir Tipps geben? Oder ist Löten hier gar nicht angebracht? Sollte ich einen Wannenstecker verwenden? Aber wie bekomme ich die Adern korrekt überkreuzt? Wie gesagt: Tipps sind für mich absoluten Hardware-Laien sehr willkommen? Danke schon mal im Voraus! Bernd M.
Das Löten habe ich nun hinter mir - dank freundlichen Tipps aus diesem Forum: [[Beitrag "Pollin AVR-NET-IO und LCD TC1602E verbinden"]]. Da ich wenig Übung habe, hatte ich mehr Bammel davor als nötig. Die Sourcen habe ich aus dem Tutorial kopiert: [[http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung]] und wie oben die Port-Bits so abgeändert:
1 | EXT LCD PORT |
2 | ------------------------------ |
3 | 1 --> Pin 5 RW PORTD2 |
4 | 2 --> Pin 4 RS PORTD3 |
5 | 3 --> Pin 11 DB4 PORTD4 |
6 | 4 --> Pin 12 DB5 PORTD5 |
7 | 5 --> Pin 13 DB6 PORTD6 |
8 | 6 --> Pin 14 DB7 PORTD7 |
9 | 7 --> Pin 6 E PORTB0 |
Bei GND und +5V habe ich aufgepasst und das Datenblatt berücksichtigt. In lcd-routines.h habe ich nur die folgenden Zeilen geändert:
1 | // LCD DB4-DB7 <--> PORTD Bit PD4-PD7
|
2 | #define LCD_PORT PORTD
|
3 | #define LCD_DDR DDRD
|
4 | #define LCD_DB PD4
|
5 | |
6 | // LCD RS <--> PORTD Bit PD2 (RS: 1=Data, 0=Command)
|
7 | #define LCD_RS PD2
|
8 | |
9 | // LCD EN <--> PORTD Bit PD3 (EN: 1-Impuls für Daten)
|
10 | #define LCD_EN PD3
|
Ich rufe nun in der Software nacheinander:
1 | lcd_init(); |
2 | // Text in einzelnen Zeichen ausgeben
|
3 | lcd_data( 'T' ); |
4 | lcd_data( 'e' ); |
5 | lcd_data( 's' ); |
6 | lcd_data( 't' ); |
7 | |
8 | // Die Ausgabemarke in die 2te Zeile setzen
|
9 | lcd_setcursor( 0, 2 ); |
10 | |
11 | // erneut Text ausgeben, aber diesmal komfortabler als String
|
12 | lcd_string("Hello World!"); |
Das lcd_init geschieht nach der Initialisierung der seriellen Schnittstelle; denn da werden PD0 und PD1 verwendet. Es erscheinen aber nur schwarze Kästchen in der oberen Zeile. Irgendwann zwischendrin flackert das Display einmal. Die Kontrastspannung habe ich variiert: Die Kästchen bleiben, wechseln nur den Kontrast. Im Forum habe ich gefunden, dass da offernsichtlich was bei der Initialisierung nicht stimmt. Es wäre schön, wenn mir da jemand weiterhelfen könnte. Ach ja: Ich habe den ATMega644 eingebaut.
Kann mir jemand Tipps geben, an welchen Pins man was massen könnte/sollte?
was immer in der lcd_init() steht - es scheint nicht richtig zu sein.
Nimm doch einfach was fertiges :-) http://son.ffdf-clan.de/?path=forumsthread&threadid=1237 Da ist alles einstellbar was du brauchst und willst und mit dem Display sogar getestet. Basiert auch auf Ulrich Radigs Software.
>und wie oben die Port-Bits so abgeändert:
1 --> Pin 5 RW PORTD2
2 --> Pin 4 RS PORTD3
#define LCD_RS PD2
7 --> Pin 6 E PORTB0
#define LCD_EN PD3
Ja, nö, ich weiss nicht.
Chris schrieb: > Nimm doch einfach was fertiges :-) > > http://son.ffdf-clan.de/?path=forumsthread&threadid=1237 > Danke für den Link! Da werde ich mal weiter forschen.
Der Balken im LCD des anderen schrieb: > was immer in der lcd_init() steht Das steht hier: [[http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung]] Wie beschrieben, habe ich die Ports abgeändert.
schreib dir die Ulrich radig software um und verwende ein SPI tft ...
Bingo! Jetzt läuft es m mit den Sourcen aus [[http://son.ffdf-clan.de/?path=forumsthread&threadid=1237]] Wie geagt, Ulrich Radig hat einen Orden verdient. Ich habe mir das ganze Projekt heruntergeladen und die LCD-Routinen von ihm verwendet. Da ist ja für alle Besonderheiten vorgesorgt, auch für die etwas andere Pinbelegung des Pollin-LCD. Die 2 bis 3 Anpassungen in der Tutorial-Software reichten nicht. Nun werde ich ALLE Radig-Sourcen aufheben und nicht (wie letztes Mal) die wegschmeißen, von denen ich meinte, ich würde sie nicht mehr brauchen. Danke an alle, die sich auf meine dummen Fragen eingelassen haben.
Nachtrag: U.a. ist ja in dieser Konfiguration PORTB0 an EXT Pin 7 gelegt, was in der Tutorial-Software nicht berücksichtigt wird. U.Radig tut das:
1 | #define LCD_Port2_DDR DDRB //Ext. Port am AVR-NET-IO
|
2 | #define LCD_Port2_Write PORTB
|
Bernd M. schrieb: > Wie geagt, Ulrich Radig hat einen Orden verdient. Ich habe mir das ganze > Projekt heruntergeladen und die LCD-Routinen von ihm verwendet. Da ist > ja für alle Besonderheiten vorgesorgt, auch für die etwas andere > Pinbelegung des Pollin-LCD. Die 2 bis 3 Anpassungen in der > Tutorial-Software reichten nicht. Mit den Besonderheiten hat aber Ulrich Radig nichts mehr zu tun ;)
Chris schrieb: > Mit den Besonderheiten hat aber Ulrich Radig nichts mehr zu tun ;) Dann gehört der Orden dem, der das geschrieben hat.
Nun habe ich natürlich das schon bekannte Problem mit den Umlauten, das offenbar lösbar ist. Ich habe hier schon was gefunden: [[Beitrag "LCD ohne Umlaute?"]] Aber der Zeichensatz vom HD44780 scheint hier nicht der richtige zu sein. Kann mir jemand mit einem passenden Link weiterhelfen?
Ich habe die mühsame Tour gewählt und mir mal alle Zeichen ausgeben lassen: ä -> 0xe1 ö -> 0xef ü -> 0xf5 ß -> 0xe2 Großbuchstaben habe ich nicht gefunden, und das ß ist eher ein Beta. Damit kann ich leben.
Hi >Ich habe die mühsame Tour gewählt und mir mal alle Zeichen ausgeben >lassen: Das sind die üblichen Codes bei HD44780 (kompatiblen) Displaycontroller. MfG Spess
Der Zeichensatz scheint nicht übereinzustimmen: empirisch habe ich für ä 0xe1 herausgefunden, nach der Tabelle wäre das á. Das 0xe4, das nach Tabelle das ä sein sollte, ist dagegen ein μ. (Oder habe ich "Upper 4 bits" und "Lower 4 bits" falsch herum gelesen??
Hi
>Der Zeichensatz scheint nicht übereinzustimmen:
Den HD44780 gibt es mit verschiedenen Zeichensätzen. Der Übliche ist ROM
Code A00, der auch bei den meisten kompatiblen zu finden ist. Auf dem
Bild ist der ROM Code A02. Der ist mir noch nicht in Natura
untergekommen.
MfG Spess
Ziemlich viel Japanisch... Sicher kann ich auf den anderen (A02) umschalten - weiß jemand wie? Der hat ja viel mehr europäische Zeichen, Ä, Ö, Ü und ñ.
Das Code-Umschalten scheint nicht zu gehen (man fragt sich, was das dann soll...) Wo es jetzt so schön geht, noch was: Ich möchte nun noch die Hintergrundbeleuchtung schalten können (Am LCD Pins 15,16). Bis jetzt ist EXT 8 noch nicht genutzt (PB3). Kann ich den dafür benutzen? Laut Schaltplan für AVR-NET-IO wird der nicht weiter benutzt.
Hi >Das Code-Umschalten scheint nicht zu gehen Geht auch nicht. Der ist fest im ROM. >(man fragt sich, was das dann soll...) Das entscheidet der Hersteller des Displays, welchen Controller er einsetzt. Aber du hast ja noch die Möglichkeit acht eigene Zeichen zu kreieren. > Bis jetzt ist EXT 8 noch nicht genutzt (PB3). Kann ich den >dafür benutzen? Laut Schaltplan für AVR-NET-IO wird der nicht weiter >benutzt. Warum nicht, wenn er frei ist. Du brauchst aber noch einen Transistor. Für das Backlight kann ein Pin nicht genug Strom liefern. MfG Spess
Ok, 8 Zeichen, das müsste für Ä, Ö und Ü reichen und für noch ein paar Smilies. Und danke für den Tipp mit dem Transistor für die Hintergrundbeleuchtung. Weißt Du zufällig, wieviel Strom die zieht? Übrigens ist der Poti für den Kontrast unnötig. Der ist immer am Anschlag.
Hi
>Weißt Du zufällig, wieviel Strom die zieht?
Zufällig nicht. Im Datenblatt steht etwas von 100mA. Aber bitte den
Vorwiderstand für die Hintergrundbeleuchtung nicht vergessen.
MfG Spess
Zur Hintergrundbeleuchtung: Spess53 schrieb: > Warum nicht, wenn er frei ist. Jetzt sehe ich, dass die Hintergrundbeleuchtung im Code schon vorgesehen ist, auch für Pollin über EXT. Komfortabel!
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.