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
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?
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
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?
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
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
weil die displays restposten von www.pollin.de sin. Da kostet des 4,95 EUR ! Naja des nexte mal weisste es ! MFG
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 :)
@user: hättest mich gefragt*g*. hast du zufällig icq ? Dann kann ich dir evtl. mit deinem display helfen ! MfG Axos
@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.
funktioniert aber gut mit der .c im include :) was soll denn da schlimm dran sein? @Axos: ICQ -> 49575204
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?
> 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.
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
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
Ohne an die zwei Controller angepassten Quellcode zu sehen kann, wird es kaum moeglich sein weiterzuhelfen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.