Fleury geht nicht - LCD...

Gast #75043
Lesenswert?

Vorweg nochmal: Ich möchte nur mein LCD einschalten, also dass beide
Balken weg sind - spääääter dann einfach "Hello World" - so wie ein
Programmierhandbuch ja auch aufgebaut ist - am LCD ausgeben!

Habe Fleury's lcd.c und lcd.h, dazu habe ich mir ein einfaches
programm geschrieben:

/*test.c*/
#include <avr/io.h>
#include "lcd.h"

main(){
         lcd_init(LCD_DISP_ON);}

die lcd.c, lcd.h und test.c liegen alle im gleichen ordner c:\ordner!

Jetzt benutze ich den Befehl:
avr-gcc -g -Os -mmcu=at90s4433 -c test.c
das klappt ja noch gut

Aber mit:
avr-gcc -g -mmcu=at90s4433 -o test.elf test.o
bekommt man die Meldung, dass lcd_init nicht definiert ist!

was ist falsch? warum ist es falsch? wie muss es richtig sein? welche
frage habe ich vergessen, damit mein display initialisiert wird?
welche infos braucht ihr noch?
Gast #75046
Lesenswert?

Sorry wegen meinem ton z.Z., aber ich dermassen von genervt, das könnt
ihr mir gar nicht glauben...
Ich hoffe ihr könnt da drüber hinwegsehen, ich versuche mich auch
zusammenzureissen so gut es geht!

Wie kann ich die Bibliothek mit einbinden?
Gast #75048
Lesenswert?

Nö, aber das ist Dir hier auch schon mindestens einmal gesagt worden:

Dein Denkfehler ist, daß Du immer nur mit lcd.h operierst, aber DAS
IST NICHT DIE BIBLIOTHEK.  (Sorry fürs Herumschreien.)

Die Bibliothek ist ein separates .c File (lcd.c vielleicht), das Du
ebenfalls mit übersetzen und mit linken mußt.  Am einfachsten geht
das, indem Du dessen Namen mit im Makefile (unter CSRCS oder wie auch
immer das bei Dir heißt) mit angibst.
Gast #75050
Lesenswert?

avr-gcc -g -Os -mmcu=at90s4433 -c test.c  -> funktioniert

avr-gcc -g -Os -mmcu=at90s4433 -c lcd.c   -> Fehlermeldung:
PORTA in etlichen Funktionen nicht deklariert!

was sagt mir das nun?


###############################################
void lcd_init(uint8_t dispAttr)
{
#if LCD_IO_MODE

    DDR(LCD_DATA_PORT) = 0xFF;          /* all port bits as output */
###############################################


LCD_DATA_PORT steht ja auch in der lcd.h drinnen:

###############################################
#define LCD_PORT         PORTA     /**< all lcd pins must be on SAME
port */
#define LCD_DATA_PORT    LCD_PORT  /**< port for 4bit data (Pin 0..3)
*/
###############################################


Wo ist der Fehler?
Gast #75051
Lesenswert?

#include <avr/io.h> fehlt.

Außerdem solltest Du Dir vermutlich Gedanken darüber machen, ob die
Portanbindung (Port A offensichtlich) der Fleury-Bibliothek auch
Deinem Setup entspricht...
Gast #75052
Lesenswert?

io.h fehlt?

meinst du, dass in der io4433.h für PORTA nichts angegeben ist?

ich habe jetzt in der lcd.h statt PORTA PORTD angegeben und in der
lcd.c
DDR(LCD_DATA_PORT) = 0xFF;
mit
DDR(LCD_DATA_PORT) = 0x11;
ersetzt, weil 0xFF in der io4433.h was anderes als PORTA ist....

hier der Fehler???


########### io4433.h #########

/* Input Pins, Port D */
#define PIND  _SFR_IO8(0x10)

/* Data Direction Register, Port D */
#define DDRD  _SFR_IO8(0x11)

/* Data Register, Port D */
#define PORTD  _SFR_IO8(0x12)

###############################


bin ich da auf dem richtigen weg?
Gast #75053
Lesenswert?

ich hatte zwar vorher schon
#define LCD_PORT  PORTA     /**< all lcd pins must be on SAME port */

mit
#define LCD_PORT  PORTD     /**< all lcd pins must be on SAME port */

ersetzt, aber jetzt funktioniert es....
hab ja vorhin schon etliches umgeändert, aber jetzt gehts - komisch,
bin mir sicher, dass ich PORTD schon paar mal reingeschrieben habe
Gast #75054
Lesenswert?

sh.., es tut sich nicht viel!

-spannung hat das teil, gnd auch, kontrast stimmt... ein balken
"fehlt"
-RS liegt auf PD4
-RW auf PD5
-E auf PD6
-und weil im 4bit modus, liegen die anderen auf PD0-PD3

2x16 display, von daher müsste die lcd.h eigentlich stimmen - hab jetzt
nur PORTA mit PORTD ausgetauscht, der Compiler hats geschluckt...

woran kann das liegen? ich habe immer noch einen einzelnen schwarzen
balken...

muss ich folgendes in der lcd.c auch noch ändern?
/* configure data pins as output */
    DDR(LCD_DATA_PORT) = 0xFF;
Gast #75056
Lesenswert?

@ALex
Bitte vermeide Crosspostings zu deinen LCD Problem, das bringt dich
nicht weiter, im Gegenteil.

Versuch zuerst mein test_lcd program mit meinem Makefile (angepasst
an dienen AVR) zu kompilieren und auf deinem Zielsystem zu testen.

Das Schema zum Anschluss des LCD an den AVR befindet sich auf meiner
Homepage.
Gast #75057
Lesenswert?

Habs jetzt hinbekommen, auch mit deinen dateien!
...zuviel aus deiner test_lcd rausgelöscht, das gefällt dem
initialisieren nicht.

Ich habe im Moment zwar nicht so viel Zeit, aber bei Gelegenheit werde
ich mich mal um ein "HOW-TO.." für Anfänger schreiben. Bei mir lags
ja anfangs schon an dem Compilerbefehl!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren