Hi

Wenn grad das Thema angesprochen wird - bei mir funktioniert das LCD auch nicht wirklich.
Ich hab das blaue LCD 1x16 vom Reichelt. Einen Adapter für LPT gelötet und entsprechendes Ansteuerungsprogramm geschrieben (mit BlitzPlus und lib). Das hat soweit ganz gut funktioniert

* Aber *
nun versuche ich, das ganze an mein BMS-Board2 anzuschließen. Als Controller verwende ich einen PIC16F74. Lässt sich programmieren, sonst ist auch alles ok. Zum Proggn verwende ich einen eigenen (Auch mit Blitz+) Compiler, der von einer Art Basic-Sprache zu ASM übersetzt. Das MPASM von Microchip mach daraus HEX und der PBrenner37 von sprut brennt das ganze in den PIC.

Das LCD wird im 4bit-modus angesteuert. Aus Layoutgründen musste ich die Pins:
RS = RC7
R/W = RC6
D4 = RC5
D5 = RC4
D6 = RD3
D7 = RD2
En = RD1
verwenden (ziemlich ungeschickt )
Auf der linken Hälfte des LCD sind Rechtecke zu sehen, so wie es sprut schreibt.

Und dazu kommt entsprechender Code (aus dem Header; auszugsweise):

Das ist die eigentliche Sendefunktion. Könnte da mal bitte einer drüber schauen? Kann das so funktionieren?
Code:
 ;LCD-Send-Funktion
 ;-----------------
 ;Bits in W: frei(nix),RS,frei(R/W),D4,D5,D6,D7,frei(En)
lcd_send
 ;Pins:
 ; RS  = RC7
 ; (R/W = RC6)
 ; D4  = RC5
 ; D5  = RC4
 ; D6  = RD3
 ; D7  = RD2
 ; En  = RD1
 ;Bits löschen, Enable erst mal auf high
 bsf PORTD,1
 bcf PORTC,7  ;RS
 bcf PORTC,6  ;R/W [kann eigentlich immer auf >low< bleiben (lcd=slave), evtl auskommentieren :-)]
 bcf PORTC,5  ;D4
 bcf PORTC,4  ;D5
 bcf PORTD,3  ;D6
 bcf PORTD,2  ;D7
 movwf lshelp ;sicherheitskopie
 bcf W,3 ;bits maskieren
 bcf W,2
 bcf W,1
 bcf W,0
 iorwf PORTC,F ;Daten reinschreiben
 movf lshelp,W ;sicherheitskopie abrufen
 bcf W,7 ;bits maskieren
 bcf W,6
 bcf W,5
 bcf W,4
 bcf W,1
 bcf W,0
 iorwf PORTD,F ;Daten reinschreiben
 nop
 bcf PORTD,1 ;enable auf low -> lcd reagiert^^ (und leds auch)
 call zykwait ;dem lcd ein bisschen zeit geben
 bsf PORTD,1 ;enable auf high
 return
Und dazu die entsprechende Initialisierung

Code:
lcd_init
 ;Bits: (frei), RS,(R/W),D4,D5,D6,D7,(Enable)
 movlw B'00001000' ;4-bit mode
 call lcd_send

 movlw B'00001000' ;4-bit,2-zl,5x7-font
 call lcd_send
 movlw B'00000010' ;2.teil
 call lcd_send

 movlw B'00000000' ;display on, cursor on +blinken
 call lcd_send
 movlw B'00011110' ;2.teil
 call lcd_send

 movlw B'00000000' ;display löschen, cursor@home
 call lcd_send
 movlw B'00010000' ;2.teil
 call lcd_send

 movlw B'00000000' ;Auto-incr.
 call lcd_send
 movlw B'00001100' ;2.teil
 return
Ach übrigens: es sind noch 4 leds+vorwiderstände an den datenleitungen angeschlossen.
Die Anoden der LEDs sind am Collector eines pnp-transistors angeschlossen, der bei En=LOW die leds ermöglicht (seltsamer satz^^ - wollte nicht nochmal enabled verwenden). Wenn eine Datenleitung auf low ist, leuchtet die entsprechende led.
-> vllt zieht die led das low-signal in den verbotenen ttl-bereich ???

Danke für jede Hilfe
Mit freundlichen Grüßen
BMS