Servus, Ich möchte gerne meinem ATmega16 mit einem HD44780 LCD zum laufen bringen. Der Schaltplan ist so ausgerüsstet so das ich mit einen ISP der über einen MysmartUSB Mk2 daten überträgt. Bis jetzt hab ich von einen kolleg eine 8-bit Version für den LCD benutzt. jetzt brauch ich leider einen Pin von den Anschluss zum LCD um eine PWM zu erzeugen (PB3). Weshalb ich den Display jetzt in 4-bit modus benutzen will. Leider bin ich noch ein anfänger was c code geht, und kann nur sachen umschreiben (und vllt ein paar eingänge ausgänge so ansteuern das ein paar LEDs leuchten). Weil ich jetzt nicht so tief ins programm reinhängen will, hab ich eine LCD Library aussm netz geholt. Ich habe schon die Source files und Header files ins programm reingemacht. zusätzlich hab ich alle datein verändern und zu meine hardware angepasst (F_CPU, Ports, etc.) Ich hab einen bild von solution damit man sehen kann wie ich das eingefügt habe. >ist das so richtig? der "Hauptprogrammtest.c" ist einfach nur ein kleines programm den ich geschrieben hab um den LCD zu testen. Ich weiss jetzt nicht wie ich einen text zum lcd senden kann. >Kann mir jemand verbesserungs vorschläge machen? falls die infos nicht reichen bitte nur sagen. C: Ich bedank mich in vorraus für eure antwort. Gruß, Oxycotton
Du solltest dir zuerst deine Portaufteileung nochmal überlegen. Während du die zeit- und umschaltkritischen Signale mühselig mit Relais(!) umschaltest, verschwendest du zwei volle Ports für olle LED, die man bequem mit einem Port und einem Multiplex-Pin abhandeln könnte, maximal brauchst du noch zwei Transistoren. Machs also umgekehrt, die LED teilen sich den Port und LCD/ISP bekommen was eigenes.
Oxy schrieb: > Weil ich jetzt nicht so tief ins programm reinhängen will So geht das nicht, das ist dir hoffentlich klar. Du musst schon wenigstens die Doku zum herkopierten Quellcode lesen. Und die steht schlimmstenfalls in ihm selber drin. Oxy schrieb: > Ich weiss jetzt nicht wie ich einen text zum lcd senden kann. Nicht nur kopieren ist die Devise, sondern auch lesen und kapieren...
1 | /*************************************************************************
|
2 | Display character
|
3 | Input: character to be displayed
|
4 | Returns: none
|
5 | *************************************************************************/
|
6 | void lcd_putc(char c) |
7 | {
|
8 | lcd_write(c,1); |
9 | }
|
10 | |
11 | |
12 | /*************************************************************************
|
13 | Display string
|
14 | Input: string to be displayed
|
15 | Returns: none
|
16 | *************************************************************************/
|
17 | void lcd_puts(const char *s) |
18 | {
|
19 | register char c; |
20 | |
21 | while ((c=*s++)) |
22 | lcd_putc(c); |
23 | }
|
:
Bearbeitet durch Moderator
Lothar M. schrieb: > So geht das nicht, das ist dir hoffentlich klar. Du musst schon > wenigstens die Doku zum herkopierten Quellcode lesen. Und die steht > schlimmstenfalls in ihm selber drin. sorry ich glaub du hast mich falsch verstanden, ich hab mir schon die Doku angeschaut, und wie man die buchstaben herbekommt versteh ich auch. ich habe den code den du mir gegeben hast schon mit den LCD library den ich im anhang habe ausprobiert und da kommt dann der fehler der sich jetzt im anhang befindet.
Matthias S. schrieb: > Du solltest dir zuerst deine Portaufteileung nochmal überlegen. > Während ich hab den Schaltplan nicht ausgedacht sondern mein ausbilder, du kannst dich ja bei ihm beschwern wenn dir die Portaufteilung nicht gefällt. > du die zeit- und umschaltkritischen Signale mühselig mit Relais(!) das die Leitung durch die Relais gehen ist irrelevant weil der LCD schon in 8bit modus funktioniert hat. hab ich oben aber auch schon geschrieben aber danke. > umschaltest, verschwendest du zwei volle Ports für olle LED, die man > bequem mit einem Port und einem Multiplex-Pin abhandeln könnte, maximal > brauchst du noch zwei Transistoren. da geb ich dir recht, hätte man wirklich so machen könne. Wenn ich die wahl hätte, und das zu den zeitpunkt gewusst wo die platine gemacht worden ist, hätte ich auch was gesagt. aber es ist wie es ist. > Machs also umgekehrt, die LED teilen sich den Port und LCD/ISP bekommen > was eigenes. Ich kann jetzt nichts mehr ändern weil dir platine schon fertig ist mit alle bauteile usw. ich muss jetzt mit den schaltplan so klar kommen. gruß, Oxy
so ich habe jetzt versucht den Code in meinen Main programm mit einzubinden, aber da kommt jetzt dieser fehler (siehe anhang) da steht das der lcd_write deklariert werden muss, was muss ich oben eingeben das es dann geht??? -OXY
Im Ernst: Ich kann nicht hartlöten. Daher würde ich mit meinem neuen Lötbrenner erst mal an ein paar kleinen Abfallstücken und Rohrstücken den Prozess und die Handhabung üben, bevor ich die Gasleitung in einem Haus zusammenlöte... Du kennst dich mit dem Compiler nicht aus. Du willst aber sofort das Monsterprojekt compilieren? Sowas nenne ich "Mutig!" Warum übst du nicht einfach mal mit einfachen kleinen Projekten und blinkenden LEDs. Klar dauert das. Diesen Prozess nennt man "Lernen". Und wenn du dann verstehst, /was da wie, wo und vor Allem warum eingebunden werden muss, dann packst du das große Projekt an. Oxy schrieb: > so ich habe jetzt versucht den Code in meinen Main programm mit > einzubinden WIE hast du das "versucht"? Es war doch ganz oben schon mit eingebunden...
Lothar M. schrieb: > Im Ernst: > Ich kann nicht hartlöten. > Daher würde ich mit meinem neuen Lötbrenner erst mal an ein paar kleinen > Abfallstücken und Rohrstücken den Prozess und die Handhabung üben, bevor > ich die Gasleitung in einem Haus zusammenlöte... Diese beispiele sind top > Du kennst dich mit dem Compiler nicht aus. > Du willst aber sofort das Monsterprojekt compilieren? Sowas nenne ich > "Mutig!" Bitte? > Warum übst du nicht einfach mal mit einfachen kleinen Projekten und > blinkenden LEDs. Klar dauert das. Diesen Prozess nennt man "Lernen". Und > wenn du dann verstehst, /was da wie, wo und vor Allem warum > eingebunden werden muss, dann packst du das große Projekt an. ok, also ich habe dieses programm nur so zum spass geschrieben und wollte dann den LCD mit einbinden, das programm selber ist nicht das problem, aber das einbinden mit den LCD display ist das problem. du brauchst mir jetzt nicht sagen das ich schlecht bin, weil ich mit C nur seit 2 monate arbeite. also komm mal runter... ich will nur den LCD in 4-bit modus zum laufen bekommen. mehr nicht. ich habe alles getann aber ich weiss nicht warum das ganze jetzt nicht läuft. with super friendly greetings, OXY
Oxy schrieb: > also komm mal runter... Dito. Gut, nachdem das geklärt ist können wir weiter machen: > ich will nur den LCD in 4-bit modus zum laufen bekommen. mehr nicht. Ich will nur die Galseitung im Haus löten. Mehr nicht. > ich habe alles getann aber ich weiss nicht warum das ganze jetzt nicht > läuft. Ja, das sage ich doch: du tust irgendwas, weißt aber nicht, ob die Richtung stimmt. > aber ich weiss nicht warum das ganze jetzt nicht läuft. Weil ausser dir keiner weiß, WAS du "alles" getan hast, kann dir keiner helfen. Ist irgendwie klar... Es weiß auch keiner, WO denn jetzt diese implizite Deklaration passiert. Man sieht nur dass du da irgendein Problem hast. Oxy schrieb: > so ich habe jetzt versucht den Code in meinen Main programm mit > einzubinden Hast du die lcd_puts() aus der hd44780.c in dein Hauptprogramm rüberkopiert? > weil ich mit C nur seit 2 monate arbeite. Du bist nicht der einzige. Das hat jeder durchgemacht, der heute C programmiert...
:
Bearbeitet durch Moderator
> Oxy schrieb: >falls die infos nicht reichen bitte nur sagen. Wenn sie lesen können, hättest du diesen Satz gesehen (erster post). Ich hab das geschrieben damit wenn es noch fragen gibt oder irgend was, was ich bisher gesagt hab fehlt, das sie das mir dann sagen damit ich schnell eine Lösung finden kann. Ich hab mittlerweile das Problem alleine gelöst. ich hab den LCD-library falsch mit den Hauptprogramm gebunden. und genau das wollte ich wissen, ob ich den LCD-library falsch gebunden hab. danke nochmal für die werde ich in der Zukunft benutzen wenn ich jemand nerven will. Gruß, OXYCOTTON
Oxy schrieb: > ich hab den Schaltplan nicht ausgedacht sondern mein ausbilder, du > kannst dich ja bei ihm beschwern wenn dir die Portaufteilung nicht > gefällt. Von einem Ausbilder hast du bis dato nichts erzählt. Viel Spass noch.
Matthias S. schrieb: > Von einem Ausbilder hast du bis dato nichts erzählt. Viel Spass noch. ??????????????????? OXY
Frag deinen Ausbilder, der wird dafür bezahlt. (Mehr meinte Matthias nicht.)
:
Bearbeitet durch User
Du programmierst seit 2 Monaten C und hast noch immer keine Ahnung wie man ein Projekt aus mehereren Source Code Dateien aufbaut, bzw. wie grundlegende Syntax-Elemente von C funktionieren?
1 | int main(void) |
2 | {
|
3 | DDRA = 0xFF; //Port A als Ausgang für LEDs |
4 | DDRC = 0xFF; //Port C als Ausgang für LEDs |
5 | DDRD |= (0<<PD4); //Taster-Umschalter Eingang |
6 | DDRD |= (1<<PD5); //RS ausgang |
7 | DDRD |= (1<<PD6); //R/W ausgang |
8 | DDRD |= (1<<PD7); //E ausgang |
9 | DDRB = 0xF0; //Port B als Ausgang |
10 | PORTA = 0x00; //LEDs auf null gesetzt. |
11 | PORTC = 0x00; //LEDs auf null gesetzt. |
12 | RS = 0; |
13 | |
14 | void lcd_init(); |
15 | void lcd_clrscr(); |
16 | void lcd_putc(char c) |
17 | {
|
18 | lcd_write(c,1); |
19 | }
|
20 | |
21 | while(1) |
Na bumm. Schönenn Gruss an deinen Ausbildner. Er soll dir erst mal ordentliche Literatur kaufen.
Da
1 | /*
|
2 | * lcdtastertest4bitmodus.c
|
3 | *
|
4 | * Created: 31.08.2015 10:00:55
|
5 | * Author: Mar
|
6 | */
|
7 | |
8 | #define F_CPU 4000000
|
9 | #include <avr/io.h> |
10 | #include <util/delay.h> |
11 | #include <stdio.h> |
12 | #include <G:/mikcrocontrollerkurs/cprogramming/lcdtastertest4bitmodus/lcdtastertest4bitmodus/lcdtastertest4bitmodus/lib/lcd/hd44780.h> |
du hast doch den #include für das Header File mit den Protoypen für die LCD Funktionen. Was fummelst du dann noch selber irgendwelchen Code rein? Lass deine "Ergänzung" aus dem main schleuigst wieder verschwinden. PS: einen noch längeren und noch umständlicheren Pfadnamen zum Header File hast du dir nicht ausdenken können?
Oxy schrieb: > Ich weiss jetzt nicht wie ich einen text zum lcd senden kann. Na wie wohl? Indem du die entsprechenden Funktionen aufrufst
1 | .....
|
2 | |
3 | |
4 | int main() |
5 | {
|
6 | lcd_init(); |
7 | |
8 | lcd_puts( "Hallo" ); |
9 | ...
|
>>Kann mir jemand verbesserungs vorschläge machen?
Ja. Kauf dir ein C Buch. Dein Ausbildner ist offenbar eine Niete, wenn
du nach 2 Monaten immer noch nicht Funktionsaufrufe von Protoypen
unterscheiden kannst.
Karl H. schrieb: > Ja. Kauf dir ein C Buch. Dein Ausbildner ist offenbar eine Niete, wenn > du nach 2 Monaten immer noch nicht Funktionsaufrufe von Protoypen > unterscheiden kannst. naja der meinung bin ich auch...da stimm ich zu. OXY
Karl H. schrieb:
du hast bei den meisten sachen recht, was ich vielleicht noch sagen
sollte ist das ich erst seit 3 jahre in deutschland lebe. hab mein
ganzes leben im ausland gewohnt. hauptsache ist, du kannst mich zum teil
verstehen und damit bin ich erst mal zufrienden.
OXY
es ist gut zu wissen das man so beleidigt werden kann wenn das programm schon läuft. Ich hab den LCD in 4 bit modus zum laufen gebracht..dank deine..oh warte ich hab das jetzt alles selber hin bekommen. Ein tip für zukünftige posts: weniger beleidigen, mehr helfen. OXY
Oxy schrieb: > ist das ich erst seit 3 jahre in deutschland lebe. hab mein > ganzes leben im ausland gewohnt. Das hat damit nichts zu tun. Literatur zur Programmiersprache C gibt es in vielen Sprachen. Wenn alle Stricke reissen, dann gibt es immer noch die Originale, die meistens auf Englisch sind. Ohne grundlegende Literatur wirst du nicht weit kommen. Literatur zum Thema "Wie funktioniert die Programmiersprache C" und nicht nur "Mikrocontroller Grundkurs mit einem minimalen Anhang über C". Und ja. Es ist völlig normal, dass sich bei dir die Bücher anfangen werden zu stapeln. Da musst du durch. Programmieren ist anspruchsvoller als alles andere was du jemals gemacht hast.
Oxy schrieb: > Ein tip für zukünftige posts: > > weniger beleidigen, mehr helfen. Ein Tip für zukünftige Postings: mehr selber lernen und weniger auf Grundlagenhilfe aus einem Forum vertrauen. Ja, klar. Du hast das selber hinbekommen. Du verzweifelst seit 1 1/2 Tagen daran, wie man Funktionen aufruft, aber du hast das selber hinbekommen :-)
:
Bearbeitet durch User
Naja da gibt es so ein spruch, der ist top.
> "Wer kann, Der kann" - ?
mit Freundlichen Grüßen,
OXY
Mir fällt da noch der Begriff "Beratungs-resistent" ein.
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.