PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe bei ändern von Lcd_i2c.lib



Herculesheld
17.10.2009, 22:21
hi.
Ich habe Probleme mit meinem Display. Ich versuche es nach AN_118 von der MCS electronics Seite mit einem PCF8574P über I²c anzusteuern.Funktioniert aber nicht. Nachdem ich alle Fehlerquellen ausschließen kann, bleibt mir nur eine Möglichkeit zur Lösung des Problems: ich muss die zugehörige Library "Lcd_i2c.lib" ändern.
Ich selbst programmiere in Bascom.
Da Librarys in Assembler geschrieben sind, richte ich mich an alle in diesem Forum die denken dass sie sowas hingekommen könnten:
Ich muss in der Library die Displayinitialisierung für mein Display mit dem Controller KS0066 ändern.
Das ist der Quellcode der .lib:

[_Init_LCD]
_Init_LCD:
*BASIC: waitms 50
ldi r16,&hc0 ; this is to make the initialization on both halfs of a 4-line LCD
Ldi _temp1, &h03 ; at init-time I call all routines before _lcd_e is loaded into r16
Rcall _Send_to_LCD
*BASIC: waitms 4
Rcall _Send_to_LCD
Rcall _Send_to_LCD
Ldi _temp1, &h02
Rcall _Send_to_LCD
Ldi _temp1, &h28
Rcall _Write_lcd_byte ;RS flag should to be 0, so jump directly to write byte
Ldi _temp1, &h08
Rcall _Write_lcd_byte
Ldi _temp1, &h0c
Rcall _Write_lcd_byte
Ldi _temp1, &h01
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]

Es gab vor einiger Zeit ein solches Projekt von Guenter1604, der dieselbe .lib für ein PCA9555D geändert hat.
Ich hoffe mir kann jemand helfen.