Forum: Mikrocontroller und Digitale Elektronik Pollin AVR-NET-IO und LCD TC1602E


von Bernd M. (bernd_m67)


Lesenswert?

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.

von Chris (Gast)


Lesenswert?

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

von Bernd M. (bernd_m67)


Lesenswert?

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.

von Bernd M. (bernd_m67)


Lesenswert?

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.

von Bernd M. (bernd_m67)


Lesenswert?

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.

von Bernd M. (bernd_m67)


Lesenswert?

Kann mir jemand Tipps geben, an welchen Pins man was massen 
könnte/sollte?

von Der Balken im LCD des anderen (Gast)


Lesenswert?

was immer in der lcd_init() steht - es scheint nicht richtig zu sein.

von Chris (Gast)


Lesenswert?

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.

von holger (Gast)


Lesenswert?

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

von Bernd M. (bernd_m67)


Lesenswert?

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.

von Bernd M. (bernd_m67)


Lesenswert?

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.

von futoaschsoft (Gast)


Lesenswert?

schreib dir die Ulrich radig software um und verwende ein SPI tft ...

von Bernd M. (bernd_m67)


Lesenswert?

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.

von Bernd M. (bernd_m67)


Lesenswert?

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

von Chris (Gast)


Lesenswert?

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 ;)

von Bernd M. (bernd_m67)


Lesenswert?

Chris schrieb:

> Mit den Besonderheiten hat aber Ulrich Radig nichts mehr zu tun ;)

Dann gehört der Orden dem, der das geschrieben hat.

von Bernd M. (bernd_m67)


Lesenswert?

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?

von Bernd M. (bernd_m67)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

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

von Bernd M. (bernd_m67)


Angehängte Dateien:

Lesenswert?

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??

von spess53 (Gast)


Lesenswert?

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

von Bernd M. (bernd_m67)


Lesenswert?

Ziemlich viel Japanisch...

Sicher kann ich auf den anderen (A02) umschalten - weiß jemand wie?
Der hat ja viel mehr europäische Zeichen, Ä, Ö, Ü und ñ.

von Bernd M. (bernd_m67)


Lesenswert?

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.

von Spess53 (Gast)


Lesenswert?

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

von Bernd M. (bernd_m67)


Lesenswert?

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.

von Spess53 (Gast)


Lesenswert?

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

von Bernd M. (bernd_m67)


Lesenswert?

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