Forum: Mikrocontroller und Digitale Elektronik Transistor & Tiefpass für AVR-SPI dimensionieren


von Till (Gast)


Lesenswert?

Hallo!

Ich habe folgendes Problem: mir steht ein Digitalausgang in 3.3V-Logik 
zur Verfügung. Daran liegt ein Taktsignal mit 4-16MHz an (ich gehe mal 
von einem Duty-Cycle von ca. 50% aus). Ich kann dieses Signal an- und 
ausschalten (ausgeschaltet ist es dauerhaft low), aber ich kann es nicht 
dauerhaft auf high schalten.

Mit diesem Signal möchte ich den RESET-Pin eines ATtiny ansteuern, um 
ihn via SPI zu programmieren. Ich habe mir überlegt, einen Transistor zu 
verwenden, der RESET auf low zieht und vor den Transistor ein RC-Glied 
zur Tiefpassfilterung zu setzen (wobei der R dann gleichzeitig der 
Basisvorwiderstand ist).
1
                                     VCC (3,3V)
2
                                      +
3
                                      |
4
                                     .-.
5
                                     | | 4,7K
6
                                     | |
7
                                     '-'
8
                                      |
9
                                ------+-----o ~RESET des ATtiny
10
                               |
11
4-16MHz       ___            |/
12
CLK in   o---|___|----+------|  BC547
13
              10K     |      |>
14
                     ---       |
15
                 15n ---       |
16
                      |        |
17
                     ===      ===
18
                     GND      GND
19
20
(created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de)

Meine Gedanken dazu waren: der Transistor muss etwas unter 1mA 
"treiben". Ausgehend von einer sehr schlechten Stromverstärkung von 100 
will ich also mindestens 10nA Basisstrom haben. Die 4,7K und 10K sind 
sehr willkürlich gewählt und haben wohl sehr viel "Reserve". Zusammen 
mit dem 15nF-Kondensator ergibt sich eine Grenzfrequenz von 1kHz. Damit 
sollte a) die Dämpfung bei 4MHz mehr als ausreichend sein und b) das 
ganze noch schnell genug, um RESET damit schalten zu können (die 
RESET-Pulse sind eh mindestens 20ms lang).

Da ich mehr der Programmierer bin, weiß ich nicht, ob das Schaltung 
grundsätzlich ok und das ganze richtig dimensioniert ist. Kann mir 
jemand da mal bitte einen Tip geben? Danke!

Gruß, Till.

von Till (Gast)


Lesenswert?

Hallo!

Keiner hat Lust, da mal drüberzuschauen? Vielleicht habe ich das zu wirr 
dargestellt. Ich versuch's mal einfacher:

Ich will einen BC547 als Schalter nutzen. Zu schalten sind ca, 0,7mA 
(3,3V / 4700 Ohm). Bei einer angenommenen schlechtesten Verstärkung von 
100 müssen also 7nA über Basis-Emitter-Strecke fliessen (?). Durch den 
Tiefpass bekomme ich bei 3,3V und 50% Tastverhältnis also ca. 1,65V.

Stellen sich die 0,7V an der Basis "von allein" ein? Oder hängt das vom 
Strom zwischen Collector und Emitter ab? Ich habe jetzt einfach mal 
(1,65V-0,7V) / 7nA gerechnet und komme auf ~135.000 Ohm für den 
Basisvorwiderstand.

Irgendwie kommen mir die Werte alle ziemlich klein (Strom) bzw. groß 
(Widerstand) vor. Ist der Gedankengang so richtig?

Gruß, Till.

von Bensch (Gast)


Lesenswert?

Milli, Mikro, Nano,... ein bisschen konfus, gell?

Aber auch die Schaltung selbst geht nicht.

von aha (Gast)


Lesenswert?

Du willst also mit den SPI-Clock die andere CPU im RESET halten und 
gleichzeitig programmieren ?

Du kannst dir das schnell mal simulieren oder nicht ? Ich habe keine 
Antwort parat, aber das mit dem Tiefpass ist ganz schön daneben ;-)

von holger (Gast)


Lesenswert?

>Keiner hat Lust, da mal drüberzuschauen? Vielleicht habe ich das zu wirr
>dargestellt. Ich versuch's mal einfacher:

Was versuchst du da für einen Unsinn?
Wozu willst du mit einem 4-16MHz Signal
über Transistor da am Reset rumfummeln?

von Till (Gast)


Lesenswert?

Hallo!

Mir ist schon klar, dass das nicht der direkte Weg ist. Kurz gesagt: ich 
habe genau 3 I/O-Leitungen plus dieses Clock-Signal zur Verfügung, und 
will/muss damit SPI-Programmierung machen. An diesen Gegebenheiten ist 
nix zu ändern. Natürlich könnte ich mir mit den 3 freien Leitungen eine 
Art I/O-Erweiterung zimmern, aber ich möchte die Schaltung so simpel wie 
möglich halten.

Um die Reset-Leitung schalten zu können, bin ich auf die Idee gekommen, 
das Clock-Signal hierfür zu "missbrauchen". Und das Hostsystem erlaubt 
mir eben nur, den Takt an- oder abzuschalten, nicht aber, ihn dauerhaft 
auf High-Pegel zu setzen.

Das es überhaupt um AVR-SPI bzw. Reset geht, habe ich nur erwähnt, weil 
die Anforderungen an das Reset-Signal (Steilheit, Spannung etc.) von 
Bedeutung sein könnten.

Ich habe bisher nur Digitalkram gemacht (mal einen Pullup oder Block-C, 
aber sonst nichts), und habe daher keine Ahnung, wie ich das gegebene 
Problem am besten angehen soll.

Gruß, Till.

von Marius W. (mw1987)


Lesenswert?

Wenn du 3 IO-Lines + die Clock-Line zur Verfügung hast, reicht das doch:
-1 x MOSI
-1 x MISO
-1 x SCK
-1 x RESET

Oder sehe ich das falsch?

MfG
Marius

von holger (Gast)


Lesenswert?

>Um die Reset-Leitung schalten zu können, bin ich auf die Idee gekommen,
>das Clock-Signal hierfür zu "missbrauchen". Und das Hostsystem erlaubt
>mir eben nur, den Takt an- oder abzuschalten, nicht aber, ihn dauerhaft
>auf High-Pegel zu setzen.

In Reihe zum Basiswiderstand eine Diode. Statt des bipolar
Transistors einen FET. Parallel zum Kondensator einen
Entladewiderstand. Ob das mit dem Timing für den Reset
Pin dann hinhaut ist aber weiter fraglich.

von Till (Gast)


Lesenswert?

Hallo!

@Marius: Mein "CLK" ist irgendein Taktsignal aus dem System. Den 
SPI-Master mache ich in Software, so dass der SPI-Bus in keiner Weise 
mit CLK synchron ist. Ich kann dieses Signal daher nicht als SCK nehmen.

@holger: Kannst Du dazu mehr schreiben? Warum FET statt Bipolar? Was 
macht die Diode? (Vermutung: Stromfluss in Richtung des Hostsystem 
verhindern, wenn der C entladen wird. Welche Diode nehmen?). Warum einen 
R parallel zum C?

Das Reset-Timing ist relativ unkritisch (wenn ich auf 50ms genau bin, 
reicht das völlig). Laut Atmel-Datenblatt müssen die Pegel aber rel. 
sauber sein: "low" ist max. 0.2Vcc und "high" min. 0.9Vcc.

Wenn es eine simplere (sprich: bauteilärmere) Variante gibt, um das 
Problem zu lösen, bin ich immer daran interssiert. Im Moment wären es ja 
schon 6 Bauteile nur für die Reset-Leitung...

Gruß, Till.

von holger (Gast)


Lesenswert?

>@holger: Kannst Du dazu mehr schreiben? Warum FET statt Bipolar?

Der FET entlädt den Kondensator nicht. Die Basisstrecke
eines bipolar Transistors tut dies weil sie Strom zieht.
Deshalb hauen auch alle Berechnungen zum RC Glied nicht hin.

>Was macht die Diode? (Vermutung: Stromfluss in Richtung des Hostsystem
>verhindern, wenn der C entladen wird.

Da liegst du richtig.

> Welche Diode nehmen?).

Schottky Diode. Z.B. BAT46.

> Warum einen R parallel zum C?

Weil das Gate den Kondensator wie gesagt nicht entlädt.
Oder nur seeehr langsam.

Der Fet muss allerdings mit 3V am Gate schon ausreichend
durchschalten können. Sonst wird das nichts.

von aha (Gast)


Lesenswert?

Benutze einen i2c Busexpander und du bist bei EINEM Bauteil und brauchst 
nur 2 Leitungen. Musst halt I2C => SPI wurschteln, aber das sollte für 
dich kein Problem darstellen.

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

> Im Moment wären es ja schon 6 Bauteile nur für die Reset-Leitung...

Dann mach so einen Blödsinn einfach nicht. Aber wenn du auf den Blödsinn 
bestehst, googel nach "retriggerbares Monoflop" oder gleich nach NE555, 
74HC4538 oder 74HC122.

von Till (Gast)


Lesenswert?

Hallo!

@holger: Danke für Deine Erlärungen! Ich ahne aber labgsam, dass mein 
Lösungsansatz nicht hinhaut. Bei ca. 1,6V hinter dem Tiefpass minus dem, 
was an der Diode abfällt, komme ich nie auf die "3V am Gate". Wäre es 
u.U. sinnvoll, den TP hinter den Transistor zu verlagern?

Fällt jemandem eine andere Möglchkeit ein, aus 0V/4MHz Rechteck mit 
3,3Vpp ein Signal mit 0V/3V DC zu machen?

@aha: I2C wird umständlich, weil die I/O-Leitungen nicht bidirektional 
sind.

Gruß, Till.

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

> Fällt jemandem eine andere Möglchkeit ein, aus 0V/4MHz Rechteck mit
> 3,3Vpp ein Signal mit 0V/3V DC zu machen?

Zu fein meine Antwort zu lesen?

von Till (Gast)


Lesenswert?

Hallo!

@Hannes:
> > Fällt jemandem eine andere Möglchkeit ein, aus 0V/4MHz Rechteck mit
> > 3,3Vpp ein Signal mit 0V/3V DC zu machen?
>
> Zu fein meine Antwort zu lesen?

Natürlich nicht! Wir haben nur quasi gleichzeitig gepostet (Deine 
Nachricht war noch nicht da, als ich angefangen habe, zu schreiben, und 
nach Absenden meines Posts habe ich nicht mehr reingeschaut).

Vielen Dank für Deinen Tip! Monoflops sind wohl das, was ich suchte: 
einfach und bauteilarm zu machen.

Die Wahl des Taktsignals ist im Übrigen kein Spleen: ich habe halt den 
AVR als SPI-Slave in einer fertigen Schlatung sitzen, und es wäre sehr 
praktisch, wenn ich ihn auch gleich dort programmieren könnte. Leider 
ist alles, was ich an schaltbaren Leitungen noch habe, eben diese 
Taktleitung. Die Alternative ist, ~RESET über einen Taster oder Jumper 
jedes Mal "per Hand" zu schalten, wenn ich den AVR flashen will.

Gruß, Till.

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.