EA eDIPTFT43-A RS232 und ATMAGA88 mit BASCOM

Gast #2331197
Lesenswert?

Hallo,
ich möchte meinem EA eDIPTFT43-A Befehle von meinem ATMEGA88 senden.
Also z.B Display löschen.

Leider komme ich nicht weiter.
Habe einen 8 Mhz Quarz dran.

Die drei Pins für die Bauddraten habe ich mit Jumpern ausgestattst
und entsprechend gesetzt.

Könnte mir jemand erklären, was es mit dem Smallprotokoll aus sich hat?
Muss ich das jetzt an  oder abschalten, dem Display Befehle zu senden?

Und wie sende ich dann einen Befehl.

Habe es schon mit
 Print "#DL"
versucht.
Oder mit anderen Sachen aus dem Datenplatt.
Das einzig was passiert, ist, dass auf dem Display irgendwelche
Hyroglyphen angezeigt werden..

Ich hoffe ihr könnt mir ein paar Tipps geben.
Gast #2332269
Lesenswert?

Hallo,
stimmt denn dieser Befehl:
Print "<DC1>,3,#DL,bcc"
Wenn die Daudrate stimmt und TXD vom ATGEMA88
mit RXD vom Display verbuden sind müsste doch dann der Displayinhalt 
verschwinden?
Oder muss das bcc auch noch durch was ersatz werden?
Und geht das mit dem Print?

Der ATMEGA sendet auf jedenfall Daten, das habe ich mit dem Oszi 
überprüft.
Gast #2332346
Lesenswert?

Uiuiui^^ es scheint du hast das noch nicht ganz gecheckt =)
Kuck dir einfach den Codefetzen auf Seite 10 an ... und versuch 
nachzuvollziehen was da gemach wird ... bzw. lass erstmal das 
Small-Protokoll weg.

BTW: das DC1 ist einfach nur ein Symbol für eine hexadezimale 11 und bcc 
ist die Summe aus allen Bytes ... das steht aber wirklich alles im 
Manual. Lies das bitte gründlich.
Gast #2332617
Lesenswert?

Hallo,
also wie ich das sehe muss man wohl Byte für Byte senden?+

Also erst mal das <DC1>
Das ist dann eine 11.

Also erts mal
 => Print 11

Der Befehl soll ja #DL heißen.

len ist also 3, weil ich pro Zeichen ja ein Byte brauche oder ?!?

 => Print 3

Dann die Befehlszeichen:

 => Print "#"
 => PRint "D"
 => Print "L"

Und bcc ist die SUmme aus allen Bytes.

Muss ich dann 11 + 3 +.. rechnen
Aber wie addiere ich die ASCCI Zeichen?
Und das mit dem Module...

ärgrrrrrr
Warscheinlich wieder alles falsch   ;-(
Gast #2332831
Lesenswert?

Mit Basom kenne ich mich nicht aus ... aber ich denke mit mehreren 
"Print"s wird das nicht funktionieren ... ich glaub nach den "Print"s 
werden Zeilenumbrüche angehangen ... das ist schlecht. Das sollte schon 
alles in einem Abwasch geschehen.
Ich rate dir das Protokoll erstmal wegzulassen und dir dann Gedanken 
machen warum man überhaupt so ein Protokoll einsetzt bzw. wie es 
funktioniert.
Der vorhandene Codefetzen sollte selbst für dich einfach ins Basom 
übertragbar sein =)
#2333979
Lesenswert?

Das Protokoll ist schon nützlich ...

hab jetzt mit dem Ding noch nicht gearbeitet, aber mit Bascom arbeite 
ich viel.
Zunächst mal sendet Bascom wenn Du einfach

Print "12345" machst insgesamt 7 Zeichen, weil Bascom da ein CR und LF 
dahinter hängt.
Das kannst Du unterdrücken indem du ein ";" dahinter stellst, also

print "1235";

In der Protokollbeschreibung sind bestimmte Zeichen definiert mit 
Abkürzungen, z.B.

<DC1> = 17(dez.) = $11 (Seite 10 im Datenblatt)

Das bedeutet, dass Du nicht: Print "<DC1> ...." machst sonder an Stelle 
des DC1 das ASCII-Zeichen für DC1 sendest: ASCII-Tabelle hilft da 
weiter:

http://www.torsten-horn.de/techdocs/ascii.htm

In Bascom kannst Du ein ASCII-Zeichen einfach per geschweifter Klammer 
einfügen:

Print "{017},3,#DL,...

bcc = 1 Byte = Summe aus allen Bytes inkl. <DC2>, Modulo 256 (Seite 11 
steht das im Datenblatt)

Du gehst einfach hin und addierst die ASCII-Werte aller Deiner zu 
übertragenden Zeichen außer bcc versteht sich.
also 17 + (",") 44 + ("3") 51 + (",") 44 + ("#") 35 + ("D") 68 + ("L") 
76

Die Summe ist natürlich größer als 255, passt also nicht in ein Byte, 
daher brauchst Du nur das Lowbyte ... in Bascom sieht das so aus, dass 
Du einfach in eine Bytevariable addierst und Dich nicht darum störst, 
dass diese überläuft.

Also

dim bcc as byte
dim bytevariable_1 as byte

bcc=0
x=len(ausgabesing_ohne_bcc)
for y=1 to x
   tempstring=mid(ausgabesing_ohne_bcc,y,1)
   bytevariable_1=asc(tempstring)
   bcc=bcc+bytevariable_1
next
ausgabesing_ohne_bcc=ausgabesing_ohne_bcc + chr(bcc) ' bcc anhängen

print ausgabesing_ohne_bcc


so in etwa sollte es gehen ... blöd wirds nur wenn bcc Null ist, dann 
macht Bascom den String ein Zeichen kürzer ...

Ja, es gibt schnellere und bessere Routinen, aber zur Veranschaulichung 
sollte es mal gehen.
Gast #2338801
Lesenswert?

Hallo,
danke , du hast mir sehr weitergeholfen.
Ich wäre nie draufgekommen, dass zu den Befehltzeichen auch Komma 
zählen...

Habe das ganze mal versucht, aber es frutzt nicht.
Ich denke , dass in meinem Code noch Fehler sind.
Bei den Variablen war ich mir beim Typ nicht sicher.
Da ist irgendwo der Wurn drin...

1
    $crystal = 8000000
2
   $baud = 19200
3

4
   Config Portc.5 = Output
5

6
Dim Bcc As Byte
7
Dim X As Byte
8
Dim Y As Byte
9
Dim Ausgabesing_ohne_bcc As String * 10
10
Dim Tempstring As String * 10
11
dim bytevariable_1 as byte
12

13
  Bytevariable_1 = 0
14
  Bytevariable_1 = Bytevariable_1 + 17
15
  Bytevariable_1 = Bytevariable_1 + 44
16
  Bytevariable_1 = Bytevariable_1 + 51
17
  Bytevariable_1 = Bytevariable_1 + 44
18
  Bytevariable_1 = Bytevariable_1 + 35
19
  Bytevariable_1 = Bytevariable_1 + 68
20
  Bytevariable_1 = Bytevariable_1 + 76
21

22
   Bcc = 0
23
   X = Len(ausgabesing_ohne_bcc)
24
   For Y = 1 To X
25
     Tempstring = Mid(ausgabesing_ohne_bcc , Y , 1)
26
     Bytevariable_1 = Asc(tempstring)
27
     Bcc = Bcc + Bytevariable_1
28
Next
29

30
Ausgabesing_ohne_bcc = Ausgabesing_ohne_bcc + Chr(bcc)
31

32
Print "{017},3,#DL,";
33
Print Ausgabesing_ohne_bcc
34

35
 Do
36
 Toggle Portc.5
37
 Waitms 50
38
 Toggle Portc.5
39
 Waitms 50
40
 Loop
41

42
 End

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren