Forum: Mikrocontroller und Digitale Elektronik AVR und Raspberry - SPI invertieren


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von LedJW (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

an einem Raspberry Pi habe ich einen Atmega8 angeschlossen und möchte 
diesen nun programmieren. Dabei bin ich zunächst dieser Anleitung 
gefolgt:
http://kevincuzner.com/2013/05/27/raspberry-pi-as-an-avr-programmer/

Nun habe ich leider als Pegelwandler zwischen RPi (3V3) und AVR (5V) 
einen einfachen Transistor verwendet:
GPIO --- [1 K] --- BC547 ---+--- [10 K] --- 5V
                     |      |
                    GND    AVR
bzw. umgekehrt für das MISO-Signal.

Dabei dachte ich mir, dass ich die Invertierung irgendwie per Software 
aufheben könnte, was ich nun seit gut einer Stunde versuche.
Kann mir jemand dabei behilflich sein?

von Oliver J. (skriptkiddy)


Bewertung
0 lesenswert
nicht lesenswert
Wie wärs mit nem USBasp (wenige Euro bei ebay) und avrdude zum flashen? 
Das müsste out of the Box ohne irgendwelche Kopfstände funktionieren.

Grüße Oliver

von LedJW (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Die Verbindung vom Raspberry-SPI besteht zum AVR besteht sowieso zwecks 
Datenübertragung, darüber wollte ich den Controller nun auch 
programmieren.
Die ganze Hardware dafür ist schon fertig.

von Wolfgang (Gast)


Bewertung
0 lesenswert
nicht lesenswert
LedJW schrieb:
> Nun habe ich leider als Pegelwandler zwischen RPi (3V3) und AVR (5V)
> einen einfachen Transistor verwendet:
> GPIO --- [1 K] --- BC547 ---+--- [10 K] --- 5V
>                      |      |
>                     GND    AVR
> bzw. umgekehrt für das MISO-Signal.

... und warum keinen einfachen FET? Dann hättest du das Problem mit der 
Invertierung nicht (Philips AN97055 Fig.2).

LedJW schrieb:
> Die ganze Hardware dafür ist schon fertig.

Na, dann fehlt nur noch die passenden Software. Datenbytes invertieren, 
bevor sie über SPI rausgeschickt werden, Datenbytes bei Empfang 
invertieren, SPI Mode ändern und Reset-Steuersignal invertieren, wäre 
die Alternative zu nichtinvertierenden Pegelwandlern.

von PittyJ (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Kann man da nicht noch einen zweiten Transistor benutzen? 2 * invertiert 
== normal? Das ist doch einfacher als die Software umzuschreiben.

von Joachim R. (bastelbaer)


Bewertung
0 lesenswert
nicht lesenswert
Du kannst den Transistor auch ganz weglassen und nur mit Widerständen 
arbeiten. Den GPIO des Raspi kannst du direkt auf den Eingang des Atmels 
legen. Der erkennt 3,3V als High. Und umgekehrt das Signal vom Atmel zum 
Raspi kannst du mit einem Spannungsteiler aus zwei Widerständen mit 3,3k 
und 1,8k realisieren. Hab SD-Karten so an nen Atmel angeschlossen, ohne 
Probleme. Also so:
Atmel Out ---+
             |
            +-+
            | |
            | | 1k8
            +-+
             |
             o------ Raspi GPIO IN
             |
            +-+
            | |
            | | 3k3
            +-+
             |
             |
 GNG --------o------ GNG
Oder nimm, wenn du mit 8Mhz auskommst, den Mega8L. Der hat eine 
Spannungsversorgung von 2,7V - 5,5V.

von LedJW (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für alle Antworten!

Wolfgang schrieb:
> Datenbytes invertieren, bevor sie über SPI rausgeschickt werden,
> Datenbytes bei Empfang invertieren, SPI Mode ändern und
> Reset-Steuersignal invertieren
Das habe ich gestern versucht, aber nicht fertig gebracht.

PittyJ schrieb:
> Kann man da nicht noch einen zweiten Transistor benutzen? 2 * invertiert
> == normal?
So werde ich es jetzt wohl machen.

Joachim R. schrieb:
> Du kannst den Transistor auch ganz weglassen und nur mit Widerständen
> arbeiten. [...]
Von der Lösung habe ich gehört, allerdings war ich mir nicht sicher, ob 
das auch wirklich zuverlässig ist. Gefährlicher für den Raspberry ist es 
bei falscher Verdrahtung in jedem Fall.

von Joachim R. (bastelbaer)


Bewertung
0 lesenswert
nicht lesenswert
LedJW schrieb:

> Von der Lösung habe ich gehört, allerdings war ich mir nicht sicher, ob
> das auch wirklich zuverlässig ist. Gefährlicher für den Raspberry ist es
> bei falscher Verdrahtung in jedem Fall.

Bei falscher Verkabelung ist alles für den Raspi gefärlich, auch die 
Transistorlösung  :-).

von LedJW (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Nun habe ich jeweils einen zweiten Transistor spendiert, es funktioniert 
jetzt einwandfrei.

                  5V --- 3K3           5V --- 10K
                          |                    |
GPIO --- 10K --- BC547 ---+--- 1K --- BC547 ---+--- AVR
                   |                    |
                  GND                  GND

Bei MISO eben andersrum, mit 3V3 an den Pullups.
Die Widerstände sind natürlich so nicht optimal, aber die Hälfte der 
Schaltung stand ja schon.
Achtung beim Reset-Pin, der wird von avrdude (nach obiger Anleitung) nur 
zwischen GND und hochohmig umgeschaltet:

       10K --- 3V3
        |
GPIO ---+---- BC547 --- ...
Reset           |
               GND

Vielen Dank für alle Antworten!

von Joachim B. (jar)


Bewertung
0 lesenswert
nicht lesenswert
Joachim R. schrieb:
> Bei falscher Verkabelung ist alles für den Raspi gefärlich, auch die
> Transistorlösung  :-).

besonders durch die Vielzahl der beteiligten Bauelemente kann sich eher 
ein Fehler einschleifen.

LedJW schrieb:
> Nun habe ich jeweils einen zweiten Transistor spendiert, es funktioniert
> jetzt einwandfrei.

schön,

leichter finde ich bei mehr als einer Leitung Pegelwandler wie den 
74HC4050 nichtinvertierend oder  74HC4049 invertierend, bis 16V rein und 
raus kommt maximal VCC
zum PI -> Signalrichtung eben VCC vom 74HC4050/49 auf 3,3V und in 
Gegenrichtung
zum AVR o.ä. -> Signalrichtung eben VCC vom 74HC4050/49 auf 5V

lohnt natürlich bei 1 bis 2 Leitungen nicht

bei TxD RxD habe ich nur einen 470 Ohm in die Leitung gelegt und am PI 
Port eine BAT42 zu 3,3V, sämtliche über 3,3V zum PI wird nach 3,3V über 
die Diode abgeleitet, der Strom durch den 470 Ohm begrenzt

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.