Forum: Mikrocontroller und Digitale Elektronik Bus Pegel Anfängerfragen


von Andre K. (andre1980)


Lesenswert?

Mir geistert ein paar Fragen im Kopf, wo ich keine für mich passende 
Antwort finde.

Es geht um eine Schaltung di mit Li-Ion versorgt wird. LEDs, ATTiny85, 
ADXL345.

Den ATTiny hatte ich bisher immer mit dem Arduino Nano per ISP 
programmiert. Durch anlegen von 5V an den ATTiny beim programmieren kein 
Problem.

Doch was passiert, wenn der ATTiny mit 3,3V versorgt wird. Dann sollte 
über die MOSI, MISO und SCK Leitungen doch auch maximal 3,8V anlegen 
(max. Vcc+0,5V an I/O laut Datenblatt). Der Arduino Nano hat aber 5V 
Pegel an den I/O Pins.

Durch den ADXL345 kann aber die ganze Schaltung nicht auf 5V laufen. Der 
verträgt nur max. 3,6V. Dann hätte ich dort bei der I2C Schnittstelle 
unzulässige Pegel zwischen ATTiny und ADXL345.

Aber bei dem ADXL345 Breakoutboard GY-291 wird auch nur der Chip mit dem 
integrierten LDO mit 3,3V versorgt. Die Datenleitung sind direkt mit dem 
Chip verbunden. Jedes Tutorial mit einem Arduino verbindet sich direkt 
mit dem GY-291. Somit sind auf dem I2C Bus teilweise 5V. Dies sollte der 
ADXL345 eigentlich nicht vertragen. Warum funktioniert das?
Bestimmt nur der ADXL345 die Spannung auf dem I2C Bus?

Da die ATTiny Programierschnittstelle und der I2C-Bus an den gleichen 
Pins liegt, hätte ich dennoch das Problem, das der ADXL345 zeitweise 5V 
am I2C sieht. Auf dem Steckbrett war das bisher auch immer so, und es 
ist nichts passiert. Ist das also unkritisch? Oder sollte man das 
unbedingt vermeiden?

Auch habe ich in Schaltungen von USBASP Programierern 3,6V Zehnerdioden 
gesehen. Kann ich das beim ISP auch so machen? Also die MISO, MOSI, SCK 
und Reset Leitung per Zehner 3,6V auf Ground ziehen? Ein Widerstand 
müsste dann in die Leitungen um den Strom durch die ZehnerDiode zu 
begrenzen. Obwohl in den USBASP Schaltungen ist zwischen USB-D+/D- und 
ZehnerDiode auch kein Widerstand. Warum kann man das ohne 
Strombegrenzung machen?

Viele Programmer haben zwar ein Switch zwischen 3,3V und 5V. Wenn man 
dann aber in den Schaltplan schaut, wird oft nur der VOut mit 3,3V 
geregelt. Die Datenleitungen aber nicht.

Ist es also generell unkritsch, den Bus mit etwas höheren Pegeln zu 
betreiben? Oder sollte der Pegel des Busses besser an das maximal 
angepasst werden? Oder besteht die Begrenzung des Pegels durch etwas 
anderes, was mir erstmal nicht ersichtlich ist?

von Stefan F. (Gast)


Lesenswert?

Andre K. schrieb:
> Doch was passiert, wenn der ATTiny mit 3,3V versorgt wird. Dann sollte
> über die MOSI, MISO und SCK Leitungen doch auch maximal 3,8V anlegen
> (max. Vcc+0,5V an I/O laut Datenblatt).

Korrekt

> Der Arduino Nano hat aber 5V Pegel an den I/O Pins.

Wegen der Diode in der 5V Leitung ist es etas weniger, aber trotzdem zu 
viel. geht halt so nicht. Besorge dir am Besten einen 
Programmieradapter, der sich selbst and die Spannung der Zielschaltung 
anpasst oder wenigestens einen, denn man auf 3,3V umschalten kann.

Achtung: Bei den allermeisten USBASP Mdoellen mit 3,3/5V Umschaltung 
schaltet man damit nur den Versorgungsspannungs-Ausgang um aber die 
Signale haben trotzdem 5V.

Zur Not kannst du die unpassende Spannung lassen und 180Ω Widerstände in 
die vier Signal-Leitungen schalten, damit kein Kurzschluss entsteht. 
Sauber ist das allerdings nicht.

Andre K. schrieb:
> Jedes Tutorial mit einem Arduino verbindet sich direkt
> mit dem GY-291. Somit sind auf dem I2C Bus teilweise 5V.

Nein

> Warum funktioniert das?

Weil die I²C Busteilnehmer Open-Collector (oder Open-Drain) Treiber 
haben. Der High Pegel kommt ausschließlich von Pull-Up Widerständen die 
dann auf den Ausgang eines 3,3V Spannungsreglers gelegt werden.

> Auch habe ich in Schaltungen von USBASP Programierern 3,6V Zehnerdioden
> gesehen. Kann ich das beim ISP auch so machen?

In Kombintion mit Widerständen, welche die Stromstärke auf erlaubte 
Werte begrenzen: Ja. Nur hat das dann eventuell wieder negative 
Seiteneffekte auf andere 5V Schaltungen.

Kaufe dir lieber einen ordentlichen Programmieradapter, dann brauchst du 
diesen Schnickschnack nicht.

> Ist es also generell unkritsch, den Bus mit etwas höheren
> Pegeln zu betreiben?

Das ist generell kritisch weil du damit (ohne weitere Aufwände) die 
Ausgänge des Programmieradapter und die ESD Schutzdioden der 
Zielschaltung überlastest. Kapute ESD Dioden fallen meist nicht sofort 
auf, aber irgendwann später wenn das Ding durch einfache Berührung mit 
den Finger plötzlich kaputt geht oder durch einen Überschwinger in eine 
Blockierung gebracht wird, die innerhalb des Chips einen Kurzschluss 
auslöst (Latch-Up Effekt).

von Harry L. (mysth)


Lesenswert?

Der maximale Pegel auf den I²C-Leitungen wird ausschließlich durch die 
Spannung an den PullUp-Widerständen bestimmt.
Wenn die auf 3V3 liegen (und da werden auf dem ADXL-Board vermutl. 
bereits welche verbaut sein) passen die Pegel, und auch ein mit 5V 
laufender ATMega kommt damit wunderbar zurecht.

Einfach mal die I²C-Spezifikationen studieren und verstehen!

von Einer K. (Gast)


Lesenswert?

Andre K. schrieb:
> Den ATTiny hatte ich bisher immer mit dem Arduino Nano per ISP
> programmiert.
Es gibt einige Arduinos mit 3,3V
z.B. der 8MHz Pro Mini
Auch die "fremden" ESP, ARM usw.
Die könne alle "Arduino as ISP"

von Stefan F. (Gast)


Lesenswert?

Der Crumbuino-Nano (https://www.chip45.com/arduino-nano-modul.html) 
läuft wahlweise mit 3,3V oder 5V, bzw. bei externer Versorgung mit jeder 
beliebigen Spannung dazwischen.

von Andre K. (andre1980)


Lesenswert?

Danke für die Erklärungen. Das mit dem I2C Bus, dass der Pegel nur durch 
die PullUps bestimmt wird, war mir bisher nicht klar. Und natürlich sind 
auf dem GY-291 PullUps drauf.

Dennoch sagt es mir, das ich bisher auf dem Breadboard wohl eher Glück 
hatte. Denn durch das Programmieren des ATTinys über den Arduino und das 
die I2C Leitungen zum GY-291 verbunden sind mit den Leitungen zum 
Programmieren. Dadurch kommt ja 5V Pegel auf die I2C Leitungen zum 
GY-291.

Stefan ⛄ F. schrieb:
>> Auch habe ich in Schaltungen von USBASP Programierern 3,6V Zehnerdioden
>> gesehen. Kann ich das beim ISP auch so machen?
>
> In Kombintion mit Widerständen, welche die Stromstärke auf erlaubte
> Werte begrenzen: Ja. Nur hat das dann eventuell wieder negative
> Seiteneffekte auf andere 5V Schaltungen.
>
> Kaufe dir lieber einen ordentlichen Programmieradapter, dann brauchst du
> diesen Schnickschnack nicht.

Wie groß dürfen denn eigentlich die Widerstände sein in den MOSI, MISO 
und SCK Leitungen? Zu große Widerstände beeinflussen ja die Flanken.

Gibt es Kaufempfehlungen zu Programmieradaptern?

Arduino Fanboy D. schrieb:
> Es gibt einige Arduinos mit 3,3V
> z.B. der 8MHz Pro Mini
> Auch die "fremden" ESP, ARM usw.
> Die könne alle "Arduino as ISP"

Danke. ESP8266-Boards hab ich noch rumliegen. Die haben ja nur 3,3V an 
den Pins.

von Stefan F. (Gast)


Lesenswert?

Andre K. schrieb:
> Wie groß dürfen denn eigentlich die Widerstände sein in den MOSI, MISO
> und SCK Leitungen? Zu große Widerstände beeinflussen ja die Flanken.

Genau. Das hängt sehr stark von der Frequenz ab. Der USBASP funktioniert 
mit 180 Ω noch, wenn sonst nichts weiter an den Leitungen hängt.

> Gibt es Kaufempfehlungen zu Programmieradaptern?

Ich würde dir gerne den "Atmel ISP mkII" empfehlen (benutze ich seit 10 
Jahren), aber den gibt es leider nicht mehr in Original. Die Fälschungen 
sind von unterschiedlicher Qualität und Funktionsumfang.

Original ist der "Atmel ICE" noch zu haben, mit dem kann man auch 
debuggen. Bei dem stören mich allerdings die exotisch kleinen 
Anschlüsse, für die ich kein Werkzeug habe.

Ansonsten sind die Programmieradapter von Diamex nicht schlecht, aber 
der Support von der Firma ist unter aller Sau.

von Andre K. (andre1980)


Lesenswert?

Stefan ⛄ F. schrieb:
> Andre K. schrieb:
>> Wie groß dürfen denn eigentlich die Widerstände sein in den MOSI, MISO
>> und SCK Leitungen? Zu große Widerstände beeinflussen ja die Flanken.
>
> Genau. Das hängt sehr stark von der Frequenz ab. Der USBASP funktioniert
> mit 180 Ω noch, wenn sonst nichts weiter an den Leitungen hängt.

OK, so hoch müsste der Widerstand in den Leitungen nicht sein, wenn ich 
den Artikel über ZenerDioden richtig verstanden habe.
https://www.electronics-tutorials.ws/de/dioden/zenerdiode.html

Wenn ich den den Bus auf 3V senke mit 0,25W Zener Dioden. Dann darf der 
maximale Strom durch die Zener Diode 0,25W/3V = 0,083A sein.

Die Mindestgröße des Vorwiderstandes in der Busleitung sollte also 
2V/0,083A = 24,09Ω sein.

Damit bin ich ja relativ weit entfernt von 180Ω.

Natürlich muss ich den Widerstand so groß wählen, das ich den Pin vom 
Arduino Nano nicht überlaste. Also mindestens 2V/0,04A = 50Ω. Lieber 
etwas Höher, obwohl ja eigentlich nur kurzzeitig belastet wird.

Und wenn ich den SPI Bus richtig verstehe, brauche ich die Zenerdiode 
nur in der MOSI (MasterOutSlaveIn) und SCK (Takt) Leitung. Da nur dort 
Pegel von dem Arduino kommen. Der MISO (MasterInSlaveOut) Pegel wird ja 
nur von dem ATTiny erzeugt, der unter 3V (oder 3,3V) läuft.
Reset wird ja nur gegen Ground gezogen, wenn ich das richtig verstanden 
habe. Aber ResetPin ist ja auch Spannungstolleranter, wenn ich das 
Datenblatt richtig interpretiere.

Habe ich das soweit richtig interpretiert?

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

180Ω hätte den Vorteil, kurzschlussfest zu sein. Deswegen hatte ich das 
mal (in allen 4 Signal-Leitungen) ausprobiert.

5V / 180Ω = 27mA

> Habe ich das soweit richtig interpretiert?

Ich denke: ja

von Andre K. (andre1980)


Lesenswert?

Der von dir gezeigte USBASP wurde auch in einigen Tutorials geändert. 
Sie haben die Versorgung des Atmega8L an den 3,3V Spannungsregler 
geschlossen. Dadurch sind die Pegel des Atmega8L auch 3,3V. Mit Skalpel 
wurden zwei Leiterbahnen durchtrennt und zwei neue Verbindungen mit 
Kupferlackdraht gezogen.

Zwar soll der Atmega8L bei 3,3V und 12.000Mhz außerhalb der 
Spezifikation laufen, aber soll funktionieren.

https://www.hackster.io/billy-cheung/3-3v-usbasp-modification-c20557

Ich habe mir neben den Zener-Dioden den USBASP mitbestellt, da es ihn im 
gleichen Shop gab.

Danke für die vielen und hilfreichen Antworten.

von Andre K. (andre1980)


Lesenswert?

Andre K. schrieb:
> Der von dir gezeigte USBASP wurde auch in einigen Tutorials geändert.
> Sie haben die Versorgung des Atmega8L an den 3,3V Spannungsregler
> geschlossen. Dadurch sind die Pegel des Atmega8L auch 3,3V. Mit Skalpel
> wurden zwei Leiterbahnen durchtrennt und zwei neue Verbindungen mit
> Kupferlackdraht gezogen.
>
> Zwar soll der Atmega8L bei 3,3V und 12.000Mhz außerhalb der
> Spezifikation laufen, aber soll funktionieren.
>
> https://www.hackster.io/billy-cheung/3-3v-usbasp-modification-c20557
>
> Ich habe mir neben den Zener-Dioden den USBASP mitbestellt, da es ihn im
> gleichen Shop gab.
>
> Danke für die vielen und hilfreichen Antworten.

Ich habe den USBASP wie in dem Tutorial gezeigt umgebaut. Es 
funktioniert einwandfrei :D
Der Atmega8L wird nur mit 3,3V versorgt und gibt damit auch auf den 
Bussignalen auch nur 3,3V aus. Und der Attiny85 lässt sich ohne Probleme 
flashen.

von Wolfgang (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
>> Der Arduino Nano hat aber 5V Pegel an den I/O Pins.
>
> Wegen der Diode in der 5V Leitung ist es etas weniger, aber trotzdem zu
> viel.

An den I²C-Leitungen hat der Pegel nichts mit dem H-Pegel der I/Os zu 
tun.

von Stefan F. (Gast)


Lesenswert?

Wolfgang schrieb:
> An den I²C-Leitungen hat der Pegel nichts mit dem H-Pegel der I/Os zu
> tun.

Das gilt nur für I²C. Ich dachte dabei an die ISP Schnittstelle.

von Andre (Gast)


Lesenswert?

Ja es ging um das mischen von I2C und ISP. Da der verwendete Attiny85 
wenige Pins hat, werden die Pins zum Flaschen und die Pins für I2C 
gemeinsam genutzt. Der ADXL345 verträgt aber maximal 3,6V an seinen 
Pins. Und wenn die MoSi oder MiSo Leitungen 5V haben, liegen am ADXL345 
dann auch 5V an. Also war mein Ziel die ISP Leitungen auf Max. 3,6V zu 
begrenzen. Und das hat mit dem Umbau des USBASP hervorragend geklappt.

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.