Hallo, ich bin absoluter Anfänger in der Mikrocontroller-Technik. Jetzt will ich eine Display programmieren auf welchem ich einen Text ausgebe. Das Funktioniert ganz gut. Leider ist bei mir der Fall das wenn ich dann nochmals die Taste drücke das Display "Flackert", weil der Text neu im Display erscheint. Wie kann ich dies verhindern?
Sourcecode anpassen. Vielleicht postest du ihn sogar, damit wir auch einen Blick drauf werfen können um dich bei deinem Problem zu unterstützen... Falls du uns lässt.
Man kann flackern vermeiden wenn man das Display vor dem neu Schreiben nicht erst komplett löscht. Sondern es wird nur der Cursor wieder am Anfang plaziert und der alte Text überschrieben. Da muss man aber dann bei kürzeren neuen Texten aufpassen und am Ende mit Leerzeichen das restliche Display vollschreiben sonst bleibt der alte Text dort natürlich stehen. gruß cyblord PS: Kann es sein dass die Überschrift absolut nicht zum Beitrag passt?
cyblord ---- schrieb: > Man kann flackern vermeiden wenn man das Display vor dem neu Schreiben > nicht erst komplett löscht. Sondern es wird nur der Cursor wieder am > Anfang plaziert und der alte Text überschrieben. Da muss man aber dann > bei kürzeren neuen Texten aufpassen und am Ende mit Leerzeichen das > restliche Display vollschreiben sonst bleibt der alte Text dort > natürlich stehen. > > gruß cyblord > > PS: Kann es sein dass die Überschrift absolut nicht zum Beitrag passt? /* * LCDAnsteuerung.c * * Created: 28.01.2013 20:00:51 * Author: test */ #include <avr/io.h> #include "lcd-routines.h" #define Taster1 PB0 #define Taster2 PB1 int main(void) { char *textOld; char *text1; char *text2; *text1="Erste Zeile"; *text2="Zweite Zeile"; DDRB &= ~(1<<DDB0); DDRB &= ~(1<<DDB1); PORTB |= (1<<Taster1); PORTB |= (1<<Taster2); lcd_init(); lcd_clear(); while(1) { if (bit_is_clear (PINB, Taster1) && (*textOld != *text1)) { lcd_init(); lcd_setcursor(0,1); *text1="Erste Zeile"; lcd_string(*text1); *textOld=*text1; if (*text1 == *textOld) { lcd_init(); lcd_setcursor(0,1); lcd_string(*text2); } } if (bit_is_clear (PINB, Taster2)) { lcd_init(); lcd_setcursor(0,2); lcd_string(*text2); } } }
Das Flackern kommt daher, dass Du bei jedem Tastendruck eine Initialisierung des LCD durchführst. Das ist unnötig. Das LCD muss nur einmal, vor Begin der while-Schleife, initialisiert werden.
Uwe H. schrieb: > #include "lcd-routines.h" Wo hast du die hergeklaut? Uwe H. schrieb: > lcd_init(); Diese Funktion rufst du ziemlich häufig auf. Bist du sicher, dass das notwendig ist?
Hi Was soll das lcd_init(); in jeder Funktion? Das macht man einmal am Anfang. Kein Wunder, das es flackert. MfG Spess
Absoluter Schrott-Code. Hast du dir mal überlegt was die lcd_init macht? Hast du mal ins Datenblatt geguckt? Hast du überhaupt mal nachgedacht? Absolut sinnloses benutzen einer lib und dann meckern wenn das Display flackert. Alle Achtung. Beschäftige dich mal mit der Materie und dann komm wieder. Unglaublich frech. gruß cyblord
Warum initialisierst du dein Display dauern? Das kostet einen Haufen Zeit, sorgt dadurch für das von dir beobachtete Flackern und überflüssig. Wie der Begriff "Initialisieren" schon von der Bedeutung des Wortes her sagt, ist das nur einmal - zu Begin der Programms - nötig. Danach ist der Speicher im Display sinnvoll belegt und der Prozessor ist bereit für Darstellung von Texten.
J.-u. G. schrieb: > Das Flackern kommt daher, dass Du bei jedem Tastendruck eine > Initialisierung des LCD durchführst. Das ist unnötig. Das LCD muss nur > einmal, vor Begin der while-Schleife, initialisiert werden. Och Mann, er hätte auch selbst einen Blick in die Doku seiner Lib werfen können :-/
Silvan König schrieb: > Och Mann, er hätte auch selbst einen Blick in die Doku seiner Lib werfen > können :-/ Hast Recht. Ich bin mir aber ziemlich sicher, das auf den TO noch weitere Probleme zukommen werden, so dass er später des öfteren noch einen Blick in die Doku werfen muss.
@cyblord vielleicht hat er anfangs geschriueben das er Anfänger ist. Wenn jeder erst ejde Doku und Anleitung und dann noch das komplette Buch des Compilers etc pp elsen würde, wofür bäuchte er dann Dich?! Schinmal darüber nachgedacht, das die Vorteile des Internets daran leigen, das ejder ehute spontan eine Frage stellen kann zu sienem Proble, die lösung erhält udn so innerhalb wenger Stunden ein lauffähiges c System hat?!?! Mal überlegt wie das noch vor vielen Jahren war, als man sich mühsam in der Bücherei alles zusammengesucht hat und nach Tagen / Wochen die ersten Erfolge hatte!! Ich habe hier oft den Eindruck, das viele den Vorteil des Internets nicht verstehen Wie ist es denn nun ausgegangen? Ich könnte mir gut vorstellen das das unnötige Init noch nicht mal das flackern verursacht, aber wie hier schon erwähnt das nicht entprellen des Taster hierfür verantwortlich sein könnte. Beides zusammen ist natürlich doppelt verdächtig für das Problem
Kim Schmidt schrieb: > @cyblord > vielleicht hat er anfangs geschriueben das er Anfänger ist. > Wenn jeder erst ejde Doku und Anleitung und dann noch das komplette > Buch des Compilers etc pp elsen würde, wofür bäuchte er dann Dich?! Weil in den Dokus, Anleitungen, Büchern auch nicht alles steht und Restfragen offen bleiben. Aber es ist sinnlos, sich mit Differentialgleichungen zu beschäftigen, ehe man das kleine Einmal-Eins und einfaches Formalumstellen gelernt hat. Und DAS kann man sehr wohl lernen, indem man die Grundlagen nachliest und für sich selbst Übungsstunden investiert. Oder muss da auch die Mama daneben sitzen und alles kontrollieren? > Schinmal darüber nachgedacht, das die Vorteile des Internets daran > leigen, das ejder ehute spontan eine Frage stellen kann zu sienem > Proble, die lösung erhält udn so innerhalb wenger Stunden ein > lauffähiges c System hat?!?! Schon mal darüber nachgedacht, dass es sinnvoll ist, sich die absoluten Grundlagen erst mal soweit beizubringen, dass man überhaupt sinnvolle Fragen stellen kann? > Mal überlegt wie das noch vor vielen Jahren war, als man sich mühsam in > der Bücherei alles zusammengesucht hat und nach Tagen / Wochen die > ersten Erfolge hatte!! Been there. Done that. Und weißt du, was das wirklich lustige an der ganzen Sache ist? Genau diejenigen, die durch diese Mühle durchmussten, sind diejenigen die hier Fragen`kompetent beantworten, eben weil sie das alles von der Pieke auf gelernt haben. Mühsam, aber nachhaltig. Uns wird dann immer wieder gerne mal vorgeworfen, dass wir das alles ja schliesslich auch nicht von Geburt auf gekonnt hätten. Und das stimmt sogar. Keiner ist mit dem Wissen zur Welt gekommen. Wir alle mussten durch die Schule durch, die da heißt: Lesen, lernen, probieren, fluchen, anderen Code studieren. Du kannst dir gar nicht vorstellen, WIE mühsam im Vergleich zur heutigen Fragerei in einem Forum das alles war. Aber: Wenn man etwas dann nach Tagen und Wochen endlich intus hatte, dann hatte man es auch wirklich intus! Weil man jede Anweisung im Code 'mit dem Vornamen kannte'. Und mit der Zeit wurde man besser und besser. Das vergessen diejenigen leider gerne, die uns dann vorwerfen, das wir das Wissen schon haben und sie nicht. Da steckt für jeden von uns auch eine Menge Zeit drinnen um genau dieses Wissen sich erst mal anzueignen. UNd ja, wir alle haben genau gleich angefangen: bei 0. Wir haben unser Wissen nicht daher, weil wir 5 Fragen in einem Forum gestellt haben, sondern weil wir die Ausdauer hatten, durch die Mühle durchzugehen und zu üben und zu probieren. Ich hab in meinem Programmierer-Leben wahrscheinlich schon mehr Code weggeworfen und als unbrauchbar abqualifiziert als du je programmiert hast. > Ich habe hier oft den Eindruck, das viele den Vorteil des Internets > nicht verstehen Schnelle, scheinbare Lösungen, die andere für einen erarbeitet haben. > Ich könnte mir gut vorstellen das das unnötige Init noch nicht mal das > flackern verursacht, aber wie hier schon erwähnt das nicht entprellen > des Taster hierfür verantwortlich sein könnte. Nö. Du kannst den immer gleichen Text am LCD so oft übereinander malen wie du willst. Da flackert nichts. Flackern entsteht erst, wenn sich die Anzeige zu oft ändert. Sei es durch dauerndes 'LCD löschen' oder eben laufendes Neuinitialisieren (welches meistens in der init Funktion selbst auch noch einen LCD-lösch Befehl enthält)
Interessieren würde mich nur, wie er das da
1 | char *text1; |
2 | char *text2; |
3 | *text1="Erste Zeile"; |
4 | *text2="Zweite Zeile"; |
ohne Error/Warnung durch den Compiler gekriegt hat.
Karl Heinz Buchegger schrieb: > Interessieren würde mich nur, wie er das da > >
1 | > char *text1; |
2 | > char *text2; |
3 | > *text1="Erste Zeile"; |
4 | > *text2="Zweite Zeile"; |
5 | >
|
> > ohne Error/Warnung durch den Compiler gekriegt hat. Das ist noch nicht alles, hier noch mehr Vorkommnisse:
1 | if (bit_is_clear (PINB, Taster1) && (*textOld != *text1)) |
2 | *text1="Erste Zeile"; |
3 | lcd_string(*text1); |
4 | *textOld=*text1; |
5 | if (*text1 == *textOld) |
6 | lcd_string(*text2); |
Strings kopieren/vergleichen macht man anders. ;-)
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.