PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit LCD-Steuerung..



RIFMAN
19.04.2007, 09:30
Hallo,
ich versuche seit zwei Tage, ein LCD(HD44780 ) durch die P.Fleury library mit einem ATmega16 zu steuren. Es tut sich aber nichts ! ich kriege zwar die schwarze Balken angezeigt, mehr aber auch nicht.
woran kann es denn liegen? kann jemand bitte helfen?
Danke !
MfG

P.S: ich benutze PORT A als LCD-PORT.

jar
19.04.2007, 12:37
also , sie läuft prima , bei mir,

Fallstricke für den Neuuser könnten sein:

LCD.H
dort ist leider zu ändern:

Zeile 47:
#define XTAL 4000000
!!!!! wichtig die richtige CPU eintragen, obwohl ich bei Problemen auch schon mal mit einer 8MHz CPU 12-16 MHz versucht hatte, verlängert theoretisch die Waits, half bei mir aber nix, weil es nicht an den Waits lag.

Zeile 54:
#define LCD_CONTROLLER_KS0073 0 /**< Use 0 for HD44780 controller, 1 for KS0073 controller */
0 oder 1 das weisst nur du

Zeile 60-67:
#define LCD_LINES 2 /**< number of visible lines of the display */
#define LCD_DISP_LENGTH 16 /**< 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 */
siehe LCD Datenblatt

Zeile 60-67:
#define LCD_IO_MODE 1 /**< 0: memory mapped mode, 1: IO port mode */
immer I/O Mode 1 und nur mit 4-bit ansteuern, LCD D7-D3

Zeile 86-100:
#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 /**< pin for Enable line */

vom User nutzbare Befehle ?
lcd_init(uint8_t dispAttr);
lcd_clrscr(void);
lcd_home(void);
lcd_gotoxy(uint8_t x, uint8_t y);
lcd_putc(char c);
lcd_puts(const char *s);
lcd_puts_p(const char *progmem_s);
lcd_command(uint8_t cmd);
lcd_data(uint8_t data);
lcd_puts_P(__s) lcd_puts_p(PSTR(__s))

von mir bis jetzt erfolgreich benutzt:
lcd_init(LCD_DISP_ON); // LCD_DISP_ON_CURSOR_BLINK
lcd_data(pgm_read_byte_near(&copyRightChar[__i]));
lcd_clrscr();
lcd_gotoxy(19,0);
lcd_putc(5);
lcd_puts(trimm_string('0',itoa(__bi, (char *)s, 10),2));

lcd_command(_BV(LCD_CGRAM)); // set CG RAM start address 0
nutze ich auch, bin aber noch unsicher ob der was tut ? wegen IO Mode

lcd_home(void);
lcd_puts_p(const char *progmem_s);
lcd_puts_P(__s) lcd_puts_p(PSTR(__s))
habe ich noch nie genutzt


in
test_lcd.c
stehen ja die notwendigen includes

noch Fragen ?

prüfe deine #defines und Verdrahtung.

Achtung Falle:
#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 */

im 4-bit Mode diese defines nicht ändern auf der LCD Seite, aber
LCD DATA0 ist LCD_D4
LCD DATA1 ist LCD_D5
LCD DATA2 ist LCD_D6
LCD DATA3 ist LCD_D7

!!!!!

RIFMAN
19.04.2007, 12:40
ich habe es mit radig ulrich Library versucht aber ich bekomme diese Fehlermeldungen:
avr-gcc.exe -mmcu=atmega16 -Wall -gdwarf-2 -O0 -fsigned-char -MD -MP -MT MyLCD.o -MF dep/MyLCD.o.d -c ../MyLCD.c
../MyLCD.c:12:18: error: main.h: No such file or directory
../MyLCD.c:13:17: error: lcd.h: No such file or directory
../MyLCD.c: In function 'main':
../MyLCD.c:36: warning: implicit declaration of function 'LCD_Init'
../MyLCD.c:37: warning: implicit declaration of function 'LCD_Print'
make: *** [MyLCD.o] Error 1
Build failed with 2 errors and 2 warnings...

Obwohl ich die main.h und lcd.h in meiner Projekt bzw. unter Projektverzeichnis eingefügt habe!

jar
19.04.2007, 12:46
vermutlich stimmen deine Pfade nicht:

Path=C:\Programme\Atmel\WINAVRgcc\bin;C:\Programme \Atmel\WINAVRgcc\utils\bin;C:\Programme\Atmel Corporation\WINAVRgcc\bin;C:\Programme\Atmel Corporation\WINAVRg
cc\utils\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WIN DOWS\Sys......

usw.

ich setze je nach Compiler in einer batch die Var %PATH% richtig, sonst gibt es Probleme mit den Includes

Achtung beachte auch meine Edits ;)

RIFMAN
19.04.2007, 12:51
Danke jar!
in deiner ersten Antwort habe ich das nicht ganz verstanden:
Zeile 54:
#define LCD_CONTROLLER_KS0073 0 /**< Use 0 for HD44780 controller, 1 for KS0073 controller */
ich benutze einen HDD44780, was muss ich da ändern?

jar
19.04.2007, 14:16
Danke jar!
in deiner ersten Antwort habe ich das nicht ganz verstanden:
Zeile 54:
#define LCD_CONTROLLER_KS0073 0 /**< Use 0 for HD44780 controller, 1 for KS0073 controller */
ich benutze einen HDD44780, was muss ich da ändern?

nö, HD44xxx ist und bleibt 0

RIFMAN
19.04.2007, 14:36
Ich alles geändert, was ich ändern musste hat aber nichts gebracht..

jar
19.04.2007, 14:44
Ich alles geändert, was ich ändern musste hat aber nichts gebracht..

schwarze Balken sind erst mal gut, Kontrast und power funktioniert also,
also läuft dein Init nicht, oder das LCD bekommt keinen richtigen sauberen Saft -> Vcc oder GND,

alle beteiligten Ports auf Ausgang gestellt ?

Bascom Demo ist erst mal zum Testen gut

Achtung Bascom , Enable auf GND ? aber Fleury will einen Port !
kann auch sein das ich das mit dem RW oder RS verwechsel, wenn du aber alle 3 Pins an Ports hast, bist du schon richtiger für Fleury ;)

orko512
19.04.2007, 20:47
hi RIFMAN,

ich hatte die gleichen probleme wie du, bei der memory mapped mode ansteuerung des lcd.
habe ich nicht zum laufen bekommen.
habe dann die 4bit ansteuerung probiert, die lief dann auf anhieb.

gruß orko

RIFMAN
20.04.2007, 08:17
jar hat folgendes geschrieben:

Achtung Bascom , Enable auf GND ? aber Fleury will einen Port !
kann auch sein das ich das mit dem RW oder RS verwechsel, wenn du aber alle 3 Pins an Ports hast, bist du schon richtiger für Fleury


es wäre super wenn du ein LCD-Test Programm für Bascom hast.

orko512 hat folgendes geschrieben:

ich hatte die gleichen probleme wie du, bei der memory mapped mode ansteuerung des lcd.
habe ich nicht zum laufen bekommen.
habe dann die 4bit ansteuerung probiert, die lief dann auf anhieb.


ich benutze aber die 4-bit Steuerung..

RIFMAN
20.04.2007, 08:56
Danke an euch allen..besonders an Jar,es hat endlich geklappt!
es lag an Pinbelegung.

jar
21.04.2007, 00:16
Danke an euch allen..besonders an Jar,es hat endlich geklappt!
es lag an Pinbelegung.

freut mich, aber was willst du am Testprogramm in BASCOM sehen ?

Deflcdchar 0 , 32 , 4 , 21 , 4 , 4 , 32 , 14 , 17
Deflcdchar 1 , 32 , 4 , 21 , 4 , 4 , 17 , 14 , 32
Deflcdchar 2 , 32 , 4 , 21 , 4 , 4 , 32 , 31 , 32
Deflcdchar 3 , 32 , 4 , 21 , 4 , 4 , 32 , 14 , 32

Deflcdchar 4 , 32 , 32 , 4 , 4 , 4 , 14 , 14 , 14
Deflcdchar 5 , 14 , 17 , 21 , 4 , 4 , 14 , 14 , 14
Deflcdchar 6 , 4 , 4 , 4 , 14 , 14 , 14 , 31 , 31
Deflcdchar 7 , 28 , 2 , 25 , 5 , 21 , 32 , 32 , 32

'Deflcdchar 0 , &H07 , &H08 , &H13 , &H14 , &H14 , &H13 , &H08 , &H07
'Deflcdchar 1 , &H00 , &H10 , &H08 , &H08 , &H08 , &H08 , &H10 , &H00

$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 8000000
Config Lcd = 20 * 2

Cls 'clear the LCD display
Lcd Chr(0) ; Chr(32) ; Chr(1) ; Chr(32) ; Chr(2) ; Chr(32) ; Chr(3) ; Chr(32) ;
Lowerline
Lcd Chr(4) ; Chr(32) ; Chr(5) ; Chr(32) ; Chr(6) ; Chr(32) ; Chr(7) ; Chr(32) ;

End 'end program

RIFMAN
23.04.2007, 09:41
Hallo Jar,

ich brauche das testprogramm von Bascom nicht mehr.

Danke für die Interesse.