PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD Ansteuerung



Woftschik
21.02.2009, 11:35
Hallo Leute!!!

Seit gestern versuche ich ein LCD ans laufen zu bekommen. Doch leider ohne erfolg, das Ding macht mich noch fertig!!!! ](*,)
Ein Programmierer sagte mal, "Die "Kisten" (Rechner/Microcon.) tun nur das was der Bdiener im sagt" doch ich weiß leider nicht was ich Falsch mache.

Ich benutze ein Atmega 16 und von reichelt das 2 x 20 Display
Ich habe es wie auf dem Bild angeschlossen,

siehe Bild oder https://www.roboternetz.de/wissen/index.php/LCD-Modul_am_AVR

bis auf dem Pin 6 (Enable)
den habe ich direckt an PC7/A15 angeschlossen da ich nicht das eine IC habe.(Denke mal das es auch nicht Nötig ist,oder?)

So jetzt kommt das eigentliche Problem!!!
Habe in C ein programm geschrieben bzw. versucht (versucht ist das richtige Wort dafür) zu schreiben, damit ich irgendwas auf dem LCD sehen kann.
Kann mir jemand Bitte irgend ein Beispiel programm geben (wenn es geht in C), damit ich sehen kann das sich überhaupt irgendwas auf dem Bildschirm tut,
oder mir anders irgendwie helfen????

Danke!!!

linux_80
21.02.2009, 20:21
Hallo,

bei einem Text-LCD reicht es aus es so anzuschliessen:
https://www.roboternetz.de/wissen/index.php/LCD-Modul_am_AVR#4-Bit_Ansteuerung_ohne_Busy.28I.2FO_Mode.29

Dann klappts auch mit den üblich verwendeten Libs.

Woftschik
21.02.2009, 23:01
Hi Linux_80

Danke für die Antwort!! Super das wusste ich nicht (wieder was dazu gelernt :P ) man kann damit die Arbeit erleichtern und brauch nicht soviel zu stecken!!
Muss ich sofort ausprobieren!!

Gibt es da ein unterschied? (schlechter oder besser) wieso gibt es dann die 8bit Variante??????

Bauteiltöter
22.02.2009, 10:51
hi Woftschik,

die 8bit-Variante gibt es, um z.B. das Display an einem Bus zu betrieben (z.B. für Externen speicher u.s.w.)

Die 4bit-Variante könnte vll ein wenig langsamer sein, aber das macht sich eigentlich nicht bemerkbar ;)

MfG

Woftschik
23.02.2009, 00:15
@Bauteiltöter

Danke fuer die Info!!!!!


@linux_80

Habe es versucht wie hier https://www.roboternetz.de/wissen/in.....ohne_Busy.28I.2FO_Mode.29 aber irgendwie will es mir nicht gelingen staendig bekomme ich ein Fehler lcd.h kann nicht gefunden werden.
Ich benutzte myAVR und habe auch schon versucht die lcd.h in den Installationsverzeichnis abzulegen da wo die anderen alle ....h sind, leider ohne erfolg! Fehler siehe Bild

kann mir jemand helfen???

linux_80
23.02.2009, 01:08
Hallo,

eigene Header-Dateien schliesst man in Anführungszeichen ein, nicht in eckige Klammern:
include "lcd.h"
Die Datei sollte dann auch im gleichen Verzeichnis sein wie die restlichen Dateien des Projects.

Woftschik
23.02.2009, 09:22
Hi!!!

Super er hat die Datei jetzt gefunden!!!
Trotzdem bekommt er die Fehler meldungen das die Befehle für den LCD nicht kennt oder so!!! (siehe Bild myAVR_1)

Bin mir nicht sicher ob die Header-Datei ein Fehler hat.
Habe mal gepostet könnt ihr die mal anschauen ob sie in ordnung ist Danke?
(siehe lcd.h)

linux_80
23.02.2009, 10:39
Da muss es aber auch noch eine passende lcd.c zur lcd.h geben, die im gleichen Verzeichnis sein sollte, und die auch mitcompiliert werden muss.
Mit dem myAVR-Teil kenn ich mich aber ned aus, wie man dem bekannt gibt, das der weitere .c-Dateien compiliert.

Woftschik
23.02.2009, 10:42
@linux_80

OK!
Mit welchem Programm machst du das denn???
Wie erstelle ich die c-Datei???

Woftschik
23.02.2009, 10:58
HI!

Habe jetzt mit AVR Studio versucht!

Ich habe die LCD befehle mal alle ausgeklammert und bekomme folgenden Fehler...

../lcd.h:28:1: error: unterminated #if
make: *** [LCD_TEST.o] Error 1

kann das damit zusammen hängen das in der Header-Datei #if LCD_IO_MODE steht????

linux_80
23.02.2009, 13:35
Wenn ich in C was progge, dann nehm ich das AVRStudio.
Wenn zu einem Project weitere .c und .h -Dateien hinzukommen, diese erst in das Verzeichnis kopieren, und dann im AVRStudio auf der linken Seite hinzufügen, dann klappts auch mit dem compilieren. Aber nur wenn die Dateien auch keine Fehler haben.

Wo hast Du die lcd.* Dateien her, die Header Datei von oben (Anhang), ist so nicht ganz komplett !

Woftschik
23.02.2009, 13:54
Hi!!

Ich habe diese von dem Link den du mir gezeigt hast!

Da steht folgendes geschrieben!......

AVR-GCC Programm

Das Programm zur Ansteuerung des Displays im 4-Bit I/O Mode. Verwendet wird die lcdlibrary von Peter Fleury.

Folgende Einstellungen sind für obiges Beispiele in der Header Datei lcd.h vorzunehmen:


...

/**
* @name Definitions for MCU Clock Frequency
* Adapt the MCU clock frequency in Hz to your target.
*/
#define XTAL 16000000 /**< clock frequency in Hz, used to calculate delay timer */


/**
* @name Definition for LCD controller type
* Use 0 for HD44780 controller, change to 1 for displays with KS0073 controller.
*/
#define LCD_CONTROLLER_KS0073 0 /**< Use 0 for HD44780 controller, 1 for KS0073 controller */

/**
* @name Definitions for Display Size
* Change these definitions to adapt setting to your display
*/
#define LCD_LINES 4 /**< number of visible lines of the display */
#define LCD_DISP_LENGTH 20 /**< visibles characters per line of the display */
#define LCD_LINE_LENGTH 0x40 /**< internal line length of the display */
#define LCD_START_LINE1 0x00 /**< DDRAM address of first char of line 1 */
#define LCD_START_LINE2 0x40 /**< DDRAM address of first char of line 2 */
#define LCD_START_LINE3 0x14 /**< DDRAM address of first char of line 3 */
#define LCD_START_LINE4 0x54 /**< DDRAM address of first char of line 4 */
#define LCD_WRAP_LINES 0 /**< 0: no wrap, 1: wrap at end of visibile line */

#define LCD_IO_MODE 1 /**< 0: memory mapped mode, 1: IO port mode */
#if LCD_IO_MODE
/**
* @name Definitions for 4-bit IO mode
* Change LCD_PORT if you want to use a different port for the LCD pins.
*
* The four LCD data lines and the three control lines RS, RW, E can be on the
* same port or on different ports.
* Change LCD_RS_PORT, LCD_RW_PORT, LCD_E_PORT if you want the control lines on
* different ports.
*
* Normally the four data lines should be mapped to bit 0..3 on one port, but it
* is possible to connect these data lines in different order or even on different
* ports by adapting the LCD_DATAx_PORT and LCD_DATAx_PIN definitions.
*
*/
#define LCD_PORT PORTC /**< port for the LCD lines */
#define LCD_DATA0_PORT LCD_PORT /**< port for 4bit data bit 0 */
#define LCD_DATA1_PORT LCD_PORT /**< port for 4bit data bit 1 */
#define LCD_DATA2_PORT LCD_PORT /**< port for 4bit data bit 2 */
#define LCD_DATA3_PORT LCD_PORT /**< port for 4bit data bit 3 */
#define LCD_DATA0_PIN 4 /**< pin for 4bit data bit 0 */
#define LCD_DATA1_PIN 5 /**< pin for 4bit data bit 1 */
#define LCD_DATA2_PIN 6 /**< pin for 4bit data bit 2 */
#define LCD_DATA3_PIN 7 /**< pin for 4bit data bit 3 */
#define LCD_RS_PORT LCD_PORT /**< port for RS line */
#define LCD_RS_PIN 3 /**< pin for RS line */
#define LCD_RW_PORT LCD_PORT /**< port for RW line */
#define LCD_RW_PIN 2 /**< pin for RW line */
#define LCD_E_PORT LCD_PORT /**< port for Enable line */
#define LCD_E_PIN 1 /**< pin for Enable line */
...


das habe ich dann als Header-Datei genohmen.

Was fehlt den da noch???

Das mit dem einbinden habe ich jetzt verstanden!
kannst du mir helfen die Header-Datei zu vervollständigen???
Wäre dir sehr Dankbar!!!

linux_80
23.02.2009, 14:46
Aah ich seh schon, Du hast nur die Zeilen aus dem Wiki kopiert.
Aber das war so zu verstehen, dass man erst die LCD-lib holt, auf der Seite von Peter Fleury, dann kann man die im Wiki angegebenen Zeilen anpassen, an das eigene Projekt. Also an welchen Pins das LCD angeschlossen ist.
Link ist auch im Wiki-Artikel, ganz unten.

Woftschik
23.02.2009, 15:31
Hi

super!! Danke vor erstmal!
Doch jetzt taucht ein weiters Problemm auf mit dem ich nicht fertig werde!

Wenn ich in AVR Studio bin und (Alt + F7) drücke dann Compiliert AVR!!

Anschließend will ich das Programm flashen bzw. über meinem USB ISP Programmer in AVR übertragen, dafür benötige ich doch ein .Hex Datei.
Wieso wird dieser nicht bei dem Compilieren mit erzeugt????
Oder gibt es eine andere möglichkeit zu übertragen????

linux_80
23.02.2009, 18:37
Wenns keine Fehler gegeben hat, ist die Hex-Datei schon irgendwo.
Hast Du schon alle Unterverzeichnisse Deines Projektes durchsucht ?
Meist ist die unter "default".

Woftschik
23.02.2009, 23:46
Also es ist so....

Wenn ich nur F7 drücke dann habe ich wie in dem Bild "Fehler"
dargestellt den Fehler.

Wenn ich aber Alt + F7 dann habe ich kein Fehler siehe anderes Bild.

Ich habe auch das Programm das mit dem "lcdlibary" probiert, das selbe problem.

Was könnte das schon wieder sein????

linux_80
23.02.2009, 23:52
Da würde ich mal schätzen es liegt an dem, das im Pfad Verzeichnisnamen mit Leerzeichen vorkommen, das mag der compiler nicht.
Bau mal ein neues Verzeichnis von C: her auf (ohne Leerzeichen), im dem die C-Projekte sind, dann schau ma weiter.

McJenso
24.02.2009, 15:18
Hallo,

dir fehlen die zur Headerdatei gehörigen C-Dateien. Mit Alt F7 übersetzt du nur die aktuelle Datei. Das heißt wenn die verwendeten Funktionen in der Headerdatei definiert sind ist gut. Mit F7 wird das ganze Projekt übersetzt und auch die exe erzeugt. Dann fällt natürlich auf, dass die Funktionen zwar als Prototyp definiert sind, aber nirgends mit Rumpf auftauchen.
Füge die C-Dateien in dein Projekt ein und gut ist.

Gruß

Jens

Woftschik
24.02.2009, 18:27
Hey Super!!!

Danke für den Tip mit den weitere .c Dateien einbinden!

Das Compilieren hat jetzt gefunzt. und übertragen auch, aber Display hat nur ein schwarzen Balken (siehe Bild lcd).

Ich habe den LCD direkt an AVR ATmega16 angeschlossen genau wie es hier geschrieben wird...

#define LCD_PORT PORTA /**< port for the LCD lines */
#define LCD_DATA0_PORT LCD_PORT /**< port for 4bit data bit 0 */
#define LCD_DATA1_PORT LCD_PORT /**< port for 4bit data bit 1 */
#define LCD_DATA2_PORT LCD_PORT /**< port for 4bit data bit 2 */
#define LCD_DATA3_PORT LCD_PORT /**< port for 4bit data bit 3 */
#define LCD_DATA0_PIN 0 /**< pin for 4bit data bit 0 */
#define LCD_DATA1_PIN 1 /**< pin for 4bit data bit 1 */
#define LCD_DATA2_PIN 2 /**< pin for 4bit data bit 2 */
#define LCD_DATA3_PIN 3 /**< pin for 4bit data bit 3 */
#define LCD_RS_PORT LCD_PORT /**< port for RS line */
#define LCD_RS_PIN 4 /**< pin for RS line */
#define LCD_RW_PORT LCD_PORT /**< port for RW line */
#define LCD_RW_PIN 5 /**< pin for RW line */
#define LCD_E_PORT LCD_PORT /**< port for Enable line */
#define LCD_E_PIN 6


aber trotzdem nichts!!!

habe auch #elif defined(__AVR_ATmega16__) reingeschrieben

Anschlüsse habe ich auch oft genug kontroliert.

Woftschik
25.02.2009, 12:10
Hallo !!

Kann das sein das es was mit den Fuse - Bits zu tun hat????
Kenne mich leider nicht darin aus! Habe nur im Internet gelesen das es daran liegen könnte!

Wenn ja, welche soll ich dan ändern?

Hubert.G
25.02.2009, 13:49
Der Fehler ist klar ersichtlich, du hast ordentliche Foto gemacht.
Am LCD gehören die Datenpin 4 bis 7 angeschlossen und nicht 0 bis 3 wie bei dir.
Noch ein Fehler, AVCC und GND gehören ebenfalls angeschlossen. AVCC ist die Stromversorgung für PORTA. Das ist extra ausgeführt, da es auch die Stromversorgung für den ADC ist und besonders behandelt werden sollte, siehe Datenblatt ADC.

Woftschik
25.02.2009, 16:22
EEEEESSSSS FFFUUUUUUNNNNNZZZTT!!!! :cheesy: :D :mrgreen:

OH man der letzte Fehler mit dem falsch angeschlossenem LCD. Man sucht überall nur nicht wo der Fehler ist , peinlich. :oops:
Den anderen mit der versorgungs spannung wusste ich nicht, Danke!

OK, ich denke das ich von nun an erstmal selber weiter mache!!!

Ich Danke allen die mir geholfen haben..

linux_80
Bauteiltöter
McJenso
Hubert.G

Woftschik
25.02.2009, 16:25
vieleicht noch kurz die frage

Wie kann man Bilder einfügen, dass man sie sofort anschauen kann, ohne sie runter zu laden????