LCDmultiPort Treiber, hängt sich auf

  • 1
  • 2
  • Page 1 of 2
Mathias
Benutzer
Avatar
Gender: n/a
Location: Weingarten - Baden
Posts: 310
Registered: 07 / 2003
Subject:

LCDmultiPort Treiber, hängt sich auf

 · 
Posted: 19.01.2020 - 17:36  ·  #1
Hallo,
der LCDmultiPort Treiber hängt sich genau bei "LCDsetup_M(LCD_m1); " auf.
Im Simulator bleibt er nicht hängen.
Hat jemand eine Idee?

Danke

Controller: ATmega328P
Compiler: 5.09.91

Code
Define:
  TWIpresc       = TWI_BR100;            // 100kBit/sec alt. TWI_BR400
  LCDmultiPort   = I2C_TWI;              // use TWIport
  LCDTYPE_M      = 44780;                // LCD controller type
  LCDrows_M      = 2;                    // 2 rows
  LCDcolumns_M   = 16;                   // 16 chars per line


Code
Procedure pInitLCDs;
Begin
  LCDsetup_M(LCD_m1);       // hier hängst sich der Controller auf!
  LCDsetup_M(LCD_m2);
  LCDsetup_M(LCD_m3);
  LCDbarInit_M;
  LCDbarSet1 (0, 8, 16, 100);
  LCDbarSet2 (0, 8, 16, 100);
  LCDbarSet3 (0, 8, 16, 100);
  LCDcursor_M (LCD_m1, false, false);  // Cursor off
  LCDcursor_M (LCD_m2, false, false);  // Cursor off
  LCDcursor_M (LCD_m2, false, false);  // Cursor off
  LCD_LED_1:= Ein;
  LCD_LED_2:= Ein;
End pInitLCDs;
Lschreyer
Schreiberling
Avatar
Gender: n/a
Posts: 527
Registered: 02 / 2007
Subject:

Re: LCDmultiPort Treiber, hängt sich auf

 · 
Posted: 20.01.2020 - 11:45  ·  #2
Pullups an SDA und SCL?
Ich hatte mal einen Grabstein auf der Platine wo eine der beiden Pullups hoch stand, da hakte das Programm dann auch genau dort.
Mathias
Benutzer
Avatar
Gender: n/a
Location: Weingarten - Baden
Posts: 310
Registered: 07 / 2003
Subject:

Re: LCDmultiPort Treiber, hängt sich auf

 · 
Posted: 20.01.2020 - 13:08  ·  #3
Ausgemessen, ja Pullups sind in Ordnung.

Frage, wenn die LCDs nicht angeschlossen sind, dann müßte eigentlich nur eine Fehlermeldung kommen?
Aber nicht abstürzen.
If not LCDsetup_M(LCD_m1) then ... Error … Endif;
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: LCDmultiPort Treiber, hängt sich auf

 · 
Posted: 20.01.2020 - 13:35  ·  #4
- auch wenn nur ein PCA9555 am Bus angeschlossen ist?
- Leitungslänge?
- PullUp wie groß?
- Vermutung: deine Displays sind nicht 100% 44780-kompatibel und deshalb funktioniert das Init nicht --> {$LCDnoInit} und selber schreiben

Gruss
Harry
Mathias
Benutzer
Avatar
Gender: n/a
Location: Weingarten - Baden
Posts: 310
Registered: 07 / 2003
Subject:

Re: LCDmultiPort Treiber, hängt sich auf

 · 
Posted: 20.01.2020 - 23:21  ·  #5
Pullups sind 2,2k
Leitungslänge ca. 8 cm
Das passt alles.

Nochmal:
Frage, wenn die LCDs nicht angeschlossen sind oder kein PCA9555 angeschlossen wäre oder keine Pullups, dann sollte doch der Controller beim Initialisieren der LCDs trotzdem nicht abstürzen?
Der Controller stürzt schon vor einer möglichen Fehlerabfrage ab.

Oder habe ich was nicht verstanden?
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: LCDmultiPort Treiber, hängt sich auf

 · 
Posted: 21.01.2020 - 07:41  ·  #6
Da laut Schaltplan im Standard-Manual LCDRW angeschlossen ist, vermute ich, daß der Treiber auch vom LCD lesen will.

Also evtl. mal nur einen 9555 mit Display anschliessen und mit dem Oszi schauen, was da passiert.

Harry
Lschreyer
Schreiberling
Avatar
Gender: n/a
Posts: 527
Registered: 02 / 2007
Subject:

Re: LCDmultiPort Treiber, hängt sich auf

 · 
Posted: 21.01.2020 - 08:00  ·  #7
Ich setze den Treiber auch oft ein, für ein externes Bedienteil.

Ich mache das Init immer so, dass ich im Treiber den TWI auf 100 KHz setze, nach dem Init dann auf 400.
Eine Variable LCD_ON setze ich nach Init, alle Zugriffe auf den Treiber erfolgen nur wenn das TRUE ist.
Um defekte Pullups zu erkennen frage ich die SDA und SCL Pins ab, und nutze TWISTATC um zu sehen ob der 9555 überhaupt da ist bevor ich initialisiere.
Der Controller reagiert nicht mehr wenn man den Init macht ohne dass der 9555 angeschlossen ist, zumindest bei mir ist das so.

Code

Procedure INITLCD;
begin

  lcd_on:=false;
  if ((PINC.0) AND (PINC.1)) then  // Abfrage, falls Pullup an SCL oder SDA defekt ist.
    if TWISTATC($20) then
      if lcdsetup_M(LCD_m1) then
        LCDon_M(LCD_m1);
        lcdclr_M(LCD_m1);
        lcdcursor_M(LCD_m1, false, false);
        lcd_on:= True;

        // Nach der Initiatlsierung den TWI auf 400 Hz setzen!
        TWICMASTERCTRLA:=TWICMASTERCTRLA AND %11110111;  // TWI Master OFF
        TWICMASTERBAUD:=35;                              //400 Hz  (CPUClock/(2XTWICLOCK))-5
        TWICMASTERCTRLA:=TWICMASTERCTRLA OR %00001000;   // TWI Master ON
      endif;
    endif;
  endif;
end;

Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: LCDmultiPort Treiber, hängt sich auf

 · 
Posted: 21.01.2020 - 15:07  ·  #8
Die Initialisisierung des 9555 erledigt der Multiport-Treiber selber und eine Umschaltung 100-->400kHz ist nicht notwendig.
Code

Define
        I2Cport      = PortC;
        I2Cdat       = 4;
        I2Cclk       = 5;

        LCDmultiPort = I2C_Soft;
        LCDrows_M    = 2;              { rows                                  }
        LCDcolumns_M = 16;             { columns per line                      }
        LCDtype_M    = 66712;
.
.
.
  LCDsetup_M(LCD_m1);
  LCDCursor_M(LCD_m1,false, false);
  LCDCLR_M(LCD_m1);


Hast du die aktuelle Version? Ich meine früher hängte sich das auf, wenn kein Bauteil da war, aber mit der aktuellen Version ist der Timeout sehr klein. Praktisch für einen TWI/I²C-Scanvorgang.
Code

Procedure SearchI2C;
  Var PCATest : Byte;
  Begin
    For PCATest:=1 to $7F do
    If I2CStat(PCATest)=true
      then
        gDrawString(-1,-2,1,1,TxtRot0,'$'+ByteToHex(PCATest)+' ok  ');
        chPMRefresh;
        mDelay(5000);
      else
        gDrawString(-1,-2,1,1,TxtRot0,'$'+ByteToHex(PCATest)+' fail');
        chPMRefresh;
        mDelay(200);
      EndIf;
    EndFor;
  End SearchI2C;


Gruss
Harry
  • 1
  • 2
  • Page 1 of 2
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   138   152 · Page-Gen-Time: 0.044451s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI