Forum: Mikrocontroller und Digitale Elektronik Frage zu Fleury-Bib


von Großes F. (112)


Lesenswert?

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

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von 112 (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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
Noch kein Account? Hier anmelden.