Problem, 27x4 LCD via PCF8574 und I2C ansteuern

Status
Für weitere Antworten geschlossen.
Oha Cassio,

das hört sich ja nach einem dicken Ei an. Eine Idee habe ich nach all dem was Du in der Zwischenzeit schon ausprobiert hast nicht mehr wirklich ....

Grüße,
Markus
 
Hallo zusammen!

Nach etlichen weiteren Test in den letzten zwei Tagen, was das INIT und Timing betrifft, gebe ich das Vorhaben nun auf. :(

Es ist mir trotz diverser Versuche mit den verschiedensten Initialisierungen und Parametern nicht gelungen dass Display zum Betrieb am PCF8574 zu bewegen.

Verwendet wurde dabei natürlich BASCOM.... aber auch Beispiele in C und ASM-Änderungen in der LIB haben nicht zum Erfolg geführt.

Letztlich habe ich sogar den RW-Pin wieder "zum Leben" erweckt.....
Die dauerhafte Verbindung zu GND wurde gelöst und auf den PCF8574 geführt.
Allerdings hat mir auch das Abfragen des Busy-Pins nicht weiter geholfen.

Hier mal ein paar Auszüge, aus den letzten Versuchen....
(Keine vollständige Liste ;) )
Code:
'BASCOM-Code

'PCF8574A Pins:
'  D7654_3210
'   |||| ||||
' &B0000_0000
'   |||| ||||
'   |||| |||D4
'   |||| ||D5
'   |||| |D6
'   |||| D7
'   |||RS
'   ||RW
'   |E2
'   E1

I2cstart
I2cwbyte Pcf8574_lcd

Waitms 250
I2cwbyte &B00010000
I2cwbyte &B11000000                                         'Display löschen 0000_0001
I2cwbyte &B00010000
Waitms 250
I2cwbyte &B00010001
I2cwbyte &B11000001
I2cwbyte &B00010001

Waitms 250
I2cwbyte &B00010000
I2cwbyte &B11000000                                         'Cursor Home
I2cwbyte &B00010000
Waitms 250
I2cwbyte &B00010010
I2cwbyte &B11000010
I2cwbyte &B00010010

Waitms 250
I2cwbyte &B00010000
I2cwbyte &B11000000                                         'Entry Mode Set 0000_0110
I2cwbyte &B00010000
Waitms 250
I2cwbyte &B00010110
I2cwbyte &B11000110
I2cwbyte &B00010110

Waitms 250
I2cwbyte &B00010000
I2cwbyte &B11000000                                         'Display on, Cursor off, Blink off
I2cwbyte &B00010000
Waitms 250
I2cwbyte &B00011100
I2cwbyte &B11001100
I2cwbyte &B00011100

Waitms 250
I2cwbyte &B00010010
I2cwbyte &B11000010                                         '4Bit set
I2cwbyte &B00010010
Waitms 250
I2cwbyte &B00011010
I2cwbyte &B11001010                                         '2/4 Zeilen , Inverter ein
I2cwbyte &B00011010
'I2cwbyte &B00011000
'I2cwbyte &B11001000                                         '2/4 Zeilen , Inverter aus
'I2cwbyte &B00011000

Waitms 250
I2cwbyte &B00010000
I2cwbyte &B11010000
I2cwbyte &B00010000
Waitms 250
I2cwbyte &B00010000
I2cwbyte &B11010000
I2cwbyte &B00010000
I2cstop


Code:
'geänderte ASM-LIB

[_Init_LCD]
_Init_LCD:
 *BASIC: waitms 50
 ldi r16,&hc0
 Rcall _Send_to_LCD
 Ldi _temp1, &hc3
 Rcall _Send_to_LCD
 Ldi _temp1, &h03
 Rcall _Send_to_LCD
 *BASIC: waitms 2
 Ldi _temp1, &hc3
 Rcall _Send_to_LCD
 Ldi _temp1, &h03
 Rcall _Send_to_LCD
 *BASIC: waitms 2
 Ldi _temp1, &hc3
 Rcall _Send_to_LCD
 Ldi _temp1, &h03
 Rcall _Send_to_LCD
 *BASIC: waitms 2
 Ldi _temp1, &hc2
 Rcall _Send_to_LCD
 Ldi _temp1, &h02
 Rcall _Send_to_LCD
 *BASIC: waitms 2
 Ldi _temp1, &h2c
 Rcall _Write_lcd_byte
 Ldi _temp1, &h0c
 Rcall _Write_lcd_byte
 Ldi _temp1, &h06
 Rjmp _Write_lcd_byte
[END]


[_Write_lcd]
_Write_lcd:
* lds r16,{_lcd_e} 
 sbr r16,&h10                         ;set RS flag (4 high bits is used as control)
 rjmp _write_lcd_byte
_Lcd_Control:
* lds r16,{_lcd_e} 
_write_lcd_byte:
 push r24
 Swap _temp1                                
 Rcall _Write_lcd_Nibble 
 pop r24        
_Write_lcd_nibble:
 Cbr _temp1,&HF0                      ; E1, E2, RW, RS low

_Send_to_LCD:
push r26
push r27
 ldi r25,3
_send_3_times:
 *BASIC: i2csend pcf8574_LCD,_temp1
 eor _temp1,R16	                      ; Xor E1 and/or E2 to set them
; @genus(250)
 ldi r26,0
_LCD_delay:
 dec R26
 brne _LCD_delay
 Dec R25
 Brne _send_3_times 
 eor _temp1,R16			       ; Xor to restore to initial state (even number of times)
pop r27
pop r26
ret

[END]

Code:
'Beispielcode in C


void lcd_init (void)		//LCD I2C initialisation
{
	i2c_start_wait(LCD+I2C_WRITE);

    i2c_write(0xC3);		//* HD44780 initialisation
	i2c_write(0x03); 		//*                   			
	_delay_ms(2);			//*						
    i2c_write(0xC3);		//*						
	i2c_write(0x03);		//*						
	_delay_ms(2);			//*
    i2c_write(0xC3);		//*
	i2c_write(0x03);		//*
	_delay_ms(2); 	
    i2c_write(0xC2);		//* Enter 4-bit-mode
	i2c_write(0x02);    	//*                    
	_delay_ms(2);

	i2c_stop();

	sendDATA (C,0x2C,_2);	// System set command
	sendDATA (C,0x0C,_2);	// Display on w/o any cursor 
	sendDATA (C,0x06,_2);	// Entry mode set/increment right,move CRSR

	custCHAR (4,0x0A,0x00,0x0E,0x11,0x11,0x1F,0x11,0x11);
	custCHAR (5,0x0A,0x00,0x0E,0x11,0x11,0x11,0x11,0x0E);
	custCHAR (6,0x0A,0x00,0x11,0x11,0x11,0x11,0x11,0x0E);
	custCHAR (7,0x06,0x09,0x09,0x0E,0x09,0x09,0x16,0x00);

	init=0;
}


Code:
'BASCOM-Code

Waitms 15

I2cstart
I2cwbyte Pcf8574_lcd
I2cwbyte &HC3
I2cwbyte &H03
Waitms 5
I2cwbyte &HC3
I2cwbyte &H03
Waitms 1
I2cwbyte &HC3
I2cwbyte &H03
Gosub Rw_test
I2cwbyte &HC2
I2cwbyte &H02
Gosub Rw_test
I2cstop


Code:
'BASCOM-Code

I2cstart
I2cwbyte Pcf8574_lcd


I2cwbyte &HC2                                               'Set 4 Bit
Gosub Rw_test
I2cwbyte &H12
Gosub Rw_test
I2cwbyte &HCA
Gosub Rw_test
I2cwbyte &H1A
Gosub Rw_test

I2cwbyte &HC0
Gosub Rw_test                                               'Entry Mode Set 0000_0110
I2cwbyte &H10
Gosub Rw_test
I2cwbyte &HC6
Gosub Rw_test
I2cwbyte &H16
Gosub Rw_test

I2cwbyte &HC0                                               'Display on, Cursor off, Blink off
Gosub Rw_test
I2cwbyte &H10
Gosub Rw_test
I2cwbyte &HCC
Gosub Rw_test
I2cwbyte &H1C
Gosub Rw_test

I2cwbyte &HC0                                               'Cursor Home
Gosub Rw_test
I2cwbyte &H10
Gosub Rw_test
I2cwbyte &HC2
Gosub Rw_test
I2cwbyte &H12
Gosub Rw_test
I2cstop



Inzwischen ist nicht nur das ausgedruckte Datenblatt unlesbar vollgekritzelt.......
auch zwei Displays haben inzwischen (aus welchem Grund auch immer) den Geist aufgegeben. :eek:
Bei einem Display funktioniet nur noch der 2. Controller für die Zeilen 3+4.....
beim Anderen Display reagieren beide Controller nicht mehr. :confused:

Wie es dazu kommen konnte kann ich nicht erklären, weil sie weder falsch angeschlossen wurden noch irgendwelchen mechanichen Belastungen ausgesetzt waren.

Vielleicht haben die zig INIT-Anweisungen ja nicht nur mich sondern auch die Controller in den Wahnsinn getrieben. :D
Dabei stellt sich mir gerade die Frage.... kann man einen Displaycotroller mit falschen INIT-Anweisungen "verfusen"? :hmmmm:
Ich denke wohl eher nicht. :cool:


Ich habe zwar noch einige von diesen Displays hier im Schrank liegen, aber diese werde ich nun nicht auch noch opfern. ;)
Es war ein Versuch und gut!

Ich erkläre damit das Vorhaben für mich persönlich als gescheitert!

Meine schöne I2C-PCF Platine a_DSCF0907.jpg werde ich dann eben für andere Zwecke nutzen......

Da fällt mir bestimmt noch etwas ein. ;)


Grüße, vom leicht enttäuschten
Cassio :cool:
 
Hi Cassio,

das find ich dann aber auch schade, erstens weil ich dieses Thema eigentlich
auch mit Spannung beobachtet habe und zweitens weil ich diese Display-
Type gern auch noch mal nachgekauft hätte aber bei Pollin, wo ich einst
eines her habe, scheint's das nicht mehr zu geben :(.
Damit ist der Totalverlust von gleich zwei davon ja echt bedauerlich :eek:.

Grüssle
Wolfgang
 
Hallo Wolfgang!

Danke, für dein Mitgefühl. ;)

Ich hatte auch schon gesehen, dass es die Dislays nicht mehr gibt....
Eigentlich schade. Gerade weil sie diese halbe Matrixtastatur mit dran hatten fand ich sie so praktisch.

Ist aber letztlich für mich nicht ganz so tragisch...... ein paar habe ich davon ja noch. ;)
Die Verluste waren also zu verschmerzen.... und obendrein mit einkalkuliert, wenn ich soetwas mache.

Gruß,
Cassio
 
Hi Cassio,

schade ist es trotzdem; hast viel Zeit damit verbracht.


Grüsse,

Michael
 
Hallo Michael!

Nun ja... das gehört eben dazu! ;)

Allerdings habe ich dabei auch wieder etwas sinnvolles gelernt.
So habe ich mich mal mit dem AVR-Studio, WinAVR und C "rumgeärgert".....
etwas mit LIB`s und ASM gespielt....

War also nicht alles vergebene Zeit. ;)

Gruß,
Cassio
 
Hi Cassio,

"vertane Zeit" meinte ich auch nicht. Bislang hast Du ja jedes Problem gelöst.
Schick mal eins 'rüber. Ich werde es dann "einfach mal" anschliessen und es wird funktionieren. :p


Grüsse,

Michael
 
Hi Cassio,

ich hab ja auch noch 3 oder 4 von den Displays. Kann ich ja mal testen ;)
und PCF8574 hab ich auch mindestens einen. Sollte ich mir mal ein paar
weitere von den PCFs besorgen ;)

Gruß
Dino
 
Hi Dino!

Na los....
Schreib mal eine passende LIB in ASM..... dann haben wir alle etwas davon. ;)

Wie schon angedeutet.... ich trauer den Displays nicht nach.
Es ist, wie es ist!
Trotzdem werfe ich sie nicht weg.

Vielleicht hilft es ja genauso wie bei meinem Mega644p........
Einfach lange liegen lassen und plötzlich funktionieren sie wieder. :D


Grüße,
Cassio
 
Status
Für weitere Antworten geschlossen.

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)