PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : UART Programmierung



tim09
16.06.2008, 23:00
Hallo Leute
ich mache jetzt so ein Projekt. ich habe einen Microchip "dspic30F4013" über UART mit Asuro verbunden. aber ich weiß nicht wie kann ich programmieren, damit der Asuro vom dspic gesteuert wird. ich vermute, dass ich by der Programmierung im dspic die Funktion wie z.B. "WriteUART1(xxxx)" vom UART benuten soll. aber wie kann ich die Funktion wie z.B. "Init()" vom Asuro direkt anwenden? Tut mir leid, ich habe gar keine Erfahrung in diesem Bereich. Kann jmd mir ein bisschen Tips geben?

Vielen Dank im Voraus!
Tim

Sternthaler
17.06.2008, 01:03
Hallo tim09,
willkommen im Forum.

Auf dem Asuro muss natürlich ein eigenes Programm laufen, welches die Kommandos vom dsp entgegen nimmt und in Befehle umsetzt.

Schau mal unter: ASURO mit Computer steuern (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=37993)
Dort passiert dies schon für die Kommandos: w, a, s d
Um das von dir angesprochenes Init() brauchst du dich nicht mit einem Kommando zu kümmern, da es ja schon im Asuro-Programm aufgerufen werden muss. Du kannst aber natürlich trotzdem ein Kommando 'erfinden' mit dem das Init() dann halt vom dsp gesteuert aufgerufen wird.
Auch Kommandos zum auslesen von z.B. den Odometriedaten, und senden der Ergebnisse an den dsp sind natürlich dann möglich.

Aber wie gesagt, du musst erst im Asuro ein Programm installieren.

Gruß Sternthaler
P.S.: Es gibt noch einige andere Versionen hier im Forum.

tim09
17.06.2008, 13:49
Hallo Sternthaler
Vielen Dank für die Antwort! ich weiß nicht ob ich richtig verstanden habe. also ich muss z.B. im Asuro die Fkt. SerRead(Data, length, time) benutzen um die Nachrichten vom dsp zu empfangen. und im dsp soll ich die Fkt. WriteUART1(unsigned int Data) anwenden um die Nachrichten zu Asuro senden. Hier ist der Parameter "unsigned int Data" das Kommando "w","a","s" oder "d". Ist das richtig?? ich muss nur das Kommando "w" in "unsigned int" casten?? ich dachte, dass der Parameter "Data" in der Fkt. WriteUART(Data) eine Adress wie z.B. "0xAA" sein muss. Kennt jmd die Fkt. vom UART gut aus?

Gruß Tim

Sternthaler
17.06.2008, 22:11
Hallo Tim,

ja, vom Ansatz her hast du das richtig verstanden.
- Der Asuro liest mit der SerRead (...)-Funktion. Die Funktion ist in der Asuro-LIB vorhanden. (Version ???)
- Der DSP sendet mit der WriteUART1 (...)-Funktion, wenn deine Entwicklungsumgebung zum DSP diese Funktion in 'irgendeiner' Lib (Version ???) anbietet.

Durch deine Parameterbeschreibung sieht die Funktion WriteUART1 (...) nach C aus.
Wenn du aber schon das Kommando mit der Parameterbeschreibung kennst, warum liest du dann nicht in der Doku zu der Umgebung nach?
Bzw., woher kennst du das Kommando?

Hier habe ich mal ein Beispiel im Netz der Netz gefunden: Unter
http://forum.sparkfun.com/v iewtopic.php?p=21705#21705
Musst du von hier kopieren und die Leerzeichen aus dem "v iew" entfernen. gibt es Code mit dem Kommando. Du must da mal nach dem "WriteUART1" suchen, und dann wird dort tatsächlich eine integer-Zahl als Parameter weitergegeben.
Und zwar mit: WriteUART1 ('B')
Da genau ein Buchstabe mit einfachen Hochkomma umschlossen ist, ist dies für C nun die Zahl aus den ASCII-Code für den Buchstaben B.

Ich denke, das du das gesucht hast.

Viel Erfolg
Gruß Sternthaler

P.S.: Merkwürdig. Der Link oben kann hier nicht angegeben werden ohne die Leerstellen im "v iewtopic" einzutragen. Der 'Text' wird in diesem Forum nach "zeigebeitrag" übersetzt. Und dann passt die URL natürlich nicht mehr :-k.

tim09
17.06.2008, 23:30
Hi Sternthaler
Vielen herzlichen Dank!!! :D Das Beispiel, das du gefunden hast, ist genau was ich brauche. also der Doku heißt dsPIC Language Tools
Libraries. ich habe den Doku im Netz gefunden. bitte gucke mal hier

Description: This function writes data to be transmitted into the transmit buffer (UxTXREG) register.
Include: uart.h
Prototype: void WriteUART1(unsigned int data); void WriteUART2(unsigned int data);
Arguments: data This is the data to be transmitted.
Return Value: None
Remarks: This function writes the data to be transmitted into the transmit buffer.
If 9-bit transmission is enabled, the 9-bit value is written into the
transmit buffer.
If 8-bit transmission is enabled, then upper byte is masked and then
written into the transmit buffer.
Source File: WriteUART1.c WriteUART2.c
Code Example: WriteUART1(0xFF);

tja.... also ich habe noch nie sowas programmiert. ich weiß nicht z.B. wie kann ich anfangen oder wie ist das Prinzip eigentlich. Aber Jetzt habe ich ein bisschen mehr verstanden. Danke noch einmal für die Hilfe. Ich probiere mal ob das funktionieren kann.

Gruß Tim

Sternthaler
18.06.2008, 00:01
Hossa Tim,
freut mich, dass dieser 'merkwürdige' Link für dich brauchbar ist.

Und es klärt sich auch die Frage, warum die unbedingt ein "unsigned int" als Parameter erwarten.
Achtung, ich muss immer alles Erklären ;-)
Eine "unsigned int"-Variable kann ja Zahlen von 0 bis 2^16 Bit also 65535 aufnehmen. Das hatte mich etwas verwirrt, da meine olle Annahme ja nur 8 Bit mit dem UART überträgt. Ich hätte dort also nur einen Parameter mit "unsigned char" erwartet.
Die Lösung ist natürlich in der Doku: "If 9-bit transmission is enabled"
Dann passt das 9.-te Bit ja nicht mehr in die char-Variable, also nehmen die dort einen int-Typen.


Und wie anfangen?

Zuerst solltest du das ASURO-Programm aus dem oben angegeben Thread "ASURO mit Computer steuern" verstehen.
Das ist noch so schön einfach, dass man es mit ein bisschen blättern in der Asuro-Doku verstehen wird. Dann hast du schon ein funktionierendes Programm auf der Empfangsseite.

Danach hast du bestimmt schon ein besseres 'Gefühl' für die Programmierung und kannst dich an die dsPIC-Sendeseite wagen.
Leider kenne ich die "dsPIC Language Tools" nicht, und somit kann ich hier keine weitere Unterstützung zu geben. Außer: Lesen, lesen, lesen, oder du schaust mal in diesem Forum in anderen Bereichen, ob es dort Unterstützung zu deinem dsPIC geben kann.
Versuche es mal mit der Suchen-Funktion oben aus der Kopfleiste vom Forum.

Gruß Sternthaler

P.S.: Ich finde gerade in der Doku unter http://ww1.microchip.com/downloads/en/devicedoc/51456b.pdf auf Seite 153 im Kapitel 3.12.3 ein Besispiel für das Senden mit dem dsPIC.
Scha da mal nach.

trapperjohn
18.06.2008, 08:02
Darf man fragen, was genau du umsetzen möchtest?

Als erstes solltest du dir die ASURO Library anschauen, um zu sehen, welche Funktionen du gerne "fernbedienen" möchtest. Als nächstes überlegst du dir ein Protokoll für die einzelnen Funktionen (bspw. 's' [links] [rechts] für MotorSpeed, links und rechts sind dann je 1 Byte, das die Geschwindigkeit enthält).

Danach musst du dieses Protokoll dann "nur" noch implementieren - also für den ASURO und für deinen dspic eine Software schreiben, die (im ASURO bspw. mit SerRead()) ständig empfängt, dann auswertet und antwortet.