Forum: Mikrocontroller und Digitale Elektronik RaspberryPi per UART zum AVR


von chrysator (Gast)


Lesenswert?

Hi leute

Ich habe mir letzte woche endlich einen Raspi gekauft und bin jetzt 
dabei mich mit dem Ding anzufreunden.

Mein Ziel ist es, meine hobby-cnc maschine mit einem Rapi und einem AVR 
laufen zu lassen. Das heit ich geb G-Code auf den Rapi, der verarbeitet 
(vieleicht macht das auch der AVR) ihn und stellt das User Interface für 
kleinere Arbeiten (Linie Fräsen, Lochkreis, Lochreihe etc) bereit. Das 
ganze Real-time zeugs läuft dann auf dem AVR, welcher die Endstufen und 
andere Hardware der Fräse steuert.

Jetzt meine Frage:
Wie kommunizier ich am besten zwischen RasPi und AVR?
Viele schlagen ja USB vor, ich hatte eher an UART gedacht.

Kann man das mit dem UART realisieren? Und wenn ja hat das schon jemand 
von euch gemacht?

(Nebenbei: Weiss jemand ob man den RasPi auch für kommerzielle Zwecke 
nutzen darf?)

Das Problem der 5V an den GPIO ist mir bewusst aber das lässt sich ja 
leicht lösen.
Der UART wäre halt geeignet, da ich dann nicht ein USB anschluss beim 
AVR realisieren muss. (Wenn UB aber bessere Lösung ist mach ich das.)

Danke

Chrys

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

chrysator schrieb:
> Kann man das mit dem UART realisieren?

Ja natürlich. Allerdings musst du dir ein eindeutiges Datenformat 
ausdenken, damit der AVR was damit anfangen kann. Die Frage ist z.B., ob 
du gleich ein Standardformat benutzt, wie HP-GL oder Gerber.
Die nächste Frage ist, kann der AVR das alleine interpretieren oder 
sollte der RPi das machen und dem AVR vorgekaute Simpeldaten schicken, a 
la 'X-Motor fahre zu Punkt 1023'. Das bleibt dir überlassen.
Linux jedenfalls kann mit den (s)tty devices gut umgehen.

Evtl. schreibst du in den AVR erstmal eine kleinen UART Receiver, der 
einfache Befehle (bis zum Return) empfängt und interpretiert.

von chrysator (Gast)


Lesenswert?

Danke!

Ja ich werde wohl dem AVR ein Standardformat füttern (weiss noch nicht 
welches) und auf dem RasPi andere Formate zum Standardformat 
konvertieren, ist vermutlich das einfachste.

Werde mich mal ans "Basteln" machen. Wenn ich neue Fragen habe werde ich 
sie hier posten. Vieleicht gibt es ja noch andere, die eine ähnliche 
Aufgabe für ihren RasPi haben.

Chrys

von joachim (Gast)


Lesenswert?

Hallo!

Ich habe gestern ein Programm zum Laufen gebracht, dass das in etwa 
abdeckt: der Pi schickt Daten an den AVR; der gibt daraufhin eine 
Antwort zurück. Das ganze muss nur noch "wasserdicht" gemacht werden.

Ich werde heute Abend den Code bereitstellen, wenn Bedarf besteht. Der 
ist allerdings (dank der Hilfe in diesem und anderen Foren) 
zusammengeklau(b)t

von Norbert (Gast)


Lesenswert?

Achtung, die UART Schnittstelle ist wie so einiges Andere beim Raspi 
recht 'wackelig'

Ein UART Testprogramm (*1) mit einem Jumper auf den passenden Pins des 
GPIO
zeigte bis zu 38400 keine Probleme.
Ab 57.6k gabs vereinzelte Zeichenfehler, ab 115.2k wurde es grauslig.

Es schien einen Zusammenhang zwischen Netzwerkverkehr und 
UART-Fehlerrate zu geben.


*1) 1024 Byte Datenblöcke aus /dev/urandom mit md5sum
Sowohl 'singlethreaded interleaved send and receive'
als auch 'multithreaded send and receive' zeigten gleiches Verhalten.

PS. CPU Auslastung minimal
PPS. Ja, Netzteil ist stabil und liefert 2A

von chrysator (Gast)


Lesenswert?

Ok hab jetzt noch eine Frage wie ich das ganze anschliesse.
Ich hatte eigentlich gedacht, dass ich vom RasPi (TX,RX) über den 
Pegelwandler (nur in eine Richtung (der AVR erkennt ja 3.3V as high)) 
zum AVR (RX,TX). also von RX zu TX und umgekehrt.

Jetzt les ich im Netz aber immer wieder irgendwas von einem Max3232 
(3.3V version. Wieso sollte ich das ganze erst zu einem Serial wandeln , 
dann wieder rückwandeln und dann zum AVR?

Macht meine Pin-to-Pin lösung Sinn oder überseh ich da was 
fundamentales?

danke chrys

von Norbert (Gast)


Lesenswert?

1) Betreibe den AVR mit 3,3V und spar dir die Anpassung
2) AVR mit 5V:
   Raspi -> AVR direkt
   vom AVR Tx über 1kOhm Widerstand an Raspi Rx und von dort
   eine Z-Diode 3,3v gegen Gnd.

von Norbert (Gast)


Lesenswert?

Norbert schrieb:
> Raspi -> AVR direkt

Soll heissen: Raspi Tx -> AVR Rx direkte Verbindung

von chrysator (Gast)


Lesenswert?

Ok leider hab ich im moment nur 100V ganz normale Schaltdioden da.

Aufbau:
1
TX(AVR)------R(1k)-------RX(RasPi
2
                      |
3
                      |
4
                    Z-Diode
5
                      |
6
                     GND

Hab ichs verstanden?

Geht das auch mit den Schaltdioden ( 1N 4148 )

Was ist ein 5V, bzw. 3.3V Gatter?

chrys

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

chrysator schrieb:
> Geht das auch mit den Schaltdioden ( 1N 4148 )

Ja, geht auch. Statt der Z-Diode nimmt du 5 Stück 1N4148 und schaltest 
die in Reihe, und in Leitrichtung (Anode an die TX Leitung nach dem R, 
Kathode an Masse). Allerdings ist das vermutlich gar nicht nötig, wenn 
der UART Eingang Schutzdioden hat und du mittels deines R für geringen 
Strom sorgst. 2k2 bis 4k7 sind da schon ok.

von chrysator (Gast)


Lesenswert?

Matthias Sch. schrieb:
> Allerdings ist das vermutlich gar nicht nötig, wenn
> der UART Eingang Schutzdioden hat

Also wenn man beim RasPi mit 5V ankommt raucht der und dann ist er weg 
:)

Also werd ich wohl oder übel 5 Dioden in Serie schalten müssen wenn ichs 
heute noch ausprobieren will :S

danke

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

chrysator schrieb:
>> Allerdings ist das vermutlich gar nicht nötig, wenn
>> der UART Eingang Schutzdioden hat
>
> Also wenn man beim RasPi mit 5V ankommt raucht der und dann ist er weg
> :)

Wieder nicht komplett zitiert - ech. Natürlich muss der Widerstand zur 
Strombegrenzung drinbleiben. Du kannst statt der 5 Dioden in Reihe auch 
eine nehmen, die von der TX Leitung (nach dem Widerstand !) gegen die + 
3,3 Volt des RPi geht. Geht die Spannung über 4V, wird nach + 
abgeleitet. So sind auch die internen Schutzdioden des UART beschaltet.

von Norbert (Gast)


Lesenswert?

Matthias Sch. schrieb:
> Ja, geht auch. Statt der Z-Diode nimmt du 5 Stück 1N4148 und schaltest
> die in Reihe, und in Leitrichtung (Anode an die TX Leitung nach dem R,
> Kathode an Masse). Allerdings ist das vermutlich gar nicht nötig, wenn
> der UART Eingang Schutzdioden hat und du mittels deines R für geringen
> Strom sorgst. 2k2 bis 4k7 sind da schon ok.

Der verbaute Broadcom Chip soll wohl ein rechtes Sensibelchen sein, 
sowohl beim möglichen Ausgangsstrom als auch der Eingangsspannung.

von chrysator (Gast)


Lesenswert?

ok jetzt blick ich gar nicht mehr durch ... was passiert wenn ich dioden 
in serie schalte?

zweitens

Matthias Sch. schrieb:
> Natürlich muss der Widerstand zur
> Strombegrenzung drinbleiben. Du kannst statt der 5 Dioden in Reihe auch
> eine nehmen, die von der TX Leitung (nach dem Widerstand !) gegen die +
> 3,3 Volt des RPi geht. Geht die Spannung über 4V, wird nach +
> abgeleitet.

Hast du das mit dem RPi schon gemacht?
Möchte einfach sicher sein bevor ich das Ding anschliesse. Und ich finde 
nirgends Zahlen über max V, A bei den GPIO Inputs.

chrys

von Robert H. (halle)


Angehängte Dateien:

Lesenswert?

Hallo,

ich will die selbe Art von Schnittstelle nutzen und habe diese Schaltung 
im Internet gefunden.

http://www.rn-wissen.de/index.php/Raspberry_PI:_GPIO

Die ist schon etwas umfangreicher als das was ich oben gelesen hab.
Was meint ihr? Ist das sinnvol bezüglich Pegelstabilität und so?
Ich hab auf das Ding ein halbes Jahr gewartet... Ich hab keine Lust dass 
es nach einer Wocher abraucht :D

mfg

von Sam .. (sam1994)


Lesenswert?

Warum nicht einfach den Avr mit 3,3V laufen lassen?

von Robert H. (halle)


Lesenswert?

Das Netzteil hat 5V... Spannung runter wandeln gäng natürlich auch...

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.