PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : eDIP240 data... fehlt



zwanzischmark
31.07.2006, 11:52
Hallo,

ich steuere ein eDIP240 per RS232 an. Wenn ich nun den Inhalt des Sendepuffers anfordere passiert folgendes:

Angenommen ein Taster wurde auf dem Display gedrückt, dann erhalte ich als Rückgabe:

ACK - korrekt
DC1 - korrekt
len - korrekt
data.. - fehlt
bcc - korrekt

warum fehlt zwischen len und bcc das datenpaket!?! Ich kann mir das irgendwie nicht erklären, weil ja vom Prinzip alles ordnungsgemäss klappt, nur eben die wichtigen Daten fehlen.

mfg Paul

ceekay
31.07.2006, 13:23
kann es sein das der puffer leer ist? Das du vielleicht für die Touchtaste keinen "Up" oder "Down" Code vergeben hast?

Passt denn das "bcc" und "len" im bezug auf das fehlende Datenbyte?

zwanzischmark
31.07.2006, 13:37
code ist vergeben!

Habe auch SBUF an einen Interrupt angeschlossen. Er springt also auch nur rein wenn Daten im Puffer sind.

sowohl len als auch bcc stimmen im bezug auf die Datenbytes

zwanzischmark
31.07.2006, 17:05
ich versteh zwar nicht warum, aber wenn ich die Bytes zusammen einlese geht es. Ich hatte vorher die Bytes einzeln eingelesen. Macht für mich trotzdem keinen Sinn das genau die daten immer gefehlt haben :/

ceekay
31.07.2006, 17:42
wie meinst du das mit "einzeln" und "zusammen" einlesen?

zwanzischmark
31.07.2006, 17:59
ich habe mit Bascom und inputbin gearbeitet und immer byte für byte eingelesen und ausgegeben:

inputbin var
Print var
inputbin var
...

wenn ich jeztt mache
Inputbin Ack
Inputbin DC1
Inputbin Len
Inputbin Ac(1) , 4
inputbin bcc

dann geht es (in Bacom heissen die Variablen natürlich anders)

wenn ich statt der 4 die variable für len nehme gehts wieder nicht. Vielleicht solte ich mal die baudrate runtersetzen...

edit: an der Baudrate liegts nich...
jetzt müsst ich langsam in die Bascom abteilung denn anscheinend geht das inputbin nich mit ner variablen als Anzahl der bytes die gelesen werden sollen

Hab das jetz in ne schleife gepackt... so gehts

ceekay
31.07.2006, 18:21
ja von Bascom hab ich keine Ahnung, habe das in c gemacht. und auch nicht mit RS232 sondern über I2C. Sollte vom Ablauf aber das gleiche sein.

zwanzischmark
31.07.2006, 18:24
bascom is nich der hit -ich weiss ;)

will auch schon länger umsteigen, aber der Einstieg is immer etwas knifflig bis man die Befehle drauf hat. Ansonsten kann ich eigentlich C programmieren...

bertl100
31.07.2006, 21:39
Hallo
Da bin ich ja genau richtig.
Ich hab auch dieses Display,steuere es aber per SPI an.
Könnt ihr mir den Algorythmus für die Checksumme bbc kurz erklären bzw. hier reinstellen?

MFG

Bertl

bertl100
31.07.2006, 21:40
Im Datenblatt steht, dass die einzelnen Bytes zusammengezählt werden müssen und dann noch modulo 256 gerechnet werden müssen.

zwanzischmark
31.07.2006, 21:44
das ist korrekt. Du musst aber nicht die Anzahl der Bytes zählen, sondern die Summe der Werte.

mfg Paul

bertl100
31.07.2006, 21:45
Per SPI sende ich ein komplettes Array mit vorgegebenen Protokoll.

Andere Frage: wie kann ich in einem Array, welches als byte deklariert wird, einen Text mitschicken zum anzeigen auf dem Display?
Muß ich eine eigene Variable als String deklarieren und außerhalb des Array´s senden oder gibt es andere Möglichkeiten?

bertl100
31.07.2006, 21:46
Die Summe der Werte is klar, hab ich auch gemacht, jedoch stimmte die endgültige cheksumme nicht.

zwanzischmark
31.07.2006, 21:47
dann poste mal dein beispiel...

bertl100
31.07.2006, 21:50
ICh rechne einfach

dim i as byte
dim a as int
dim b(5) as byte

for i=1 to 5
a=a+b(i)
next

a=a mod 256

SPIout a(1)


stimmt das so??

zwanzischmark
31.07.2006, 21:56
wenn in deinem b
DC1 und len auch drin is stimmt das.

ich glaub wenn du a als byte deklarierst kannst du dir das mod sparen, weil die variable automatisch überläuft.

bertl100
31.07.2006, 22:03
Ich rechne alle bytes des Rahmens.
Schule is schon eine weile her.
Wenn ich die checksumme als byte senden will und summiere dann die einzelnen Werte bytes, dann ist das Ergebnis automatisch ein moduloergebnis.

Richtig???

bertl100
31.07.2006, 22:08
Eine Frage hab ich noch. Hab ich oben schon geschrieben.

Per SPI sende ich ein komplettes Array mit vorgegebenen Protokoll.

Andere Frage: wie kann ich in einem Array, welches als byte deklariert wird, einen Text mitschicken zum anzeigen auf dem Display?
Muß ich eine eigene Variable als String deklarieren und außerhalb des Array´s senden oder gibt es andere Möglichkeiten?

zwanzischmark
31.07.2006, 22:09
wenn dein bytewert meinetwegen bei 250 steht und du addierst noch 20 drauf, dann läuft die variable über und fängt von 0 wieder an und steht dann bei 14.

hat also den gleichen effekt wie wenn dann in ner integer vairbalen 270 steht und man macht mod 256. Dann kommt auch 14 raus.


man könnte folgendes machen

for i = 1 to len
array(i) = mid(string,i,1)
next i

ob das sinnvoll is weiss ich auch nich ^^

bertl100
31.07.2006, 22:16
Was macht das "mid" Statement genau?

zwanzischmark
31.07.2006, 22:18
ein stück aus einer Zeichenkette rausschneiden...

mid(stringname,position,länge)

bertl100
31.07.2006, 22:18
Habs gefunden. Es zerlegt einen String in einzelne Bytes in einem Array.

Das wär ne gute Lösung um ein einzelnes Array zu senden.
Danke!!

bertl100
31.07.2006, 22:20
Hab ein Beispiel dafür gerade gefunden.

DIM MyEinzelByte AS BYTE
DIM MyStrlen AS BYTE
DIM MyIndex AS BYTE

MyString = "Hello, World"
MyStrlen = LEN(MyString)
FOR MyIndex = 1 TO MyStrlen
MyEinzelByte = MyArray(MyIndex)
NEXT

bertl100
31.07.2006, 22:23
Ich glaub so gehts auch

DIM MyString AS STRING * 20
DIM MyArray(21) AS BYTE AT MyString OVERLAY

ist sogar einfacher

bertl100
31.07.2006, 22:25
Letzteres würde dann aber nicht als bytearray deklariert :(

bertl100
31.07.2006, 22:31
So, jetzt muß ich noch ein paar andere Sachen erledigen.
Danke für deine Unterstützung zwanzischmark
Ich schreib dann eventuell morgen wieder.

MFg

Bertl

bertl100
02.08.2006, 18:56
Kann mir jemand sagen, warum mein Code für dieses Display nicht funktioniert??

DORD , CPOL und CPHA hab ich auf +5V und der dazugehörige Code funzt aber nicht. Ansteuerung per SPI.

Weiß wer bescheid??

tuxilein
08.08.2006, 18:19
hast du nen logicanalyser, mit dem kommt man meist schneller weiter, da kann man schauen ob die übertragung wenigstens richtig is bzw er das richtige sendet. mit Basic hab i die erfahrung gemacht das macht das was es will!

tuxilein
08.08.2006, 18:22
kurzgesagtes checksummen berechnung:



char checksumme = 0;

checksumme = (0x12 + 1 + 'S') % 256;

bertl100
08.08.2006, 20:18
Ich denke, ich hab ein Hardwareproblem.
Ich habs mit einem anderen µc probiert und mit dem Multimeter sah ich dann am Ausgang eine Spannung beim Senden,was auch funktioniert, bei dem jetzigen liegt nie Spannung an.

ToKu83
10.11.2006, 12:13
Hey... ich habe genau das gleiche Display und stecke gerade bei der Programmierung fest.

Habe als steuernden Mikrocontroller eine C-Control Mega128, den ich über C-compact (Conrads C abwandelung) programmieren möchte.



Meine Frage ist, wie ich den Protokollrahmen günstig in einen Programmcode bringe. Habe im Moment die Lötbrücke J2 geschlossen und schicke direkt die anzuziegenden Bytes rüber, aber das finde ich unschön, da ich garkeine Rückmeldung bekomme!
Bin noch neu in diesem Gebiet und leide unter programmiertechnischen Startschwierigkeiten ;-)

Große Frage 2:
Wie bekomme ich die Touchbefehle als Daten aus dem Display? Ich hab die Codes im Datenblatt des EDIP noch nicht so geblickt
( Datenblatt EDIP S.:16 => Antworten des EA über RS232 )
Ist wohl besser, wenn man mit dem sendepufferbefehl arbeitet ( ESC S B anz daten ). Muss dazu dieser befehl an die code up / code down info der touch taster gehängt werden?

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