PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PIC Datenuebertragung??



RoboLeo
19.10.2005, 14:10
Sers

Bin gerade dabei ein RC-Auto so umzubauen das ich die Geschwindigkeit ueber Hallsensoren am Hinterrad messen kann. Die ganzen Daten sollen dann an einen PC uebertragen werden.

Hab schon mal ein Programm in C geschrieben. (Assembler bin ich leider nicht so gut)
Die Signale des Sensors werden in einer Variablen summiert.
Ein Timer gibt dann alle 1/10s die Werte aus.
Somit laesst sich aus der Zeit und den Impulsen die Geschwindigkeit und Beschleunigung berechnen - aber soweit bin ich noch nicht.

Mein Problem ist das ich einfach nicht weis wie ich die Daten Sinnvoll in den PC-bekomme. Klar RS232 bietet sich an.
Aber wie kann ich eine int2 Variable ueber einen Output des Pics senden?
Muss ich die Werte noch vorher umrechnen oder gibts es Befehle in PIC-C die ich dafuer verwenden kann.

Sers

Fritzli
19.10.2005, 16:59
Hallo

Da gibts zwei prinzipiell zwei Möglichkeiten:

int2 = 16Bit ?

1) Du sendest die zwei Bytes so wie sie sind (binär) nacheinander durch den Kanal. Die Empfangssoftware muss daraus dann wieder die korrekte Zahl machen und als Zahl (ASCII) anzeigen.

2) Du verwendest sowas wie printf(...) um die int2 Zahl als Klartext (ASCII) an die RS232 auszugeben. Das Empfangs/Anzeigeprogramm braucht dann keine weitere "Intelligenz", also würde Hyperterminal reichen.

Was für'n C-Compiler hast Du?

Gruess
Fritzli

RoboLeo
20.10.2005, 09:40
Sers

Schon mal danke.

Hab den PIC-C (PCW C) Compiler
Und nen 16F628A PIC

Fritzli
20.10.2005, 09:42
Hallo

Mit dem CCSC Compilern ists einfach: Schau mal im Handbuch unter printf() nach. Damit kann man beliebige Zahlen beliebig ausgeben, läuft gleich wie die ANSI C printf-Funktion.


Gruess
Fritzli

RoboLeo
20.10.2005, 10:07
Jo

alles klar werds gleich mal nachsehen.

Gruss

RoboLeo
01.11.2005, 09:47
Hi

Schon mal danke soweit.

Blick mit dem RS232 noch nicht wirklich durch. Vielleicht kann mir ja jemand helfen.

So hab jetzt eine Verbindung zum Computer. Mit dem Programm COM Terminal wollte ich dann mal das Einganssignal darstellen. Das Signal hab ich direkt am T1Out Pin des MAX232 abgegriffen.

Ì 204 11001100
Ë 203 11001011
Ì 204 11001100
Ë 203 11001011
È 200 11001000
Æ 198 11000110
Å 197 11000101
0 00000000

Das ist der Input nach einem Sendezyklus. Am Oszi hab ich ein Ausgangssignal mit 24 Flanken. Wie kann es sein das soviel mehr empfangen wird?

Das ist der Sendebefehl innerhalb meines Programms.

printf("%d,%d,%d,\n",timercount,hallgear,hallwheel);

Bsp. 01,23,34

Dachte die RS232 Schnittstelle gibt alles gleich in ASCI aus?

Gruss

Fritzli
01.11.2005, 10:26
Hallo

Probier's doch erst mal mit einem einfacheren Testprogramm:



// config, etc
int i;
i=0;
while(TRUE)
{
printf("%d\n", i);
delay_ms(10); // damits etwas gemächlicher geht
i++;
}


Als Terminalprogramm kannst Du auch Hyperterminal nehmen (das liefert allerdings keine Hex oder Binärdarstellung, es sei denn, der PIC macht das)



Dachte die RS232 Schnittstelle gibt alles gleich in ASCI aus?
Was meinst Du damit? RS232 liefert grundsätzlich nur Spannungspegel. Was Sichtbares daraus macht erst das Terminalprogramm. Das interpretiert die Daten dann normalerweise nach dem ASCII-Standard. Damit das Empfangsprogramm also das richtige anzeigt, muss der Controller die selbe Sprache (also z.B. ASCII) sprechen.

Die Binär-zu-ASCII-Codierung einer Zahl macht übrigends das "%d" im printf.

Gruess
Fritzli

RoboLeo
01.11.2005, 13:28
Hi

Ok wenn ich das jetzt richtig verstanden habe sendet der PIC die Daten als ASCI Code und das Hyperterminalprogramm sollte die Daten wieder von ASCI umwandeln koennen.

Habs jetzt probiert mit Hyperterminal. Bekomme aber leider gar keine Daten rein. Einstellung sind alle gleich. 8Bit, 9600Bits per second, Parity none, 1 Stopbit.

Hab gerade mal die Spannung am Ausgang des Max232 gemessen. Hab da ungefaehr 6,5 Volt. Soweit ich weiss benoetigt die RS232 am PC 12Volt Pegel. Kann das vielleicht das Problem sein?
Hab den Max232 standardmaessig beschalten. (siehe File)

Gruss

Fritzli
01.11.2005, 15:23
Hallo

Richtiger COM-Port ausgewählt?

Schaltung sieht soweit ok aus.
Die 6.5V sollten kein Problem darstellen. Funktioniert im Prinzip auch mit 5V/0V - Pegeln. War bei der Messung der PC dran?

Was für'n PIC?
Kannste mal den gesamten Code posten?

Gruess
Fritzli

RoboLeo
02.11.2005, 06:34
Guten Morgen

Also COM PORT ist der richtige. Zumahl ich nur einen am PC habe und ich ja mit COM TERMINAL schon einen Datenempfang hatte.
Im Programm hab ich auch com 1 gewaehlt

Habs einmal mit und einmal ohne PC gemessen. Mit PC hab ich einen minimalen Spannungsabfall von 0,1 Volt. Also das sollte dann soweit OK sein.

PIC628A

Code anbei.

Gruss

RoboLeo
02.11.2005, 07:14
So nochmal

Nach nem Kaffee geht doch alles immer besser.
Habs hinbekommen. Sowohl mit Hyperterminal, Com Terminal und Labview empfange ich jetzt die richtigen Daten.

Hatte aus versehen das Eingangs und Ausgangssignal vertauscht [-X

So jetzt bin ich mal gespannt ob das mit dem Labview funkt und ob das Programm und der PIC schnell genug sind fuer die Hallsensoren.

8000 U\Min ist schon was.

Gruss