PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SPI Verständnisfrage



bertl100
04.09.2006, 20:47
Hallo coders!

Kann mir jemand erklären wie man mit SPI Klartext übertragen kann?

Im Darenblatt meines Displays steht:

1. ASCII-Modus
- Das Escape-Zeichen entspricht dem Zeichen '#' (hex: $23, dez: 35).
- Die Befehlsbuchstaben folgen direkt im Anschluss an das '#' Zeichen.
- Die Parameter werden im Klartext (mehrere ASCII Ziffern) mit einem nachfolgenden Trennzeichen
(z.B. das Komma ',') gesendet.
- Zeichenketten (Texte) werden direkt ohne Anführungsstrichen geschrieben und mit CR (hex: $0D),
oder LF (hex: $0A) abgeschlossen.

2. Binär-Modus
- Das Escape-Zeichen entspricht dem Zeichen ESC (hex: $1B, dez: 27).
- Die Befehlsbuchstaben werden direkt gesendet.
- Die Koodinaten x, y und alle anderen Parameter werden als 8-Bit Binärwert (1 Byte) gesendet.
- Zeichenketten (Texte) werden mit CR (hex: $0D), LF (hex: $0A) oder NUL (hex: $00)
abgeschlossen.
Im Binär-Modus dürfen keine Trennzeichen z.B. Leerzeichen oder Kommas verwendet werden. Die
Befehle benötigen auch kein Abschlussbyte wie z.B Carrige Return (außer Zeichenkette: $00).

Mit ASCII wäre es einfacher da ich einfach nur einen String übertragen müsste. Momentan erstelle ich ein Byte-Array mit den HEX-Werten.
Das Escape Zeichen entspricht "#" -----Wieso in ASCII???

Wäre nett wenn jemand hilft.

MFG

Bertl

bertl100
04.09.2006, 22:06
Kann ich per SPI überhaupt einen String senden??

PicNick
05.09.2006, 06:58
Also, die SPI selbst kann da nix dazu, die sendet, was immer Du willst.

Diese Modi und sachen wie "#" sind vom Display offenbar so festgelegt, kann man schwer diskutieren.
Um zu raten, müßte man mehr wissen von dem Display-Protokoll, das scheint mir ja kein Standard zu sein.

bertl100
05.09.2006, 16:56
Für das Protokoll hab ich hier ein Beispiel aus dem Datenblatt.

BEISPIEL
Das nachfolgende Beispiel zeigt ein vollständiges Protokollpaket zum Senden von Befehlen
Display löschen und Gerade von 0,0 nach 239,127 zeichnen


ASCII: <DC1> len ESC D L ESC G D 0 0 239 127 bcc >
HEX : $11 $0A $1B $44 $4C $1B $47 $44 $00 $00 $EF $7F $DA


< <ACK>
$06

Hier der Link zum Datenblatt:

http://www.lcd-module.de/deu/pdf/grafik/edip240-7.pdf

Wie kann man die Übertragung am besten lösen??? ohne 50 zeiliges Array in Binär

PicNick
05.09.2006, 19:27
Also, wichtig wär mal, daß der SPI richtig eingestellt ist. Bascom macht das bei CONFIG SPI,......
und dann SPIOUT array(1), anzahlbytes
mehr isses nicht.
Das array(1-x) mußt du vorher aufbauen (mit BCC)

DIM arr(24) as byte

arr(1) = &H11
arr(2) = &H0A
arr(3) = &H1B
.....etc.
SPIOUT arr(1), 13

bertl100
05.09.2006, 22:28
Genau so hab ich es bisher gemacht, ist nur sehr aufwendig wenn ich jeden Buchstaben in der ASCII Tabelle nachschauen muss.
Wenn ich per RS232 sende, dann könnte ich einfach einen String übertragen
mit
print "#dl#zc,128,64,TEST,bcc" ------->In Klartext

Ich wollte per SPI auch irgendwie Klartext übertragen. Wäre einfacher.

JanB
06.09.2006, 07:44
Hallo,
Ich wollte per SPI auch irgendwie Klartext übertragen. Wäre einfacher.

Dann bastel dir doch eine Funktion,
die die einzelnen Zeichen eines Strings in ein Array überträgt,
und das dann per SPI absendet.
Dann hast du doch, was du willst.

Befehle die du dazu brauchen könntest wären:
For...Next, len(), mid(), asc()

Gruß Jan

bertl100
06.09.2006, 17:08
Danke für den Denkanstoß!!!!!! :)

Ich kannte den Befehl "ASC" noch nicht. So wirds sicher gehen.
Es wäre nur schön gewesen, wenn Bascom dafür High Level befehle hätte.

MFG

Bertl

JanB
07.09.2006, 07:02
Hallo,
Es wäre nur schön gewesen, wenn Bascom dafür High Level befehle hätte. Hat es doch.
Bascom besteht NUR aus High-Level Befehlen.
Probiers mal mit Assembler, dann merkst du den Unterschied. :-)

Gruß Jan

bertl100
07.09.2006, 16:54
Eigentlich meinte ich fertige Prozeduren oder Methoden mit der ich so einen String besser verarbeiten kann.
Bei reinem Text ist es sehr einfach, jedoch muss ich Beistriche und Zahlen ebenfalls herausfiltern und dann wird es schon sehr kompliziert.
Es werden ja immer andere Folgen verwendet. Nur die ersten beiden Bytes sind immer gleich.