PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datenaustausch PC



Facharbeit
22.09.2009, 18:48
Hallo,
ich habe im Zuge meiner Physikfacharbeit angefangen, mich in das
Thema Assemblerprogrammierung einzuarbeiten und weiß jetzt schon
nicht mehr weiter:
Ich habe Konstanten von Messungen in 3 Registern und die würde ich gerne an
den Pc senden.
Da ich ein Entwicklungskit habe, habe ich auch schon ein Programm zum
"übersetzen" der Daten (8 bit).
Jetzt meine Frage:
Wie programmier ich das?
Ich habe nur ein Programm, das ein Eingangssignal auswertet und wieder
an den Pc schickt, aber ich habe keine Ahnung, wie ich eine einfache Zahl an den Computer senden kann.
Danke im Voraus!

the_Ghost666
22.09.2009, 21:56
In Assembler ist das etwas komplizierter. Du kannst es auf 2 mögliche Arten übertragen. 1: Du überträgst einfach den Wert als Byte. Das ist am einfachsten beim Microcontroller, aber du brauchst eine PC-Software, die das interpretieren kann. Ein einfaches Terminal-Programm kann nur Asciizeichen anzeigen, die Lesbar sind. Also z.B. die Zahlen von 0-9. Wenn du jetzt eine 0 sendest, erkennt aber das Terminal eine Ascii-0 also ein End-of-File, statt der Zahl 0. Du kannst also ein Programm nehmen, was das auch darstellen kann. Beispielsweise Hterm (freeware, klappt sehr gut und ist von einem Hobbyprogrammierer) oder Docklights (gibt eine Shareware mit begrenztem Umfang und Laufzeit).
Wenn du ein einfaches Programm nutzt, dann musst du die Daten vorher in eine lesbare Zahl übersetzen. Das geht einfach indem du den Wert solange durch 10er Potenzen teilst, bis sich eine Dezimalzahl ergibt, die du stellenweise überträgst. ->255 /100 = 2 ->255-200= 55 -> 55/10 =5 ->55-50=5 ->5, also 2, 5, 5. Fertig. Eine Division in Assembler machst du am besten durch schleifenweises Subtrahieren von 10 oder 100.

Als Übertragungsmedium eignet sich RS232 bzw. die serielle Schnittstelle. Das geht im Atmel einfach durch Kopieren des Registerinhalts in ein Special Function Register und das setzen eines Bits. Den Rest macht der Controller. Wenn der Rechner keine mehr besitzt, dann kann ein USB-seriell Adapter helfen (hab ich auch schon so gemacht). Du kannst auch noch einen USB-Chip nehmen, der direkt an den Controller kommt, zb von FTDI, oder einen Controller, der direkt USB hat. Ich habe vor kurzem mit Microchip PICs mit internem USB Modul gearbeitet, das hat sehr gut funktioniert. Wenn der Rechner noch einen Parallelport oder alten Druckeranschluss hat, kannst du auch das Byte auf einen Schlag übertragen, das geht schneller, verbraucht aber direkt 8 Pins für Daten+ vll welche für die Steuerung.

Facharbeit
24.09.2009, 10:25
Mir ist es mittlerweile gelungen, das richtige Programm ausfindig zu machen.
Mein Übertragungsmedium ist das RS232.
Ich habe am controller einen seriellen Anschluss,
somit sende ich eben bit für bit (abhängig von Baudrate, mit "Start" und "Stopp" usw.)
Ich habs zwar noch nicht programmiert, aber das Prinzip ist mir klar und ich habe ein ähnliches Programm.

Jetzt noch eine Frage:
Mein Controller misst also zwei Werte.
Ich habe da so ein einfaches Terminal-Programm, das die Daten ausließt.

Diese Daten benötige ich nun in einem KOORDINATENSYSTEM.
D.h. ich muss die Daten, die im Terminal programm sind irgendwie in ein Koordinatensystem (bzw.Matheprogramm) einspeißen.
Ist das möglich?

the_Ghost666
24.09.2009, 11:19
Ich benutze für sowas gerne ne Umrechnung in Ascii, also aus 255 wird 2,5,5, und dann sende ich die Zahl, dann ein Semikolon (einfach in die Asciitabelle gucken) und die nächste Zahl, wieder ein Semikolon und dann ein CarriageReturn und LineFeed. Das sind Steuerzeichen, die immer dann erscheinen, wenn du die Entertaste drückst, um einen Zeilenumbruch zu erzeugen. Wenn du jetzt X Datensätze übertragen hast, kannst du die aus dem Terminalprogramm rauskopieren und in einer leere Textdatei schreiben. Die nennst du dann *.csv und kannst sie in Excel öffnen. CSV steht für Comma Separated Values und jedes gute Tabellencalculationsprogramm kann damit was Anfangen. Die importierst du dann in Excel und kannst dir damit eine Grafik erstellen lassen. Excel zeigt dann in der Spalte A alle X-Werte, in der Spalte B alle Y-Werte an.

Facharbeit
24.09.2009, 21:27
achso, ich habe natürlich vergessen zu schreiben, dass ich die Daten in Echtzeit auswerten muss!!!

Mein Ziel ist es, ein Objekt zu verfolgen und zwar auf dem PC.
Mit Kopieren und "Enter" drücken komme ich nicht weiter,
ich benötige sozusagen ein Programm, das die Daten in Echtzeit in ein Matheprogramm einspeißt.

Ich habe die Daten schon auf einem Terminalprogramm,
das mir den Binärcode übersetzt.
Jede Sekunde kommen ca. 3 Messdaten, mit
denen ich die Koordinaten ausrechnen muss (das kann ich aber auch im microcontroller machen).
aber wie lese ich sie von da in ein Koordinatensystem/Matheprogramm
und lasse mir gleichzeitig die Koordinaten anzeigen?
Wie schwer ist es so etwas zu programmieren?
Ich nehme an, ein Programm wie Visual Basic oder so ist in diesem Zusammenhang ratvoller?
Danke für deine Antworten!!!

Willa
24.09.2009, 21:34
Ein geeignetes "Matheprogramm" wäre z.B. Matlab. Das kann direkt serielle Daten einlesen und ist an vielen Hochschulen/ Unis verfügbar (wo schreibt man eine Facharbeit...?) Such mal im Forum nach Matlab, ich hatte da mal ein Beispiel mit Video + Quellcode geposted.

the_Ghost666
25.09.2009, 01:40
Du kannst auch eine einfache Software mit Visual C++ oder Visual Basic schreiben, es gibt von Visual Studio eine Student Edition, die ist kostenlos hat aber fast den vollen Umfang. Es gibt da auch einfach zu nutzende, fertige Klassen für die Ansteuerung der seriellen Schnittstelle und für Graphiken gabs mal ne einfache Möglichkeit, die Klasse MSChart, aber ich glaub die wurd wegrationalisiert. Für Graphen suche ich da auch noch eine schöne Möglichkeit. Matlablizensen sind halt meist teuer und eher an Unis und FHs gesehen, nicht an Schulen. Und ich kann kein Matlab, das ist ne eigene Programmiersprache.

recycle
25.09.2009, 03:09
In einem anderen Thread wurde hierfür vor kurzem Logview vorgeschlagen:
http://www.logview.info.
Über "Openformat" kann man da auch selbstdefinierte Datensätze im Ascii Format mit loggen.
Lohnt sich glaube ich da mal einen Blick drauf zu werfen.

Facharbeit
25.09.2009, 11:29
Erst mal möchte ich mich für die vielen ernstgemeinten Antworten
bedanken!
Für die dies nicht wissen:

Eine Facharbeit ist eine ca. 15 Seitige Arbeit mit Experiment (wenn man im Fach Physik macht), die so viel zählt wie ein Kurssemester, also schon ziemlich viel.
Das ganze macht man am Gymnasium in der 13. Klasse.

Ich habe mir jetzt mal Logview heruntergeladen, weil unsere Schule
garantiert kein Matlab hat.
Danke für den Tipp!
Werds bald ausprobieren.
Ich hoffe, dass es auch mit de Koordinatensystem klappt,
weil sonst muss ich wohl in Visual Basic neueinsteigen...
Aber was ich so an schreenshots gesehen hab, müssts gehen.

the_Ghost666
25.09.2009, 12:37
Das ist ja das schöne an Visual Studio, du brauchst nicht in Basic programmieren, wenn du zum Beispiel eh schon C++ kannst, weil alles genau gleich aussieht, die gleichen Bezeichner hat, nur die Sprache an sich ist anders. Also keine Angst :)

Facharbeit
21.10.2009, 18:51
Okay,
ich weiß, es ist schon etwas her,
aber ich habe mich jetzt wieder über meine Arbeit gesetzt
und irgendwie reicht mir LogView nicht aus,
oder ich weiß nicht, wie man damit umgeht.

Ich muss folgendes machen:
Ich bekomme von meinem Prozessor 3 Zahlen zwischen 0 und 255
die aus einer Messung resultieren.

Die sehe ich zwar im LogView terminalprogramm nicht,
aber ich weiß dass sie da sind, weil mein anderes Terminal-
programm sie Anzeigt. :-s

Diese 3 Zahlen muss ich miteinander Multiplizieren.
So, das Endergebnis ist jetzt eine bestimmte Zahl.


soweit klar?

Dann wird eine zweite Messung durchgeführt, bei der wieder 3 Zahlen im Terminal erscheinen, die miteinander multipliziert werden müssen.
so, und nun Kann ich aus diesen 2 Messungen einen Koordinaten berechnen.
Den will ich dann auf dem Koordinatensystem sehen.

Fragen:
1. Kann man mit Assembler komplizierte Matheformeln rechnen?
mit Wurzeln und so weiter?
Weil dann könnte ich die Rechnung vom mC machen lassen.
2. Was muss ich jetzt bei LogView angeben, damit das Terminal ausgelesen wird?
Irgendwie finde ich da nur Ladegeräte.

Besserwessi
21.10.2009, 22:12
Theoretisch kann man auch in ASM komplizierte Formlen mit Wurzel usw. Allerdings ist das doch schon relativ Fehleranfällig. Man muß die Berechnung der Wurzel nämlich wirklich von hand machen. Man findet dazu bestimmt irgendwelche routinen, aber einfach ist es trotzdem nicht.

Wenn man nicht was ganz besoners Zeitkritisches manchen will, würde ich lieber einen Hochsprache wie C oder BASIC empfehlen.

Sonst würde ich lieber die Berechnung auf dem PC machen und nur die Rahdaten übertragen.

Facharbeit
22.10.2009, 17:25
Ok, danke für den Tipp
hm, ist es schwierig ein Koordinatensystem mit Rechnung und co.
mit VB zu erstellen?
Ich habe leider nur Grundkenntnisse Assembler.

Ich habe mich jetzt übrigens auch über Rechnen mit Assembler informiert
und die Formel, die ich vorhabe, ist unmöglich umzusetzen.
Nur multiplizieren geht.

Also nochmal die Frage:
Ich kriege vom Seriellen Anschluss jetzt zwei Messungen mit je EINER Zahl.
Ist es möglich, diese Zahlen mit VB auszulesen?

Kann ich sie dann in eine Rechnung einsetzen?
An was ich denke ist zum Beispiel folgendes:

Ich nenne die erste Zahl Ax und die zweite Bx
und dann sage ich, wenn in der Zahl ein "A" vorkommt, rechne bitte diese Formel, und wenn in der Zahl ein "B" vorkommt, rechne bitte diese.
soweit klar?

Geht das umzusetzen?
Hat jemand sowas schon mal gemacht?