Forum: Mikrocontroller und Digitale Elektronik Code Datenauswerter


von Sascha S. (sascha112)


Lesenswert?

Hallo zusammen,

habe ein Programm in Bascom erstellt, welches die seriellen Ausgaben 
eines Gerätes einliest, nach meinem Geschmack umformatiert (Die Ausgabe 
vom Gerät kann nicht geändert werden) und noch einige Informationen 
hinzufügt.
Läuft einwandfrei. UART Parameter: 9600,8,N,1.
In der Select Case RX stehen jetz schon ca. 300 Parameter und es kommen 
immer wieder welche dazu. Das heißt, bei jeder Änderung neu comilieren 
und den Atmega neu programmieren. Gibt es dazu eine Alternative ? 
Vielleicht Speicherkarte oder Eprom/EEprom, mit einer Art Datenbank 
drauf ?
Wenn z.B. Speicherkarte, dann müsste man ja auch (sofern groß genug) die 
Ausgaben darauf speichern können.

Zweite Frage:
Jede Ausgabe des Ausgangsgerätes wird 4x wiederholt. Hatte schon 
versucht, das ganze zu puffern, vergleichen und zu filtern. Allerdings 
war das Ergebnis nicht so gut wie bei der jetzigen Einlesevariante. Hat 
jemand eine Idee, wie es besser zu machen wäre ? Inputbin geht nicht, 
wegen der Stringmanipulationen.

Der Code:
$regfile = "M16def.dat"
$crystal = 14745600
$baud = 9600
$hwstack = 100
$swstack = 100
$framesize = 100

Dim Msg As String * 254
Dim J As String * 4
Dim M As String * 2
Dim T As String * 2
Dim Z As String * 8
Dim W As String * 3
Dim R As String * 7
Dim S As String * 1
Dim Tl As Byte , Tx As Byte , Sl As Byte , X As Byte
Dim Rx As Long
Dim Rt As String * 32
Echo Off
Do

Input Msg
Tl = Len(msg)
Tx = Tl - 34

Dim Txt As String * Tx

J = Left(msg , 4)
M = Mid(msg , 6 , 2)
T = Mid(msg , 9 , 2)
Z = Mid(msg , 12 , 8)
W = Mid(msg , 21 , 3)
R = Mid(msg , 25 , 7)
S = Mid(msg , 33 , 1)
Txt = Mid(msg , 35 , Tx)
Rx = Val(r)

Select Case W
Case "Mon" : W = "Mo."
Case "Tue" : W = "Di."
Case "Wed" : W = "Mi."
Case "Thu" : W = "Do."
Case "Fri" : W = "Fr."
Case "Sat" : W = "Sa."
Case "Sun" : W = "So."
End Select

Select Case Rx
Case 123456 : Rt = "Text 1 "
Case 234567 : Rt = "Text 2 "
Case 345678 : Rt = "Text 3 "
Case 456789 : Rt = "usw..."
Case 567890 : Rt =
Case xxxxxx : Rt =
Case yyyyyy : Rt =
Case zzzzzz : Rt =
Case else : Rt="no Data"
End Select

Print W ; " " ; T ; "." ; M ; "." ; J ; "   " ; Z ; "    " ; R ; " " ; S
Print Rt
Print Txt ; Chr(13) ; Chr(10)

Loop
End
von Klaus D. (kolisson)


Lesenswert?

Möglich ist ja so ziemlich alles, aber es klingt kompliziert.
wenn du die Case Abfrageparameter dynamisch über ne Speicherkarte
einfüttern willst.

Es gibt ja Lösungen eine SDkarte mit Bascom und Dos Filesystem zu
bearbeiten. Allerdings braucht das recht viel Ram im atmega.
Da benötigst du allermindestens einen Mega 32. (besser sogar grösser).
Die Limitation liegt hier hautsächlich im kleinen SRAM.
Dann besteht eine Limitation des Dos Systemes welches in dieser kleinen
Ausführung dann nur eine Datei zu einer zeit geöffnet halten kann.
Das beisst sich ja wieder etwas mit der Zielsetzung nicht nur die
Abfrageparameter einzulesen sondern auch noch die Ergebnisse in eine
weitere Datei zu schreiben.
Wie gesagt, möglich ist es, aber es wird schon kompliziert.

Um die Komplexität klein zu halten könnte ich mir eher vorstellen
mit dem Atmel, dem Dos Filesystem und der SD Karte lediglich
einen Datenlogger zu bauen, der auf der karte den Datenstrom in
eine Datei zu speichern.
Eine gewisse Vorfilterung und Formatierung nach festen kritierien
kann der Atmel ja gleich miterledigen.
Aud er SD Karte entsteht dann im einfachsten Falle eine TXT Datei in
der die einzelnen Sequenzen dann durch ein Trennzeichen z.B. ";" oder
<CR/LF> abgetrennt sind.

Die Auswertung und Feinfilterung machst du dann auf dem PC.
Dazu kannst du dir entweder eine eigene spezialisierte Software
schreiben oder das ganze z.B. in Access einimportieren .

Ich hoffe, dass dieser Denkansatz dein Leben leichter macht.

Gruss
klaus
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.