Forum: Mikrocontroller und Digitale Elektronik ATMEL SAM7SE -> Software UART


von Florian F. (e-lore)


Lesenswert?

Hallo zusammen!

Nach einigem hin und her ist nun in etwa klar, wie das Projekt für meine 
Diplomarbeit aussieht.

An einer Sache hänge ich zur Zeit gedanklich. Ich muss ein serielles 
Signal (von einem Feldbus abgewandelt) lesen und schreiben. Dabei muss 
ich ein break field genrieren und auch abfangen können. Nun ist diese 
break field leider nicht UART konform. Die Spannung wird nämlich auf 0 
gezogen für mindestens 14 bits. Danach gibts dann konforme Zeichen (sync 
mit 0x55 = 1010101).

Ich denke, daß man das am günstigsten mit nem Software UART hinter dem 
eigentlichen UART realisieren kann. Wobei der HW - UART einfach nur die 
Bits puffert und weiterschiebt. Eine andere Variante wäre es noch (das 
würede aber sehr kompliziert ausfallen) das Ganze über einen zusätzlich 
angeschlossenen ADC zu machen. Der wird sowieso angeschlossen, da es 
auch das physikalische Signal abgetastet werden soll.

Das was ich nun wissen will:

Sind meine Gedankengänge da richtig? (habe nicht viel Erfahrung auf dem 
Gebit)

und wenn ja: wie realisiere ich diesen Software UART? gibts da schon SW, 
die man quasi fertig runterladen kann und nutzen darf (Open Source). Bis 
jetzt habe ich da den genereic software UART von Colin Gittins bei IAR 
systems gefunden...

Danke schonmal für Antworten!


Grüße

Florian

von A.K. (Gast)


Lesenswert?

Was ist das Problem an "BREAK"? Das ist zwar ein gezielter Anschlag auf 
das serielle Datenformat, aber schon ungefähr so alt wie die asynchrone 
Übertragung selber. Identifizierbar beispielsweise als Datenbyte 00 mit 
Framing Error.

von Florian F. (e-lore)


Lesenswert?

hmmmm...

dann wäre doch aber die Spannung auf der TX Leitung konstant 5 und nicht 
0 Volt, oder kann der Befehl speziell genutzt werden?

ausserdem könnte ich den lediglisch schreibend nutzen...ich könnte kein 
break Signal von 14 Byte länge erkennen, wenn es gesendet wird...

von A.K. (Gast)


Lesenswert?

Wenn es wichtig ist, genau 14 Bits zu erkennen: Rx nicht nur an den 
UART-Pin vom Controller sondern auch an einen Timer-Pin anschliessen. 
Und wenn die UART des SAM7 selber kein BREAK senden kann: Den Tx-Pin des 
Transceivers/Pegelwanders per AND- oder Diodengatter zusätzlich an einen 
normalen IO-Pin anschliessen.

von Florian F. (e-lore)


Lesenswert?

Sagen wir es ist tatsächlich essenziell...

Nun ist das alles natürlich recht viel gebastel..vor allem in der 
Software, weil das Timing für das Break-Signal sehr genau stimmen 
muss..ausserdem ist das ja ein MINIMUM von 14 Bytes und ist laut 
Spezifikation realtiv offen...

Wäre es nicht tatsächlich einfacher dann gleich den UART Softwareseitig 
zu realisieren? ich habe ja nur die RX und die TX Leitung und kaum 
irgendwelche speziellen Checksummen oder dergleichen... Ich denke ich 
hätte weniger Ärger...ich bin mir eben nur nicht sicher, ob meine 
Gedankengänge korrekt sind

von A.K. (Gast)


Lesenswert?

Soft-UART ist hardwareseitig einfacher, softwareseitig komplizierter. 
Wenn dieser Feldbus wie üblich half duplex arbeitet geht's per Soft 
freilich ganz gut. Aber such es dir aus.

von Florian F. (e-lore)


Lesenswert?

yep..das machter...es gibt immer noch einen der sendet und jede Sendung 
muss vom Master Node initiiert werden...

Ich wüsste halt nicht, wie ich das Ganze timen soll, wenn ich z.B. einen 
IO an einen kleinen Schalter hängen würde und quasi als pull-down-enable 
nutzen würde. Man muss es ja genau so einstellen, daß der UART dann das 
sync byte (0x55) empfangen kann und so lange die metaphorischen Füße 
still hält.

Beim empfangen könnte man den sowieso schon angeschlossenen ADC 
nutzen...oder wäre das auch zu kompliziert? Ich habe leider einfach zu 
wenig Erfahrung bei solchen Dingen und versuche mir das mit meinem 
bisherigen Wissen herzuleiten. Nur will ich nicht den falschen Weg 
einschlagen und hinterher beim Schreiben der Diplomarbeit in größere 
Zeitbedrängnis geraten...

von A.K. (Gast)


Lesenswert?

Ich habe keine Ahnug was du dir von einem ADC versprichst.

von Florian F. (e-lore)


Lesenswert?

"Der wird sowieso angeschlossen, da es
auch das physikalische Signal abgetastet werden soll."

wobei mir gerade auffällt, daß das Ding vor dem Interface angeschlossen 
wird...also hat sich die Sache sowieso...

von A.K. (Gast)


Lesenswert?

Ein kurzer Blick ins Datasheet vom SAM7SE zeigt, dass dessen UART 
explizit BREAK senden und erkennen kann. Und das Timing vom BREAK-Status 
erfassbar ist. Was also soll der Zirkus???

von gerhard (Gast)


Lesenswert?

@a.k.:
das der at91sam7s breaks senden und empfangen kann stimmt, allerdings 
kann das break nur 11 bits lang werden und florian braucht aber 14 bits.

wobei ich mir ja nicht vorstellen kann, welch "kranker" feldbus mit 14 
bits langem break arbeitet. aber vielleicht verrät es es uns ja noch.

gruss
gerhard

von A.K. (Gast)


Lesenswert?

Sorry, ich les das anders. Der kann Break beliebig lang generieren. Nur 
nicht exakt 14 Bitzyklen. Aber oben wird auch nur mindestens 14 
verlangt.

von gerhard (Gast)


Lesenswert?

@a.k.: du hast recht, ich habe sowohl das datasheet als auch die 
anforderungen nicht genau genug gelesen. damit sollte das ganze 
eigentlich ohne probleme funktionieren

gruss
gerhard

von Florian F. (e-lore)


Lesenswert?

Wie schon gesagt...ich versuch hier mein Bestes, um das hinzubekommen 
und hab da wohl was übersehen...

der kranke Feldbus ist der LIN-Bus..

von Florian F. (e-lore)


Lesenswert?

jedenfalls...vielen vielen Dank!

von gerhard (Gast)


Lesenswert?

hallo florian,
einer der vorteile von lin ist, daß mit einem standard-uart das 
auslangen findet.
unte der unter http://www.atmel.com/products/AVR/auto/ findest du eine 
app. note inkl. source code für einen lin master/slave aus basis avr.
da kannst du dir mal ansehenm wie das synch break mit einem standard 
uart erzeugt werden kann.

gruss
gerhard

von Florian F. (e-lore)


Lesenswert?

whaaa!!!

genau sowas habe ich gesucht!

DANKE!!

von Florian F. (e-lore)


Lesenswert?

holla..hab gut zu tun den Code zu verstehen..ist nicht so ganz 
einfach... :)

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.