PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RN-KeyLCD zeigt nur 52 Zeichen



franzlst
04.03.2007, 22:55
Moin,

ich habe gerade festgestellt, dass mein RN-KeyLCD nur 52 Zeichen zeigt. Sende ich mehr, wird beim 53. das LCD gelöscht und die weiteren wieder am Beginn geschrieben.
Wo die 45 Zeichen stehen, also ob sie durchgängig von Anfang an geschrieben werden oder auf die 4 Zeilen verteilt, scheint dabei keine Rolle zu spielen.
Normal ist es ja auch so, dass wenn man in der vierten Zeile ist und in die 5. springt, dass sich alle Zeilen um eins nach oben verschieben und die erste gelöscht wird, aber nicht, wie es bei mir der Fall ist, das komplette Display gelöscht wird.

Ich kann jetzt leider nicht sagen, ob das von Anfang an so war, oder es erst mit der Zeit eingestellt hat.

Jemand 'ne Idee, an was das liegen kann?

Danke

Frank
05.03.2007, 00:22
Da machst du bestimmt einen Denkfehler. Eventuell sendest Du Zeichen zum Löschen des Displays? Check nochmal dein Testprogramm, solltest du nichts finden poste es einfach mal.

Gruß Frank

franzlst
05.03.2007, 13:04
Also das Programm sieht so aus:

int main()
{
wait(2500);

init_i2c();

uint8_t z = 0;

for(z = 0; z < 60; z++)
{
display_print_char('a');
}

while(1);

return 0;
}

void display_print_char(uint8_t zeichen)
{
i2c_start(DISPLAY + I2C_WRITE);
i2c_write(zeichen);
i2c_stop();
}

Es wird die I2C Bibliothek von Peter Fleury verwendet.

Auf dem Display wird lediglich 5 mal der Buchstabe 'a' angezeigt.

Frank
06.03.2007, 15:58
Hi,
C Beispiel habe ich zwar keine parat, mag es nicht so sehr, aber ich hab das gleiche jetzt noch mal in Bascom gemacht:



'################################################# ##
'rnkeylcd_i2c_test5.bas
'Beispiel: zu RN-KeyLCD
'LCD und Matrixtastaturboard RN-KeyLCD wird per I2C angesteuert
'robotikhardware.de
'################################################# ##
'

' ------------- Hier die üblichen RN-Control Anweisungen --------------
$regfile = "m32def.dat"
$hwstack = 32
$framesize = 32
$swstack = 32

$crystal = 16000000 'Quarzfrequenz
$baud = 9600
Config Scl = Portc.0 'Ports fuer IIC-Bus
Config Sda = Portc.1
' ------------- Ende der üblichen RN-Control Anweisungen --------------

'Hauptprogramm

Const Rnkeylcd_slaveid_write = &H40 'I2C SlaveAdresse
Const Rnkeylcd_slaveid_read = &H41

Dim Z As Integer
Dim S As Byte

Wait 1 'Warte bis LCD bereit
I2cinit

I2cstart
I2cwbyte Rnkeylcd_slaveid_write
S = "a"
For Z = 1 To 60
I2cwbyte S
Next Z
I2cstop

End


Es klappt wunderbar, bei 60 Zeichen sind es genau 3 Zeilen. Der Fehler muss wohl in deiner C-Libary liegen. Ich glaube die C-Libary nutzt noch immer SOFTWARE I2C Emulation und ClockStretching wird glaube auch nicht berücksichtigt. Du solltest mal schaun ob´s nicht modernere Libary gibt, Bascom hat das jetzt schon jahrelang.
Vielleicht ist aber auch die Schleife einfach zu schnell, versuchs mal mit einer winzigen Pause in der Schleife.

Gruß Frank

franzlst
06.03.2007, 17:19
Hi,

also an der Geschwindigkeit liegts wohl nicht, nach jedem Zeichen habe ich eine Pause von 10ms eingefügt, kein Erfolg.
Was ich jetzt noch festgestellt habe ist, dass durch jeden Befehl, das LCD zu löschen, 1 Zeichen weniger Platz ist.

Kann mir jemand eine I2C Bibliothek für C empfehlen?

Danke

Frank
07.03.2007, 00:04
Am besten eine Libary die TWI-Register nutzt.
Übrigens du sendest bei jedem Zeichen START und STOP. Es ist günstiger wenn du nur einmal START vor der Schleife und einmal STOP nach der Schleife sendest.