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
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
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
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
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 ;)
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
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.
Hallo Aber er meckert ja das zu viele Arguments sind???? Sprintf schreibt er wert: 1.Er zeigt nicht den adcwert? Frank
"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
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
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
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
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
Also die Lib funktioniert. Schaltplan ? Code ? Gib mal mehr Infos. P.S.: Das hier ist die Codesammlung ...
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 ...
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"]]
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
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
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
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.
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)
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
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.
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
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
Nachtrag, als Gast kann ich ja nicht editieren: Ich verwende die TWI-lib von P.Fleury.
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
Das Display ist nicht mehr gelistet bei Pollin. Gibt es bei P. Alternativen ? Gruß und Dank Gerd
> 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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.