Pollin AVR-NET-IO und LCD TC1602E

OP #3045964
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.
Gast #3046007
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
OP #3051838
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.
OP #3052258
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.
OP #3053467
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.
Gast #3053563
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 ;)
Gast #3054107
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
OP #3054413
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.
Gast #3054448
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
OP #3054458
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren