Pollin AVR-NET-IO und LCD TC1602E

OP #3045964
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
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
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
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.
Gast
>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.
OP
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.
OP
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
Gast
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 ;)
OP
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??
Angehängte Dateien:
Gast
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
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
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
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.
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.