Forum: Compiler & IDEs LCD library von Peter Fleury


von user (Gast)


Lesenswert?

Ich bin jetzt schon ewigkeiten am probieren (auch die beispiele hier
ausm Forum) aber irgendwie klappt das alles nicht

Hat vielleicht mal einer nen ganz einfach zu verstehendes Prog für
mich?

Was ich jetzt gebastelt hab sieht so aus:

#include <stdlib.h>
#include <avr/io.h>
#include "lcd.h"

int main(void){
  char txt[] = 'TEST';
  lcd_init (LCD_DISP_ON_CURSOR);
  lcd_puts (const char * txt)
  while(1);
}

Aber lässt sich nichtmal compilieren

von mthomas (Gast)


Lesenswert?

zumindest 3 fehler fallen auf anhieb auf
char txt[] = 'TEST';  ->  char txt[] = "TEST";
lcd_puts (const char * txt) -> lcd_puts (txt);

lcd.c auch im makefile eingebunden?

von Axos (Gast)


Lesenswert?

oder schreib oben nach

#include "lcd.h"

noch

#include "lcd.c"

die lcd.h und .c muss natürlich im selben verzeicniss leigen, sonst mit
pfadangabe einbinden !
und die fehler die mthomas gesagt hat.

hast du auch die nötigen weinstellungen in der lcd.h gemacht (ports
usw.)? und wie hast du das lcd angeschlossen ?

MfG Axos

von user (Gast)


Lesenswert?

Danke, so klappt es.
War wohl die .c die immer gefehlt hatte
(Was würd ich nur ohne euch machen :) )

Noch was anderes, das display was ich hab hat 4Zeilen mit je 27Zeichen

Laut datenblatt is je ein HD44780U für 2 Zeilen zuständig. So weit so
gut, aber wie mach ich das jetzt am einfachsten mit dem ansteuern?

Die Anschlüsse für beide controller sind die selben, es gibt nur den
"E" anschluss zweimal.
E1 hängt bei mir an PD6 und E2 an PD7

kann das die libary auch direkt, das ich einfach nur 4 zeilen angeben
muß in der config?

von Axos (Gast)


Lesenswert?

nee, das geht sowiet ich weiss nicht ! da musst du dir selber ne library
schreiben. Du hast des display doch hoffentlich nicht bei ebay gekauft
oder ? Du kannst mit der library die du hast nur eine displayhälfte
ansteuern.

An deiner stelle würd ich versuchen die library zu editieren! sollte
nicht alzu schwer sein !
Kannst du mirs bitte sagen wenn dus hibekommen hast ? Ich hab auch noch
2 solche displays hier rumfahren !

MfG Axos

von user (Gast)


Lesenswert?

doch, hab das Display von ebay, hat aber auch bloß 10€ gekostet
was soll denn da so schlimm dran sein?

werd mal versuchen ob ich es irgendwie hinbekomme. Hab ja erst mit C
angefangen.
Bisher hab ich immer nur mit Perl programmiert

von Axos (Gast)


Lesenswert?

weil die displays restposten von www.pollin.de sin. Da kostet des 4,95
EUR ! Naja des nexte mal weisste es !

MFG

von user (Gast)


Lesenswert?

hmm, stimmt
hättest du ja mal früher sagen können :)

Aber im vergleich zu den Preisen bei Conrad war es troßdem noch günstig
:)

von Axos (Gast)


Lesenswert?

@user:
hättest mich gefragt*g*. hast du zufällig icq ? Dann kann ich dir evtl.
mit deinem display helfen !


MfG Axos

von Chris (Gast)


Lesenswert?

@Axos:

Bitte empfehl Anfängern nicht solchen Code.
Mit #include bindet man niemals .c-Dateien ein, ausschließlich
Header.

.c-Dateien werden ins Makefile geschrieben.

von user (Gast)


Lesenswert?

funktioniert aber gut mit der .c im include :)
was soll denn da schlimm dran sein?



@Axos: ICQ -> 49575204

von user (Gast)


Angehängte Dateien:

Lesenswert?

So, ich hab die lib mal angepasst das es eigentlich mit beiden laufen
müsste,
tut es aber leider nicht :(


Es lässt sich nur der erste ansteuern, mit dem 2. klappt es nicht
mehr...
Hab ich irgendwo nen denkfehler drin oder ist das nen anderes problem?

von Chris (Gast)


Lesenswert?

> funktioniert aber gut mit der .c im include :)
> was soll denn da schlimm dran sein?

Natürlich funktioniert es manchmal, das ist keine Frage. Aber
nichtsdestotrotz ist es grober Unfug.

Ich gebe mal ein Beispiel.
Die Datei main.c sieht so aus:
#include "log.c"
#include "lcd.c"

int main()
{
  log_mir_was("Hallo");
  init_lcd();
}

Die Datei log.c macht nix außer obiger Funktion zu definieren (den code
spar ich mir).

Die Datei lcd.c sieht nun aber so aus:
#include "log.c"

void init_lcd()
{
  log_mir_was("init_lcd()");
}


Versuch das mal zu kompilieren.
Sowohl lcd.c als auch main.c benötigen eine Funktion aus log.c, daher
wird sie zweimal inkludiert. Der Compiler sieht nun aber zweimal in
einer Übersetzungseinheit (die da heißt main.c) dieselbe Funktion. Das
ist verboten, deswegen führt das zu einem Fehler.

Und an genau solchen Fehler stoßen sich dann Anfänger.
Deswegen erklärt mans lieber gleich richtig, vor allem weil die
richtige Erklärung gerade hier überhaupt keinen Mehraufwand darstellt.

Also: .c-Dateien immer als eigene Übersetzungseinheit im Makefile
angeben, niemals mit #include direkt einbinden.

von Peter Fleury (Gast)


Lesenswert?

Zu meiner LCD-Library gibts doch ein Beispiel (test_lcd.c) mit Makefile.
Es sollte doch wohl nicht zu schwierig sein dieses Makefile an ein
eigenes Projekt anzupassen.

Tip: Zeile TARGET = und SRC = im Makefile anpassen

von user (Gast)


Lesenswert?

Also, soweit läuft ja alles, mein problem ist nur, das sich der 2.
Controller nicht ansteuern lässt


E1 ist an PD6 und E2 ist an PD7, die restlichen anschlüsse sind für
beide controller die selben.

Mit E1 läuft alles ohne Probleme, nur mit E2 halt nicht.

Hab mir jetzt einfach überlegt, das ich halt je nachdem welche hälfte
ich ansteuern will halt entweder E1 oder E2 benutzte aber wieso klappt
das nicht?

Wenn ich E1 und E2 Hardwaremässig tausche, dann funktioniert die 2.
hälfte ohne probs, aber die 1. nicht mehr. also kann es nur irgendwo
nen problem in der software sein

von mthomas (Gast)


Lesenswert?

Ohne an die zwei Controller angepassten Quellcode zu sehen kann, wird es
kaum moeglich sein weiterzuhelfen.

von user (Gast)


Lesenswert?

den hatte ich nen stück weiter oben mit angehangen (lcd.rar)

hab es jetzt aber hinbekommen.

hab jetzt noch geändert, das vor dem benutzten eines "E" anschlusses
der andere nochmal ausgeschaltet wird (obwohl er das auch so eigentlich
schon sein sollte)

und was auch wichtig zu sein schein, zwischen dem ansprechen der zwei
controller muß eine kleine pause liegen (delay(2000)) damit es richtig
funktioniert

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.