Forum: Mikrocontroller und Digitale Elektronik Raspberry Pi Verbindung zu Atmega 328P UART


von Richard S. (overlord8k8)


Angehängte Dateien:

Lesenswert?

Hallo µ-Community,

Ich habe ein Problem bei folgender Schaltung:

Ich möchte meine RPi mit einem ATMEGA 328P(U) mit 12MHz Oszillator über 
UART verbinden, als Basis für meinen Versuch habe ich diese
http://www.andremiller.net/content/raspberry-pi-and-arduino-via-gpio-uart
Anleitung genommen.

Die Konfiguration des RPi hat soweit geklappt, die /boot/cmdline.txt 
habe ich auf
1
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait
geändert und in der /etc/inittab
1
2:23:respawn:/sbin/getty -L ttyAMA0 9600 vt100
auskommentiert.
Zugriff auf die Serielle Schnittstelle /dev/ttyAMA0 habe ich mit 
Putty&Plink.
1
sudo plink -serial /dev/ttyAMA0 -sercfg 57600,8,n,1

Auf dem 328P läuft ein Programm welches Teststrings im Sekundentakt 
sendet.(Siehe Anhang)

Als Pegelwandler (5V-3,3V) verwende ich einen CD74HC4050E
http://at.farnell.com/jsp/search/productdetail.jsp?sku=1739945
(ähnlich dem in der obigen Anleitung), auf einer kleinen Platine mit 
Sockel&6 Pins. 1 Pin VCC, 1Pin GND, 4Pins für I/O.

Verbunden ist das ganze so (Siehe Anhang):
RPi 3,3V -> CD4050 VCC
RPi GND -> CD4050 GND
RPi RXD -> CD4050 Ausgang (Y)
ATMEGA 328P TXD -> CD4050 Eingang (A)

Problem:
Wenn ich jetzt eine Verbindung herstelle kommen zwar ~90% der Daten an, 
leider kommen in den Pausen und den zwischen den Zeichen&Strings 
Unmengen an Fehlinformationen (Kryptische Zeichen) (úTEó11=)ÿÿTEST...). 
Wenn ich die Spannung am O-Pin Messe ist diese im Bereich 2,3V (hab 
leider grad kein Oszi), sollte diese 3,3V betragen?
Komisch: Wenn ich das TXD Kabel vom Atmega abziehe und praktisch keine 
Spannung anliegt, bekomme ich auch Störsignale sobald ich das TXD-Kabel 
bewege :/.
Als Verbindungskabel benutze ich diese F-F Jumperkabel
http://cgi.ebay.at/ws/eBayISAPI.dll?ViewItem&item=271057611562

Problem 2:
Mein Versuch den RPi TXD direkt mit dem Atmega RXD (3,3V=>HIGH?)zu 
verbinden und ein Testprogramm, welches mit dem PC funktioniert zu 
probieren, war ebenfalls  auf die Schnelle ohne Erfolg :/

Die Kommunikation von Atmega zu PC mit TTL232R-USB to Serial Kabel 
funktioniert tadellos mit der gleichen Konfiguration von Putty&Plink.

Ich bin inzwischen echt verzweifelt :/, ich habe noch nie einen solchen 
Fehler gehabt, komischerweise habe ich noch keine anderen 
Tutorials/Tests zu dem Thema RPi<->Atmega UART gefunden, deshalb so 
ausführlich :).

MfG
overlord8k8

von Simon K. (simon) Benutzerseite


Lesenswert?

Der interne Oszillator im AVR ist zu ungenau für übliche 
UART-Anwendungen.

Oder soll das an dem ewig langen kabel da ein Quarz sein... Ohje

Einige andere wichtige Bauelemente scheinen dem AVR auch zu fehlen? 
Gibts da einen Schaltplan zu dem "hingerotzten" Stück Lochrasterplatine?

von Richard S. (overlord8k8)


Lesenswert?

Simon K. schrieb:
> Der interne Oszillator im AVR ist zu ungenau für übliche
> UART-Anwendungen.
>
> Oder soll das an dem ewig langen kabel da ein Quarz sein... Ohje
>
> Einige andere wichtige Bauelemente scheinen dem AVR auch zu fehlen?
> Gibts da einen Schaltplan zu dem "hingerotzten" Stück Lochrasterplatine?

Nein, der 12Mhz Oszillator ist schon extern (Die Platine ist auf keinem 
Bild -.-!)
An dem ewig langem Kabel hängt kein Quarz >.<, ein 4poliger 
Harwin-Stecker zur Verbindung mit der Platine...

Einen Schaltplan braucht man nicht wirklich -> siehe Datenblatt C4050 
Schaltplan Seite 2 Funktionsdiagramm,,,,
http://www.ti.com/lit/ds/symlink/cd74hc4050.pdf

Hat vielleicht irgendwer Erfahrung mit dem CD74HC4050? UART Verbindungen 
mit solchen Kabeln?

MfG

von BBsan (Gast)


Lesenswert?

Auch wenn das Problem mitlerweil irrelevant ist:
Ich hatte dasselbe Problem mit einem Arduino Uno und einem Raspberry Pi 
bei einer ähnlichen Schaltung.

Bei mir ließen sich die Probleme auf 2 Dinge zurückführen:

1. Die direkte serielle Schnittstelle ist zu "unsauber" für den 
Raspberry Pi - das heißt, das Rauschen ist zu stark. Lösung für mich war 
eine virtuelle serielle Schnittstelle, die ich an 2 anderen Pins des 
Mikrocontrollers angelegt habe mit dem Ergebnis, dass ich eine saubere 
Verbindung ohne Rauschen hatte.

2. Sendest du einen Stringterminator und flushst dann einmal den Buffer? 
Daran hat es bei mir gelegen. Falls du keinen Stringterminator sendest, 
liest die Mikrocontroller sonst den kompletten übrigen Speicher aus und 
gibt kryptische Zeichen.


Das sind meine beiden naiven Lösungsansätze. Ich muss allerdings dazu 
sagen, dass ich kein E-Techniker bin, sondern nur Informatiker. Mit der 
Hardwareseite kenne ich mich leider deshalb nur bedingt aus.

von Simon S. (-schumi-)


Lesenswert?

Das hört sich nach undefinierten Pegeln an.. Versuche Probehalber  mal 
an allen vier Leitungen (Rx Tx 5V, Rx Tx 3V3) jeweils einen Widerstand 
von irgendwas um die 10k nach Gnd einzubauen.

(Der Avr sollte normal immer einen festen Pegel haben (beim RPi weis ich 
es nicht sicher), aber schaden kanns nicht)

von Michael (Gast)


Lesenswert?

BBsan schrieb:
> 1. Die direkte serielle Schnittstelle ist zu "unsauber" für den
> Raspberry Pi - das heißt, das Rauschen ist zu stark. Lösung für mich war
> eine virtuelle serielle Schnittstelle, die ich an 2 anderen Pins des
> Mikrocontrollers angelegt habe mit dem Ergebnis, dass ich eine saubere
> Verbindung ohne Rauschen hatte.

Da waren sicher Amateure am Werk die keine Ahnung hatten. Ich fürchte 
ihr solltet euch vorher mal selber auf die Finger schauen und überlegen 
ob das Problem nicht eher bei euch liegt. Wenn ich mir die Schaltung und 
den Aufbau hier so anschaue, dann kommen mir ernsthafte Zweifel ob die 
RPi-Leute weniger Ahnung hatten als ihr.

Mal darüber nachgedacht den RPi zu schirmen, keine meterlangen Leitungen 
freifliegend neben hochfrequenten Logiksignale zu legen? Wo sind die 
Kondensatoren für den  CD4050  ???

von Erwin (Gast)


Lesenswert?

Hallo,

ich hab hier noch was zum Thema gefunden.
http://bascom-forum.de/showthread.php?4913-Serial-Interface-Raspberry-Pi-lt-gt-ATXMEGA-115200-baud

Hast Du auch wie dort beschrieben den Raspi Debug ouput abgeschalten ?

von Richard S. (overlord8k8)


Angehängte Dateien:

Lesenswert?

Hallo,

Danke für die späten Antworten, habe das Problem aber inzwischen gelöst!

Es war ein simpler Anfänger Fehler,ich habe unbewusst die GNDs nicht 
miteinander verbunden -> Unterschiedliches Potential zwischen den Pegeln 
und jede Menge Störsignale...

Also Schaltung nach dem Schaltplan im Anhang aufbauen und es sollte 
funktionieren.

Für RPi->ATmega16 einfach direkt die Pins RPi_TXD mit ATmega16_RXD 
verbinden, GND muss natürlich auch verbunden werden ;)!

MfG
overlord8k8

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.