www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD Wait Busy


Autor: I. L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

ich habe ein Problem mit meiner Wait-Busy Routine. Wenn ich das 
Busy-Flag abfragen möchte klappt dies nicht. Ich habe eine 
While-Schleife in der ich den enable Pin des LCDs toggeln lasse um somit 
das Ding zu aktualisieren.
Aus irgend einem Grund ist das Busy-Flag immer genau dann 0 wenn ich das 
Enable Bit auf 1 setze, danach ist es wieder 1, also immer invertiert.

Wenn ich anstelle der While-Schleife eine Warteschleife mache klappt 
alles.
Dahe denke ich mal es liegt nur an der Wait-Busy Routine.


Auszug:
#include "lcd.h"
#define nop()  __asm__ __volatile__("nop"::)

/* toggle Enable Pin to initiate write */
static void toggle_e(void)
{
  lcd_e_high();
  nop();
  nop();
  nop();
  nop();
  nop();
  lcd_e_low();
  
}

.
.
.
/*************************************************************************
Warte solange bus LCD nicht mehr busy
*************************************************************************/
  static uint8_t lcd_waitbusy(void)

{
   
  uint8_t c;    //Lesevariable für LCD
  DDRA = 0;    // PORTA als Eingang
  lcd_rw_high();    // Lesemodus für LCD
  lcd_rs_low();          // RS = Low ==> Intruction Mode
  toggle_e();
  _delay_us(10);
  c= PINA;    // PORTA auslesen
  
  while (PINA,PA7)
  {
  _delay_us(10);
  toggle_e();
  }
  
  lcd_rw_low();           // Lesemodus wieder aus => Schreibmodus
  lcd_rs_high();
  DDRA = 0b11111111;
  
  return (c);
  

}// lcd_waitbusy



Das LCD hängt an PORTA, RS = PC7, R/W = PC6 und E = PC5.
Das Busy-Bit geht nie von allein auf 0, habs schonmal ohne das Toggeln 
in der Warterschleife probiert, klappt auch nicht.

Ich verwende einen Atmega16 und die aktuelle Version des AVR-Studios und 
WinAVR. Optimierung ist OS, Änderungen ändern nichts.


Wo is der Fehler, ich hoffe ich habe Nichts vergessen zu posten.

Gruß Knut

Autor: I. L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso, ich verwende ein "Displaytech 162" von Reichelt, also ne standart 
Krücke...


Gruß Knut

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Um das Busy-Flag zu lesen muss E auf H sein. Also:

E auf H
Lesen
E auf L

MfG Spess

Autor: I. L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Funktioniert leider auch nicht...

Trotzdem danke

Autor: Bernhard M. (boregard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was ist das?
   while (PINA,PA7)
   {
     _delay_us(10);
     toggle_e();
   }

ich hätte da folgendes erwartet:
   while (PINA & (1 << PA7))
   {
     _delay_us(10);
     toggle_e();
   }

Autor: I. L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Uups, wie peinlich...
 static uint8_t lcd_waitbusy(void)

{
   
  uint8_t c;    // Lesevariable für LCD
  DDRA = 0;    // PORTA als Eingang
  lcd_rw_high();    // Lesemodus für LCD
  lcd_rs_low();    // RS = Low ==> Intruction Mode
  toggle_e();
  lcd_e_high();
  _delay_us(10);
  c= PINA;    // PORTA auslesen
  while (PINA,PA7 & (1<<PA7))
  {
  _delay_us(10);
  }
  lcd_e_low();
  
  
  _delay_us(10);
    
  lcd_rw_low();    // Lesemodus wieder aus => Schreibmodus
  lcd_rs_high();
  DDRA = 0b11111111;
  
  return (c);
  

}// lcd_waitbusy



Funktionert fast, es fehlen die ersten 7 Zeichen!
Woran liegt das jetzt wieder?

Gruß Knut

Autor: I. L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keiner ne Idee?


Gruß Knut

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ingo L. schrieb:
> while (PINA,PA7 & (1<<PA7))

Was ist das?  Du hast while (0) sehr umständlich ausgedrückt.

Autor: I. L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh mann, ich bin heute scheinbar nicht bei der Sache. Natürlich, das war 
das Problem... Funktioniert! Besten Dank.


Gruß Knut

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.