www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage zu Fleury-Bib


Autor: Großes Fragezeichen (112)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: 112 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?
static uint8_t lcd_waitbusy(void)
{
    delay(2000);
    return 0;
}

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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.