www.mikrocontroller.net

Forum: Compiler & IDEs Fleury geht nicht - LCD...


Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
fleury geht natürlich schon, aber warum bekomme ich einen fehler beim
compiler?

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil Du die Bibliothek gar nicht mit einbindest.

Ein Headerfile allein macht noch keine Bibliothek aus, sondern es
deklariert nur das Interface zur Bibliothek.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habs auch schon probiert, dass ich lcd.h ins AVR-GCC Verzeichnis
kopiere, wo die io.h drinnen ist und im Programm dann mit
#include <lcd.h> statt "lcd.h"
geht aber auch nicht

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Berndt Brandes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
versuchs mal mit:
avr-gcc -g -Os -mmcu=at90s4433 -c test.c
avr-gcc -g -Os -mmcu=at90s4433 -c lcd.c
avr-gcc -g -mmcu=at90s4433 -o test.elf test.o lcd.o

/Berndt

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sehe gerade, das LCD_DATA_PORT auch als PIN0-3 definiert ist...

warum hab ich noch Balken?

Autor: Peter Fleury (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: yo al (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe ähnliche probleme mit einer 20x4 lcd
hat irgendwer eine lösung?
verdrahtung ist ok geht mit 16x2 lcd

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.