PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Zwei serielle Datenstränge geleichzeitig mit PIC empfangen



Tobi R.
19.11.2005, 16:01
Hallo!

Ich habe das Problem, dass ich zwei serielle Datenstränge gleichzeitig empfangen, verarbeiten und einen wieder senden muss. Das ganze soll mit einem PIC passieren. Da ich nicht auf einen großen (wäre etwas oversized) mit zwei UARTs zurückgreifen will, muss ich das Empfangen und Senden wohl per Code bearbeiten.

Hat jemand eine Idee, wie ich das am geschicketesten anstelle? Die Baudrate ist bei allen Übertragungen gleich.

Vielen Dank schon mal!

Gruß Tobi

PicNick
19.11.2005, 18:05
Irgendein Hardware-Handshake kommt nicht in Frage ? Sprich: kannst du bestimmen, wer von den zweien grad was zu sagen hat ? Oder plappern die zwei einfach los, wenn ihnen danach ist ?

Fritzli
19.11.2005, 18:07
Wie schnell kommen die Daten rein?
Ist das ein kontinuierlicher Datenstrom oder hats Pausen zwischen einkommenden Daten?

Ein paar mehr Infos zu den eingehenden und ausgehenden Daten könnten nicht schaden. Man muss ja vielleicht nicht unbedingt gleich ein bis-auf-den-letzten-Befehl-optimiertes Assembler Multitasking-System schreiben.

Gruess
Fritzli

Tobi R.
20.11.2005, 10:58
Danke für die schnellen Antworten.

Es geht hier um das Protocol DMX512, welche per RS485 übertragen wird. Dabei gibt es einen Break von glaub 88µs und dann werden zwischen 1 und 512 Frames kontinuierlich gesendet und danach folgt wieder ein Break und es geht von vorne los. Ein Frame hat 11 Bits (1 Start, 8 Daten, 2 Stop) und 1 Bit ist 4µs lang! Ich habe keinen Einfluss, wann die Daten gesendet werden.

Gruß Tobi

PicNick
20.11.2005, 13:07
Naja, DMX512 mußt du, glaub' ich, sowieso zu Fuß machen.
Du baust ein DMX-Gerät ?
Is da nicht nur ein Master ?

EDIT: DMX mit PIC, da hab ich schon einiges gesammelt. Muß morgen mal nachsehen, vielleicht hilft es

Tobi R.
20.11.2005, 13:29
Das mit dem einen Master stimmt! Will aber das Signal von zweien verarbeiten und auch ein neues DMX-Signal wieder ausgeben. wieder ausgeben. Hab dass zwar noch nie mit UART gemacht, aber es müsste gehen, wenn man die 9-Bit Übertragung wählt und Bit 8 immer auf 1 lässt.

PICture
20.11.2005, 21:00
Hallo Tobi R.!
Wann werden die Daten zurückgesendet? Wenn während des Empfangs dann hast Du drei Tasks zu bedienen. Ich glaube, dass Du ein UART dann vergessen kannst, und alles selber programmieren müsstest.
MfG

Tobi R.
21.11.2005, 17:33
@PICture
Ja, die Daten sollen während des Empfangs gesendet werden, allerdings nicht zurück sondern weiter zu ebenfalls unabhängigen Geräten!

Wie würdet ihr da rann gehen? Für jeden der 3 Tasks einen Timer nehmen und alles mit Interrupts machen?

PICture
22.11.2005, 18:52
Hallo Tobi R.!
Als erstes würde ich gründlich analiesieren ob das überhaupt zeitlich realiesierbar ist. Während der Dauer des "1" von einem bit müssen zwei bits komplet eingelesen und gespeichert werden und während des "0" muss ein bit komplet gesendet werden. Aus der höchsten Baudrate und dafür benötigten Befehlanzahl ergibt sich dann die min. Taktfrequenz des Prozessors. Bei solchen Aufgaben kann man meistens alle UARTs, Timers u.s.w vergessen, weil sie zu viel Zeit für Programmieren in anspruch nehmen. Vielleicht wäre es sinvoll für jeden Task einen eigenen MC zu nehmen (insgesamt 4 MCs)? Dann kann man natürlich die UARTs und Timers normal nutzen.
MfG

Tobi R.
22.11.2005, 20:06
@PICturre
Warum kann man da die meisten UARTs vergessen? Schließlich arbeiten die doch selbstständig, während ich andere Befehle ausführe, oder? Ich muss nur zwischendurch das empfangende Byte aus dem Buffer lesen und speichern.

Ich schau mir grad das Datenblatt des 18F6527 an. Der hat 2 UARTs und fast 4k Ram.

Gruß Tobi

PICture
23.11.2005, 08:36
Hallo Tobi R.!
Sorry, ich habe es übersehen, dass die alle Datenstränge gleiche Baudrate haben. Mit zwei UARTs sieht es jetzt vom Softwareaufwand viel einfacher aus und Dein Problem ist damit gelöst, oder?
MfG

Tobi R.
24.11.2005, 17:33
Ja, fast!

Doch:
Ich hab eben gesehen, dass die PICs der 18Fxx20 bei 250k Baud einen Fehler von -16% hat! Bei 10 Bit sind das locker 1 Bit! Habt ihr erfahrungen mit so hohen baudraten und wie siehts mit dem Fehler in der Realität aus?

PICture
24.11.2005, 18:26
Hallo Tobi R.!
Ich habe leider keine Erfahrungen, aber denke, dass dieser Fehler nur auf die Baudrate mit bestimmter Taktfrequenz sich bezieht. Wenn Der Quarz dessen geteilte Frequenz, die Baudrate ergibt, genau aus der Baudrate berechnet wird, gibt es keine Fehler. Die andere Frage ist, ob man ein Quarz mit der unrunden Frequenz auftreiben kann. Schau mal, bitte, auch in das Thema "Serieller schnittstelle" in diesem Forum.
MfG

Tobi R.
24.11.2005, 19:03
also 250k Baud bekomm ich aus 4, 8 oder 16 MHz nach der angegebenen Formel.

Vielen Dank erstmal. Dann werd ich das ganze mal in angriff nehmen und eine schaltung entwerfen.

Gruß Tobi

PICture
24.11.2005, 19:23
Mit 16 Mhz Quartz gibt es keine Besorgungsprobleme und der PIC wird schneller als mit dem 4,8 MHz.
Viel Erfolg!
MfG

Tobi R.
25.11.2005, 22:54
Vielen Dank! =D>