Forum: Projekte & Code lib für Pollin LCD (WINTEK2704)


von Stefan Seegel (Gast)


Angehängte Dateien:

Lesenswert?

Hallo!

Hier ist mal meine Implementierung für das berühmte 27x4 Zeichen LCD
von www.pollin.de (4,95 EUR). Die Lib ist nach dem Vorbild von der
mittlerweile "kultverdächtigen" Lib von Peter Fleury aufgebaut.

Die Lib entscheidet größtenteils selber welcher der beiden Controller
angesprochen werden muss.

Einschränkungen:
-Die 4 Datenleitungen müssen am selben Port hängen.
-Die 4 Steuerleitungen (E1, E2, RS, RW) müssen zusammen am gleichen
Port wie die Datenleitungen oder zusammen an einem anderen Port hängen

Viel Spaß beim testen,

Stefan

von Peter K. (klaus77)


Lesenswert?

Good Job !

Funktioniert bei mir sehr gut, allerdings wäre etwas mehr Dokumentation
nicht schlecht. Insbesondere was die Funktionen so machen.

Ich habe bei mir noch #define F_CPU mit aufgenommen, das fehlte im
Zip-File.

Gotxy funktioniert nicht so richtig, teilweise bekomme ich die Worte
rückwärts in der dritten Zeile :-)

Danke für die Lib,
Peter

von Stefan Seegel (Gast)


Lesenswert?

Hi,

das define (F_CPU) steht bei mir immer im makefile, damit ich's gleich
in allen Modulen habe. Ein Fehler in der gotoxy-Funktion ist mir noch
nicht aufgefallen, vielleicht kannst du näheres dazu sagen.
Was näher Dokumentiert werden sollte weiß ich nicht genau, ist immer
etwas problematisch wenn man das Zeug selber verbrochen hat ;-)

Stefan

von Frank (Gast)


Lesenswert?

Hallo

Ich benutze auch diese Routine für mein Pollin 4x27.
Wie kann man mit dem Befehl lcd_puts einen wert auf dem LCD anzigen
lassen?
Also lcd_puts("wert: %i", ADCWERT); gibt immer die Fehlermeldung
to many arguments for function lcd_puts
Wieso???(Anfänger)
Frank

von Lupin (Gast)


Lesenswert?

lcd_puts ist nicht printf...

char buffer[24];
printf( buffer, "wert: %i", ADCWERT);
lcd_puts(buffer);

So ungefähr müsste es gehen, aber ich weiss nicht wie es mit printf
beim AVR aussieht, das nimmt bestimmt ORDENTLICH Platz weg, es gibt
aber alternative printf funktionen.

Oder du machst es mit itoa:

char buffer[] = "wert: XXXX";
itoa(buffer+6,ADCWERT);
lcd_puts(buffer);

Ich weiss nicht ob lcd_puts einen absatz macht oder so, wenn nicht wäre
es so wohl besser:

char buffer[4];
lcd_puts("wert: ");
itoa(buffer,ADCWERT);
lcd_puts(buffer);

Ich hab jetzt mal angenommen ADCWERT ist im 4 stelligen bereich (bei 10
bit genauigkeit ist das ja so). Hab jetzt auch nicht so die super ahnung
(nicht nachgeschaut). Alle Angaben ohne Gewehr ;)

von Frank (Gast)


Lesenswert?

Hallo
Danke für die Antwort, aber er meckert jetzt bei itoa!
to few arguments to function itoa
Bei allen ítoa Vorschlägen. Und printf gibt mir nichts auf dem LCD
aus.
Wahrscheinlich nur auf die serielle.
Frank

von Stefan (Gast)


Lesenswert?

itoa() hat normalerweise noch einen dritten Parameter radix, um das
Zahlensystem festzulegen (Dezimal 10, Hexadezimal 16, ...)

Und benutze statt printf() sprintf(), um in einen Puffer zu schreiben.

von Frank J. (frank5)


Lesenswert?

Hallo
Aber er meckert ja das zu viele Arguments sind????
Sprintf schreibt er wert: 1.Er zeigt nicht den adcwert?
Frank

von Wesserbisser (Gast)


Lesenswert?

"too few"

heißt zu wenig, nicht zu viele!

Falls zu WinAVR installiert hast befindet sich auf deinem Rechner eine
Doku, in der u.a. itoa dokumentiert ist. Ansonsten -> google, da finden
sich unendlich viele Suchergebnisse zu itoa!

Ich

von Enor (Gast)


Lesenswert?

Hi Jungs,
bin gerade in die Welt des Mikrocontroller eingestiegen -so viel zur
meiner geschichte-.

Das Problem was ich habe ist, wenn ich make all mache gibt er mir
folgende Fehler Meldung aus:C:\Dokumente und
Einstellungen\Administrator.WINDOWSPC.002\Eigene Dateien\C
atmel\Display/main.c:12: undefined reference to `lcd_init'

welchen  Fehler mache. Das Einziege was ich verändert habe ist die PIN
Konfiguration sonst nichts. Also müsste es Funktionieren

von Enor (Gast)


Lesenswert?

hat sich schon erledigt

von Rudi (Gast)


Lesenswert?

Alter Thread, neu genutzt...

Ich frage mich, wie jetzt das Display an welchen Port muss...

Bin noch bei den erten Schritten und kann nicht ersehen an welchen Port 
- Pinn welcher Displayanschluss kommt.

Kann mir da einer helfen???

Gruß
Rudi

von Pete (Gast)


Lesenswert?

Schau mal in die Lib von Stefan Seegel (siehe oben). Die 
Anschlussbelegung an den AVR ist in der Header-Datei *.h erklärt.

Du brauchst zwei Ports (z.B. C und D).

Die Anschlussbelegung am Display steht in der Doku unter pollin.de

von Rudi (Gast)


Lesenswert?

Super, Danke.

DA habe ich nicht gekuckt.

Gruß

Rudi

von Stefan M. (interceptor)


Lesenswert?

Hallo Leute

Ich hänge mich hier mal dran.

Ich habe auch so ein Display von Pollin.

Leider funktioniert das Beispiel von Stefan bei mir nicht.

Ich habe das Display komplett am Port C angeschlossen.

Erst hatte ich mich mit den Anschlüssen vertan.

C0 -> D0
C1 -> D1
C2 -> D2
C3 -> D3
C4 -> RW
C5 -> RS
C6 -> E1
C7 -> E2

Mittlerweile habe ich dann die Datenanschlüsse auf die oberen Bits am 
Display umgelegt.

Bei der ersten Konfiguration zeigte es nur in Zeile 1 und 3 einen 
Balken.

Jetzt, nach dem Umlegen der Datenbits zeigt es in Zeile 1 einen Balken 
und in Zeile 3 + 4 auch, allerdings die unteren beiden in halber 
Intensität.

Ich habe die Vermutung das es an dem STK 500 liegt.

Kann mir jemend helfen ?

Ich komme da einfach nicht weiter.

Danke im voraus

Stefan

von Pete K. (pete77)


Lesenswert?

Also die Lib funktioniert. Schaltplan ? Code ?
Gib mal mehr Infos.

P.S.: Das hier ist die Codesammlung ...

von Stefan M. (interceptor)


Lesenswert?

Pete K. wrote:
> Also die Lib funktioniert. Schaltplan ? Code ?
> Gib mal mehr Infos.
>
> P.S.: Das hier ist die Codesammlung ...

Hallo Pete

Du hast Recht. Ich hatte nach dem Display gesucht und nicht darauf 
geachtet wo ich bin.

Ich mache ein neues Thema auf in µC ...

von Thorsten (Gast)


Lesenswert?

<Glaskugelmode>
Port C? -> JTAG Fuse
</Glaskugelmode>

von Stefan M. (interceptor)


Lesenswert?

Thorsten wrote:
> <Glaskugelmode>
> Port C? -> JTAG Fuse
> </Glaskugelmode>

Nein haben wir schon geklärt.

Auch wenn die JTAG Fuse nicht gesetzt ist, funktioniert es nicht.

Alles weitere dazu siehe 
[[Beitrag "Re: Probleme mit Wintek 2704 am STK500"]]

von Dieter E. (netdieter) Benutzerseite


Lesenswert?

Ich habe das LCD von Pollin und folgende Konfiguration:


#define LCD_DATA_PORT    PORTA  //Port on which the 4 LCD datapins are 
connected to
#define LCD_DATA_OFFSET    0  //Offset for data pins (e.g. 0 = 
PIN0..PIN3, 2 = PIN2..PIN5)
#define LCD_CTRL_PORT    PORTA  //PORT on which E1, E2, RS and RW are 
connected to
#define LCD_PIN_RS      4
#define LCD_PIN_RW      5
#define LCD_PIN_E1      6
#define LCD_PIN_E2      7


Aber ich kriege nur in Zeile 3 den Text:
4. Zeile Mitte
Die erste Zeile zeigt nur den Initialbalken.

Ich hab bereits alle Leitungen geprüft und finde den Fehler nicht.

Das Teil läuft auf einem ATMega32.

Hat jemand nen Tip?

Gruß
Dieter

von Werner B. (werner-b)


Lesenswert?

Leitung E1 (und E2) prüfen.

von Pete K. (pete77)


Lesenswert?

Bitte Schaltplan und Code komplett posten.

von Dieter E. (netdieter) Benutzerseite


Lesenswert?

Ich habe das Problem gelöst.
Es war wohl ein Kontaktproblem beim Flachbandpfosten.
Einmal mit der Zange drauf gedrückt und plötzlich gings.

Leider ist der im Topic überstellte Source relativ wenig dokumentiert.
Unter anderem zeigt das Testprogramm noch eine Schwäche.

Die Funktion  lcd_gotoxy(3, 6) scheint noch nicht ausgereift zu sein, 
denn der Text, der offensichtlich in Zeile 4 erscheinen sollte, 
erscheint in Zeile 3.
Eine Korrektur auf lcd_gotoxy(3, 7) löst das Problem.
Allerdings ist mir nicht klar was die y Koordinate soll, das das Display 
nur 4 Zeilen hat.

Wenn ich mal etwas Muse habe werde ich die Lib überarbeiten und 
Dokumentieren.

Falls noch jemand an der Lib interessiert ist, dann könnte man das z.B. 
via Sourceforge CVS als Mini-Projekt realisieren.

Gruß
Dieter

von Dieter E. (netdieter) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ich hab mal den Code etwas überarbeitet und kommentiert.(Nur das was ich 
gemacht habe)
Dir Funktion lcd_gotoxy wurde ersetz und jetzt läufts reibungslos.

Meine Tests wurden mit einem ATMga32 durch geführt.

Ich hoffe ich kann jemanden mit ähnlichen Problemen helfen.

Gruß
Dieter

von Andreas L. (andreasl)


Lesenswert?

Hallo, ich habe diese lib auf einem ATMega 32 installieren wollen. 
Benutze dazu WinAVR20080610 / AVRStudio 4.13. Ich bekomme folgende 
Fehlermeldung: ../../../../../Desktop/AVR/wintek/wintek2704.c: In 
function 'lcd_waitbusy':
und: ../../../../../Desktop/AVR/wintek/wintek2704.c:116: error: 'F_CPU' 
undeclared (first use in this function)
und: ../../../../../Desktop/AVR/wintek/wintek2704.c:116: error: (Each 
undeclared identifier is reported only once
und: ../../../../../Desktop/AVR/wintek/wintek2704.c:116: error: for each 
function it appears in.) und: 
../../../../../Desktop/AVR/wintek/wintek2704.c: In function 
'init_controller': und: 
../../../../../Desktop/AVR/wintek/wintek2704.c:281: error: 'F_CPU' 
undeclared (first use in this function) und: 
../../../../../Desktop/AVR/wintek/wintek2704.c: In function 'lcd_init': 
und: ../../../../../Desktop/AVR/wintek/wintek2704.c:319: error: 'F_CPU' 
undeclared (first use in this function)


Was kann ich tun? Ich kann dafür keinen Grund entdecken.

von Pete K. (pete77)


Lesenswert?

1.) Englisch lernen, um die Fehlermeldungen lesen zu können.
2.) F_CPU definieren. Das ist der Takt, mit dem der µC läuft. Wird 
meistens im Makefile deklariert. Bei AVRStudio in den Project Settings. 
Oder im Programm mit #define F_CPU 16000000  (hier z.B. 16Mhz)

von Andreas L. (andreasl)


Lesenswert?

Pete K. wrote:
> 1.) Englisch lernen, um die Fehlermeldungen lesen zu können.
> 2.) F_CPU definieren. Das ist der Takt, mit dem der µC läuft. Wird
> meistens im Makefile deklariert. Bei AVRStudio in den Project Settings.
> Oder im Programm mit #define F_CPU 16000000  (hier z.B. 16Mhz)


zu 1 da lerne ich gerne noch dazu

zu 2 ausschnitt aus der Main.c
1
#ifndef F_CPU
2
/* In neueren Version der WinAVR/Mfile Makefile-Vorlage kann
3
   F_CPU im Makefile definiert werden, eine nochmalige Definition
4
   hier wuerde zu einer Compilerwarnung fuehren. Daher "Schutz" durch
5
   #ifndef/#endif
6
7
   Dieser "Schutz" kann zu Debugsessions führen, wenn AVRStudio
8
   verwendet wird und dort eine andere, nicht zur Hardware passende
9
   Taktrate eingestellt ist: Dann wird die folgende Definition
10
   nicht verwendet, sondern stattdessen der Defaultwert (8 MHz?)
11
   von AVRStudio - daher Ausgabe einer Warnung falls F_CPU
12
   noch nicht definiert: */
13
#warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 16000000"
14
#define F_CPU 16000000UL    // Systemtakt in Hz - Definition als unsigned long beachten >> Ohne ergeben Fehler in der Berechnung
15
#endif
16
17
#include <stdio.h>
18
#include <stdint.h>
19
#include <avr/io.h>
20
#include <util/delay.h>
21
22
#include "wintek2704.h"

Ist doch richtig eingetragen. Bei anderen gehts doch! Das Projekt habe 
ich neu angelegt mit AVRStudio, hat schon etliche male mit anderen Code 
gut geklappt. Ich  denke ich werd F_CPU das mal rausnehmen (//) aus der 
Main.c
Probe mach ich heute abend zu hause
Gruß und Danke
Andreas

von Pete K. (pete77)


Lesenswert?

Wenn es nur in main.c deklariert ist, dann kann der Precompiler es beim 
Übersetzen der wintek2704.h bzw. wintek2704.c nicht finden. Daher die 
Fehlermeldungen.
Der Compiler übersetzt jedes File separat, daher ist eine Deklaration im 
Makefile sinnvoller.

Wenn Du AVRStudio benutzt, dann kann der ganze Krempel mit F_CPU aus den 
Dateien. In den Properties zu dem Projekt wird dann der Takt global 
eingetragen.

von Andreas L. (andreasl)


Lesenswert?

Hallo, nachdem ich die F_CPU herausgenommen habe funzt es. Danke für 
Deine Hilfe. Es gibt noch ein paar Einstellungen für den Mega32 die ich 
noch nicht entdeckt hatte, (ich probiere noch sehr viel aus mit dem 
Gespann AVRStudio / AVRGGC und bin noch ein bischen unsicher im Umgang) 
und bisher mit meine LEDs und schaltern nicht zum tragen kammen.

Gruß
Andreas

von Alexander W. (Gast)


Lesenswert?

Hallo,

ich versuche derzeit das LCD an einem PCF8574 zum Laufen zu bringen, 
wobei ich wegen der zwei Enable-Leitungen gerne diese Library verwenden 
würde.
Da ich in C# bisher nicht sehr viel programmiert habe, frage ich mich 
nun an welchen Stellen ich das ganze vom lokalen MCU-Port auf TWI 
umstricken kann. Wie kann ich verfahren, wenn in der Library einzelne 
Bits geändert werden? Dem PCF8574 kann ich ja immer nur ein ganzes Byte 
senden.

Gruß und Danke im Vorraus,
Alex

von Alexander W. (Gast)


Lesenswert?

Nachtrag, als Gast kann ich ja nicht editieren:
Ich verwende die TWI-lib von P.Fleury.

von Alexander W. (Gast)


Lesenswert?

Hallo,

da ja keine Antworten gekommen sind habe ich selbst eine Library für das 
WDC2704M mit PCF8754 entwickelt.

Die Library benötigt für die I²C-Kommunikation die Lib. von P.Fleury.

www.tischplatte.ws/AVR-Projekte/WDC2704M_TWI.zip

Hier noch ein kleines Beispielvideo:
http://www.youtube.com/watch?v=hyn3cZwHZok

Urteilt bitte nicht zu hart, ich habe Samstag zum ersten mal C# 
verwendet. ;-)

Gruß,
Alex

von Gerd S. (gerd_s)


Lesenswert?

Das Display ist nicht mehr gelistet bei Pollin. Gibt es bei P. 
Alternativen ?

Gruß und Dank
Gerd

von Randy (Gast)


Lesenswert?

> Das Display ist nicht mehr gelistet bei Pollin. Gibt es bei P.
> Alternativen ?

Uh, oh... das gab es jahrelang. hatte mich schon gewundert wo der riesen 
Restposten wohl her war. Von der Ansteuerung her war es ein "normales" 
HD44780 kompatibles Textdisplay. Mit seinen 4x27 Zeichen ist die Map so 
angeordnet wie bei einem 4x40 nur dass die rechten 17 Zeichen nicht zu 
sehen waren. So dass man es nicht softwarekompatibel durch ein 4x20 
ersetzen kann. Die lib hat das zusammen mit der etwas ungewöhnlichen 
Zeilenlänge von 27 Zeichen berücksichtigt. Aber ansonsten war an diesem 
Display nichts besonderes. Etwas geößere Zeichen als die meißten, dafür 
keine Hintergrundgeleuchtung, und besserer Kontrast wurde bei anderen 
LCDs auch schon gesichtet.

Randy

von Alexander W. (Gast)


Angehängte Dateien:

Lesenswert?

Da sich der Link geändert hat hab ich Datei im Anhang nochmal 
hochgeladen.

Beitrag #5676563 wurde von einem Moderator gelöscht.
Beitrag #5676566 wurde von einem Moderator gelöscht.
Beitrag #5676790 wurde von einem Moderator gelöscht.
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.