Forum: Mikrocontroller und Digitale Elektronik LCD und Makefile Problem


von Johannes B. (aprendiz)


Lesenswert?

Hi Leute,

momentan versuche ich ein 2x16 Zeichen Display mit meinem Atmega32 
anzusteuern. So ich habe also alles angeschlossen und bei den 2 Dateien 
lcd-routines.h und lcd-routines.c von dieser Seite copy/paste gemacht, 
und sie mir so erstellt. Das Beispielprogramm auch kopiert und 
compiliert.... nix passiert.

In dem Tutorial lese ich die ganze Zeit:

// Anpassungen im makefile:
//    ATMega8 => MCU=atmega8 im makefile einstellen
//    lcd-routines.c in SRC = ... Zeile anhängen

So aber was genau ist denn nun dieses Makefile?????

Muss ich mir die Datei selber schreiben oder bearbeite ich mir die 
makefile Datei aus dem Projektordner von meinem AtmelStudio?

Ich häng da momentan echt fest und bitte um eure Hilfe.

Gruß Jo

von Düsendieb (Gast)


Lesenswert?

Nach dem Copy Past muss die Datei in der Regel an deine Hardware 
angepasst werden.
Das Makefile macht das AVR Studio automatisch.

von Johannes B. (aprendiz)


Lesenswert?

Düsendieb schrieb:
> Nach dem Copy Past muss die Datei in der Regel an deine Hardware
> angepasst werden.

Welche Datei muss angepasst werden? Die lcd-routines.c/-.h?

Dort kann ich außer der Frequenz doch nichts Hardware mäßiges 
einstellen?!

von Cyblord -. (cyblord)


Lesenswert?

Johannes Berger schrieb:
> Düsendieb schrieb:
>> Nach dem Copy Past muss die Datei in der Regel an deine Hardware
>> angepasst werden.
>
> Welche Datei muss angepasst werden? Die lcd-routines.c/-.h?
>
> Dort kann ich außer der Frequenz doch nichts Hardware mäßiges
> einstellen?!

Doch die Portzuordnungen.

von Johannes B. (aprendiz)


Lesenswert?

cyblord ---- schrieb:
> Doch die Portzuordnungen.

Ja aber nur ob PortD oder Portc ....
Diese Einstellung habe ich so belassen

mir geht es eher um diese Aussage:

// Anpassungen im makefile:
//    ATMega8 => MCU=atmega8 im makefile einstellen
//    lcd-routines.c in SRC = ... Zeile anhängen

von Karl H. (kbuchegg)


Lesenswert?

Johannes Berger schrieb:
> cyblord ---- schrieb:
>> Doch die Portzuordnungen.
>
> Ja aber nur ob PortD oder Portc ....

Nö.
Nicht nur.
Auch die einzelnen Leitungen (R/S R/W E) sind in der Regel 
konfigurierbar. Genauso wie die 4 Datenleitungen. Wobei sich bei 
letzterem es sich auch oft empfiehlt einen kurzen Blick auf die zentrale 
Schreibroutine zu werfen, ob die auch so geschrieben ist, dass man die 
Lage der Datenleitungen auch wirklich anpassen kann.

PS: Auch ist es meistens eine gute Idee zu kontrollieren, wie die 
betreffenden Routinen die diversen Frequenzanforderungen bzw. die davon 
abhängigen Wartezeiten realisieren. Meistens wird dazu das F_CPU Makro 
mitbenutzt, das man tunlichst bei den Compilereinstellungen im 
AVR-Studio angibt und nicht auf Einzelfile-Basis.

Auch ist es eine gute Idee, wenn man nach dem 'Build' mal die Output 
Fenster etwas genauer kontrolliert, ob auch alles compiliert bzw. 
gelinkt wurde und ob es irgendwelche Warnungen oder gar Fehler gab.

> mir geht es eher um diese Aussage:
>
> // Anpassungen im makefile:
> //    ATMega8 => MCU=atmega8 im makefile einstellen
> //    lcd-routines.c in SRC = ... Zeile anhängen


Wenn du AVR-Studio benutzt, brauchst du dich um das Makefile nicht 
kümmern.

Soweit klar?
Du fügst einfach alle *.c Files zum Projekt dazu und AVR-Studio kümmert 
isch um den Rest.

: Bearbeitet durch User
von Cyblord -. (cyblord)


Lesenswert?

Johannes Berger schrieb:
> cyblord ---- schrieb:
>> Doch die Portzuordnungen.
>
> Ja aber nur ob PortD oder Portc ....
> Diese Einstellung habe ich so belassen
>
> mir geht es eher um diese Aussage:
>
> // Anpassungen im makefile:
> //    ATMega8 => MCU=atmega8 im makefile einstellen
> //    lcd-routines.c in SRC = ... Zeile anhängen

Diese Schritte sind für das manuelle Erzeugen des makefiles. Wenn du 
Atmel Studio oder ne andere IDE nutzt, entfällt das. Weil du 1. die MCU 
dort einstellst, und 2. die gewünschten Source-Dateien einfach zum 
Projekt hinzufügst.
Somit sind diese beiden Schritte nicht notwendig. Aber du postest ja 
auch keinen Link wo du das her hast. Nicht jeder hier weiß was in 
irgendeinem Tutorial (auch auf dieser Seite) beschrieben ist. Und ob das 
Tutorial für dich geeignet ist, weiß auch niemand.

gruß cyblord

von Johannes B. (aprendiz)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Auch die einzelnen Leitungen (R/S R/W E) sind in der Regel
> konfigurierbar. Genauso wie die 4 Datenleitungen. Wobei sich bei
> letzterem es sich auch oft empfiehlt einen kurzen Blick auf die zentrale
> Schreibroutine zu werfen, ob die auch so geschrieben ist, dass man die
> Lage der Datenleitungen auch wirklich anpassen kann.

Ah, ja ok. Auch diese Einstellungen habe ich so belassen.

In der Beispiel Datei steht aber auch:

#include "lcd-routines.h"

Wenn ich das jedoch schreibe bekomme ich viele viele Fehlermeldungen wie 
z.B.

Error  2  undefined reference to `lcd_data'  usw.

Deswegen habe ich dies in #include "lcd-routines.c" umgeändert.

Die Fehlermeldungen verschwinden zwar aber es passiert doch nichts.
Deswegen dachte ich das ich noch etwas im Makefile umändern muss.

Jetzt bin ich wieder bei 0.

von Johannes B. (aprendiz)


Lesenswert?

cyblord ---- schrieb:
> Aber du postest ja
> auch keinen Link wo du das her hast. Nicht jeder hier weiß was in
> irgendeinem Tutorial (auch auf dieser Seite) beschrieben ist. Und ob das
> Tutorial für dich geeignet ist, weiß auch niemand.

Sry, hier der Link

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung#Datei_lcd-routines.h

von Cyblord -. (cyblord)


Lesenswert?

Johannes Berger schrieb:

> Jetzt bin ich wieder bei 0.

Völlig zurecht. Lerne C, lerne mit deiner IDE umzugehen. Dann verwende 
die LCD-Routinen. So wird ein Schuh draus. Copy und Paste ohne Verstand 
und ohne Ahnung was du da eigentlich machst, bringt dir nichts.

Hast du denn schon überhaupt mal ein kleines Programm SELBST im Atmel 
Studio (oder mit was arbeitest du?) geschrieben?

gruß cyblord

von Karl H. (kbuchegg)


Lesenswert?

Johannes Berger schrieb:
> Karl Heinz Buchegger schrieb:
>> Auch die einzelnen Leitungen (R/S R/W E) sind in der Regel
>> konfigurierbar. Genauso wie die 4 Datenleitungen. Wobei sich bei
>> letzterem es sich auch oft empfiehlt einen kurzen Blick auf die zentrale
>> Schreibroutine zu werfen, ob die auch so geschrieben ist, dass man die
>> Lage der Datenleitungen auch wirklich anpassen kann.
>
> Ah, ja ok. Auch diese Einstellungen habe ich so belassen.

Schön.
Und?
Stimmt das auch mit deiner Hardware überein?

> Wenn ich das jedoch schreibe bekomme ich viele viele Fehlermeldungen wie
> z.B.
>
> Error  2  undefined reference to `lcd_data'  usw.

also hast du die Datei lcd_routines.c nicht mit ins Projekt aufgenommen.

Wie lange sollen wir uns jetzt eigentlich noch den Mund fusselig reden, 
bis du endlich mal übder em Projektbaum die rechte Maustaste drückst, 
dort den Punkt "Add" aufrufst, die Datei lcd-routines.c auswählst und 
die so zum Projekt mit dazunimmst?
Das ist eine Sache auf 10 Sekunden.

> Deswegen habe ich dies in #include "lcd-routines.c" umgeändert.

Das war der falsche Weg.
Genau das willst du nicht machen.


> Die Fehlermeldungen verschwinden zwar aber es passiert doch nichts.


2 grundsätzliche Dinge:
erstens muss mal der Proejtkaufbau stimmen. *.c Files werden zum Projekt 
hinzugefügt und ncith includiert.

zweitens musst du natürlich die Konfiguration der lcd routinen an deine 
konkrekte Hardware anpassen.

von Cyblord -. (cyblord)


Lesenswert?

Johannes Berger schrieb:
> cyblord ---- schrieb:
>> Aber du postest ja
>> auch keinen Link wo du das her hast. Nicht jeder hier weiß was in
>> irgendeinem Tutorial (auch auf dieser Seite) beschrieben ist. Und ob das
>> Tutorial für dich geeignet ist, weiß auch niemand.
>
> Sry, hier der Link
>
> 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung#Datei_lcd-routines.h

Und was steht da?

> Der folgende Satz von Ansteuerroutinen für ein Text-LCD ist in der Datei  > 
lcd-routines.c zusammengefasst. Diese Datei muss man beim Einrichten
> zusätzlich zum eigenen Hauptprogramm in sein Projekt aufnehmen. Dies
> geschieht beim AVR Studio unter Source Files im Fenster AVR GCC oder bei
> WinAVR im Makefile (z. B. durch SRC += lcd-routines.c).

Warum muss man hier alles nochmal schreiben, obwohl es im Tut schon 
steht. Da steht ein ODER. Entweder im Studio hinzufügen, ODER im Makfile 
ändern.

von Johannes B. (aprendiz)


Lesenswert?

cyblord ---- schrieb:
> Warum muss man hier alles nochmal schreiben, obwohl es im Tut schon
> steht. Da steht ein ODER. Entweder im Studio hinzufügen, ODER im Makfile
> ändern.


Ich verwende halt AtmelStudio und da gibbet keinen Projektbaum.
Aber ich werde versuchen es über AVR Studio zu realisieren.

Vielen Dank schon mal für die Hilfe.
Aber einen hier immer wie einen Deppen hinzustellen finde ich ist der 
falsche Weg. Ich setze mich mit dem thema sehr gut auseinander, stehe 
allerdings unter Zeitdruck und habe keine Hilfe außer dem Fehlerhaften 
Internet. Ich frag ja nicht umsonst...

von Karl H. (kbuchegg)


Lesenswert?

Johannes Berger schrieb:

> Vielen Dank schon mal für die Hilfe.
> Aber einen hier immer wie einen Deppen hinzustellen finde ich ist der
> falsche Weg. Ich setze mich mit dem thema sehr gut auseinander, stehe
> allerdings unter Zeitdruck und habe keine Hilfe außer dem Fehlerhaften
> Internet. Ich frag ja nicht umsonst...

Aber du fragst das falsche.
Wenn du AVR-Studio benutzt, dann ist das Makefile für dich 
uninteressant.

von Cyblord -. (cyblord)


Lesenswert?

Johannes Berger schrieb:

> Ich verwende halt AtmelStudio und da gibbet keinen Projektbaum.
> Aber ich werde versuchen es über AVR Studio zu realisieren.

AtmelStudio = AVR Studio. Wurde nur umbenannt.
Und es muss einen Projektbaum geben. Dort müssen alle Dateien zu sehen. 
Quelldateien, Header usw.

> Aber einen hier immer wie einen Deppen hinzustellen finde ich ist der
> falsche Weg.
Hat niemand gesagt. Aber es nervt, wenns im Tutorial steht, aber man 
trotzdem nochmal das gleiche schreiben muss.

> Ich setze mich mit dem thema sehr gut auseinander, stehe
> allerdings unter Zeitdruck und habe keine Hilfe außer dem Fehlerhaften
> Internet. Ich frag ja nicht umsonst...

Das Problem ist, dir scheint es an elementarem Grundwissen zu fehlen. 
Und zwar sowohl im Bezug auf C, als auch im Bezug auf das AtmelStudio. 
Und bevor das nicht sitzt, brauchst du mit lcd gar nicht erst anfangen. 
Auch nicht mit fertigen libs. Und Zeitdruck hin oder her. Sowas lässt 
sich nicht beschleunigen.

Daher auch meien Frage: Was kannst du denn in dem Bereich schon? 
Schonmal nen blinkende LED komplett selber im Studio zum laufen 
gebracht?

gruß cyblord

von Johannes B. (aprendiz)


Lesenswert?

cyblord ---- schrieb:
> Daher auch meien Frage: Was kannst du denn in dem Bereich schon?
> Schonmal nen blinkende LED komplett selber im Studio zum laufen
> gebracht?
>
> gruß cyblord


Ja durchaus. Ich habe mich anfangs schon eher mit den kleineren Sachen 
beschäftigt. Es ging auch schon weiter über Analogwerte verarbeitung.

Aber wenn man alleine nur mit Hilfe des Internets arbeitet kommt man 
doch schon mal an seine Grenzen. Und dann würde ich mich gern über 
Hilfreiche Antworten freuen anstatt immer die Verweise auf Tutorials 
etc...
Hätten diese mir geholfen würde ich hier nicht fragen.

Und Grundlagen etc. hin oder her... dieses Display muss bald mal laufen 
;)

gruß

von Cyblord -. (cyblord)


Lesenswert?

Johannes Berger schrieb:

> Ja durchaus. Ich habe mich anfangs schon eher mit den kleineren Sachen
> beschäftigt. Es ging auch schon weiter über Analogwerte verarbeitung.
Und dann sind so Kinkerlitzchen wie Dateien im Studio hinzufügen und 
Header-Dateien ein Problem?

> Aber wenn man alleine nur mit Hilfe des Internets arbeitet kommt man
> doch schon mal an seine Grenzen.
Nein ganz sicher. Da steht alles was man wissen muss. Aber Erfahrung 
ersetzt es nunmal nicht. Und die bekommt man Schritt für Schritt.

> Und dann würde ich mich gern über
> Hilfreiche Antworten freuen anstatt immer die Verweise auf Tutorials
> etc...

Naja soll man nun jedem einzeln immer wieder und wieder erklären wie das 
Studio funktioniert, wie C funktioniert, was Header-Dateien sind und wie 
lcd routinen Funktionieren? Frag was konkretes, dann bekommst du eine 
konkrete Antwort.

> Hätten diese mir geholfen würde ich hier nicht fragen.
Naja. Du fragst hier, weil du keine Zeit hast, die ordentlich mit dem 
Thema zu beschäftigen.

> Und Grundlagen etc. hin oder her... dieses Display muss bald mal laufen
> ;)
Tja und genau das geht so nicht.

von Karl H. (kbuchegg)


Lesenswert?

FAQ
Der Punkt 8: Ich hab da mehrere ...

: Bearbeitet durch User
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
Noch kein Account? Hier anmelden.