Forum: Mikrocontroller und Digitale Elektronik EA eDIPTFT43-A RS232 und ATMAGA88 mit BASCOM


von Christian (Gast)


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.

von ..,- (Gast)


Lesenswert?

Seite 10 in der Doku ...
http://www.lcd-module.de/fileadmin/pdf/grafik/ediptft43-a.pdf

Abschalten kannstes ja für Testzwecke, einfach PIN17 auf Masse ...

von Christian (Gast)


Lesenswert?

Hallo,

Habe jetzt mal geschrieben:
Print "<DC1>,3,#DL,bcc"
Es dass denn richtig so?
Muss ich da nen anderen Befehl wie Print nehmen?
Ooer ist das komplett falsch?

von Christian (Gast)


Lesenswert?

Noch was
wenn ich das Small protokoll jetzt abschalte,
zeigt es dann die übertragenen zeichen auf dem Display an ?

von ..,- (Gast)


Lesenswert?

Kommt drauf an ob du dich im Terminalmodus befindest oder nicht ...

von Christian (Gast)


Lesenswert?

Oder muss man das Display erst mal irgendwie auf "empfang" stellen,
damit es die empfangenen Befehle ausführt?

von ..,- (Gast)


Lesenswert?

Nein ... nur (evtl.) Rahmen und Daten müssen passen.

von Christian (Gast)


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.

von ..,- (Gast)


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.

von Christian (Gast)


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   ;-(

von ..,- (Gast)


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 =)

von Christian (Gast)


Lesenswert?

Hallo,
also was muss ich dann übertragen, wenn ich kein Protokoll habe?
Muss ich das PRüfsummenzeug dann weglassen ?
Irgendwie kapoere ich immer noch nicht wozu das Protokoll gut ist
und wann ich es brauche und wann nicht.

von Weingut P. (weinbauer)


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.

von Christian (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.