PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Basic++ und I²C Display



matlxxx
29.12.2006, 15:35
Hallo!

Hab vorn paar tage mein display an den pcf gehängt und ein bisschen rumprobiert, hat auch das meiste geklappt \:D/

Nun wollte ich die lib funktionen und die ganze datenübertragung zum lcd ein bisschen besser verstehen. ich hoff ihr könnt mir da was beibringen!

erstmal die write funktion:

FUNCTION LCD_WRITE(BUF as byte,LCDDATA as byte)
define EXTPORT byteport[18]
define OUTBYTE as byte
'--------- ------WRITE HI NIBBLE ------------------------
OUTBYTE=BUF or (LCDDATA shr 4)
EXTPORT=OUTBYTE or 01000000b
EXTPORT=OUTBYTE and 10111111b
'--------------- WRITE LO NIBBLE ------------------------
OUTBYTE=BUF or (LCDDATA and 0Fh)
EXTPORT=OUTBYTE or 01000000b
EXTPORT=OUTBYTE and 10111111b
END FUNCTION



1)das mit Hi nibble und lo nibble glaub ich zu verstehn(weil ich im 4-bit mod. fahre, zuerst werden die oberen 4-bit gesendet und dann die unteren 4 bit)
dass ich die ersten vier bits erhalte wird LCDDATA shr 4
also wenn ich jetz lcddata 11111111 is dann wird mit shr 4 11110000 daraus oder??

2) was bewirkt die or funktion?? wenn ich beim windows-rechner die or funktion hernehme, zält er mir die 2 zahlen nur zusammen!
die aus der Digitaltechnik bekannte ODER funktion kann ich das nicht vergleichen oder???

2) Wenn ich zb. ein A schreiben will, dann: LCD_WRITE(20h,41h)
20h steht laut code tabelle des displays(oder auch ASCII tab.??) für ein @
41h steht für ein großes A
Warum jetzt 20h?????

freue mich auf jede Antwort
gruß martin

Tappi
29.12.2006, 15:45
Hallo,

kurz zur Oder Funktion (die ist genau die, die Du meinst):

i = 3 or 2 ' daraus folgt: i = 3


-> gehen wir mal von 8 Bit = 1 Byte aus
hi lo
Dezimal 67 0100 0011
Deziaml 2 0000 0010
__OR_________________
Dezimal 67 0100 0011 ' = i


Im Prinzip ist es eine Addition jeder Bitstelle ohne Überbetrag.

Übrigens: 20h ist 20 Hexadezimal, also 32 dezimal, das ist ASCII <Leerzeichen>. 41h entspricht 65 dezimal, also dem ASCII A.

Die ASCII Tabelle für HEX und DEZ findest Du hier: http://www.torsten-horn.de/techdocs/ascii.htm

Beste Grüße,

Stefan

matlxxx
29.12.2006, 16:04
Hi Tappi
danke für die rasche antwort!
Das mit dem oder versteh ich jetz

bei 20h hab ich von der codetabelle falsch abgelesen

grundsätzlich wird also ein blank auf das display geschrieben und dann das jeweilige zeichen ahaaa....

hab ich das richtig verstanden mit dem shr 4, werden da die unteren vier bits 0 oder??

gruß martin

Tappi
29.12.2006, 16:25
ne 20h ist doch der Befehl zum schreiben auf das LCD.

matlxxx
29.12.2006, 19:43
achso

mich würde jetz noch interessieren was der befehl shr macht

outbyte=01000001 shr 4
was für binärzahl is jetzt outbyte???

gruß martin

matlxxx
29.12.2006, 20:27
ok ich glaub ich hab jetz shr auch kapiert

outbyte=01000001 shr 4
outbyte is jetzt 0000 0100
stimmt doch so oder??

nächste Frage:
die oberen vier bits werden so übergeben:

OUTBYTE=BUF or (LCDDATA shr 4) 'buf ist 20h, lcddata ist 41h(großes A)
'outbyte is jetzt: 00100100
EXTPORT=OUTBYTE or 01000000b
'extport is jetzt: 01100100
EXTPORT=OUTBYTE and 10111111b
'extport is jetzt: 00100100 ==>das 7. Bit is 0 d.h. enable is auch 0, wenn der enable 0 is tut doch der lcd-controller auch nix, dann wäre diser befehl doch für die Katz, oder lieg ich da falsch???

gruß martin

matlxxx
29.12.2006, 23:54
wenn man ein bisschen datenblatt studiert dann weiß man, das die daten erst bei fallender Flanke von Enable vom display übernommen werden!
darum zuerst enable 1 + daten und dann enable= 0 +daten dass die daten vom display übernommen werden!!! ahaaaa...