www.mikrocontroller.net

Forum: Compiler & IDEs LCD library von Peter Fleury


Autor: user (Gast)
Datum:

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

Autor: mthomas (Gast)
Datum:

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

Autor: Axos (Gast)
Datum:

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

Autor: user (Gast)
Datum:

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

Autor: Axos (Gast)
Datum:

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

Autor: user (Gast)
Datum:

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

Autor: Axos (Gast)
Datum:

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

MFG

Autor: user (Gast)
Datum:

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

Autor: Axos (Gast)
Datum:

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


MfG Axos

Autor: Chris (Gast)
Datum:

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

Autor: user (Gast)
Datum:

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



@Axos: ICQ -> 49575204

Autor: user (Gast)
Datum:
Angehängte Dateien:

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

Autor: Chris (Gast)
Datum:

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

Autor: Peter Fleury (Gast)
Datum:

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

Autor: user (Gast)
Datum:

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

Autor: mthomas (Gast)
Datum:

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

Autor: user (Gast)
Datum:

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

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.