moin, eine Frage zu der Fleury-Bibliothek. Möchte man ein Display im 4 Bit Modus betreiben, dann legt man doch den RW-Pin des Display auf GND. Fleury möchte in seiner Bib jedoch einen Pin des Mikrocontrollers an eben dieses RW hängen. Ausschnitt #define LCD_RW_PORT LCD_PORT #define LCD_RW_PIN 2 Was ist nun, wenn man überhaupt keine Verbindung des Mikrocontrollers zu dem Display-Pin RW vorgesehen hat, sondern das Display mit dem Pin RW schlicht auf GND gelegt hat. Muss nun noch zusätzlich ein Pin des Mikrocontrollers an GND gehängt werden, um der Fleury Bibliothek gerecht zu werden? mfg
http://www.mikrocontroller.net/articles/LCD#FAQ Letzter Eintrag Wenn du das umgehen willst, müsstest du die Library umschreiben. Alle Stellen bei denen das Busy abgefragt wird müssten dann durch Warteschleifen mit sicherer Wartezeit ersetzt werden. Stattdessen könntest du auch eine andere LCD-Library nehmen. Imn der Artikelsammlung und in der Codesammlung stehen welche.
Stefan B. schrieb: > Wenn du das umgehen willst, müsstest du die Library umschreiben. Alle > Stellen bei denen das Busy abgefragt wird müssten dann durch > Warteschleifen mit sicherer Wartezeit ersetzt werden. Peter hat aber mitgedacht und die Abfrage des Busy Bits ist an nur einer Stelle in einer Funktion zentralisiert. Dort muss man angreifen und die Abfrage durch Warten ersetzen. -> No big deal > Möchte man ein Display im 4 Bit Modus betreiben, dann legt man doch > den RW-Pin des Display auf GND. Das eine hat mit dem anderne nichts zu tun. RW benötigt man, wenn man vom LCD auch lesen will.
gehe ich Recht in der Annahme, dass sich das Problem auf den folgenden Ausschnitt aus Fleury's Bib begrenzen lässt? /*********************************************************************** ** loops while lcd is busy, returns address counter ************************************************************************ */ static uint8_t lcd_waitbusy(void) { register uint8_t c; /* wait until busy flag is cleared */ while ( (c=lcd_read(0)) & (1<<LCD_BUSY)) {} /* the address counter is updated 4us after the busy flag is cleared */ delay(2); /* now read the address counter */ return (lcd_read(0)); // return address counter }/* lcd_waitbusy */ /*********************************************************************** ** Wie wäre denn nun eine praktikable Lösung für dieses Problem? Den Abschnitt: &(1<<LCD_BUSY)) müsste man löschen und stattdessen dann in die bisher leere While Schleife ein Delay Bereich eingeben? Welche Größenordnung müsste dieses denn haben, und in welcher Form müsste man es eingeben. In der Fleury Bib wird z.B. die Funktion "delay(2)" verwendet, welche Einheitengrößen sind denn hiermit gemeint? mfg
112 schrieb: > gehe ich Recht in der Annahme, dass sich das Problem auf den folgenden > Ausschnitt aus Fleury's Bib begrenzen lässt? Jain > Wie wäre denn nun eine praktikable Lösung für dieses Problem?
1 | static uint8_t lcd_waitbusy(void) |
2 | {
|
3 | delay(2000); |
4 | return 0; |
5 | }
|
die 2000, also 2 Millisekunden, sind sehr konservativ angenommen. Wenn alles läuft kann man mit halbieren den Wert sicher senken. Jain deshalb, weil man sich jetzt auch noch ansehen muss, wass denn mit dem Return Wert von lcd_waitbusy passiert. Durchsucht man den Code, stellt sich raus, dass er nur an einer Stelle benutzt wird. putc braucht den Wert um im Falle eines auszugebenden \n die Zeilenweiterschaltung richtig machen zu können. Dieses Feature ist zwar nett, ist aber auch nicht so wichtig. D.h. man könnte das auch ganz einfach dort stilllegen. Oder aber ganz einfach keinen \n ausgeben.
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.