AVR und Raspberry - SPI invertieren

Gast #4047900
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?
Gast #4048000
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.
#4048040
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:
1
Atmel Out ---+
2
             |
3
            +-+
4
            | |
5
            | | 1k8
6
            +-+
7
             |
8
             o------ Raspi GPIO IN
9
             |
10
            +-+
11
            | |
12
            | | 3k3
13
            +-+
14
             |
15
             |
16
 GNG --------o------ GNG
Oder nimm, wenn du mit 8Mhz auskommst, den Mega8L. Der hat eine 
Spannungsversorgung von 2,7V - 5,5V.
Gast #4048275
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.
Gast #4048584
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!
#4048708
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren