Forum: Mikrocontroller und Digitale Elektronik Abschalten der Beschaltung des Controllers bei Programmierung


von Florian D. (Firma: HTL) (flowdrucka64)


Lesenswert?

Hallo Forum !
Ich habe folgende Problemstellung :
Ich habe einen Arduino Mega dazu verwendet, einen LED-Cube zu 
Multiplexen. Jetzt bin ich allerdings an das Problem geraten, dass beim 
Einspielen neuer Software natürlich der Multiplex-Vorgang gestoppt wird 
und wenn der Zeitpunkt des Einspielen unglücklich gewählt ist, bleiben 
alle Transistoren eingeschaltet, was zur Folge hat, dass bis der 
Einspielvorgang beendet ist, ein viel zu hoher Strom in die Schaltung 
fließt (da die Vorwiderstände auf eine Pulsung mit 10% ausgelegt und 
daher viel zu klein für eine dauerhaft anliegende Spannung sind).

Daher meine Frage : gibt es einen Pin am Arduino Mega, der NUR während 
des Programmiervorganges sein Potenzial ändert ? (ob von 5V auf 0V oder 
anders herum wäre (fast) egal).

Hoffe ihr könnt mir weiterhelfen !
LG Florian

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Ich rate mal, Deine Schaltung benutzt 74HC595. Da kann man einfach den 
/OE auf nen IO-Pin legen und noch nen Pullup dran.
Im Programmiermodus sind alle IOs hochohmig und damit auch die Ausgänge 
der 74HC595.

Die Frage ist natürlich, ob der Arduino Bootloader auch die IOs 
abschaltet oder einen echten (Watchdog-)Reset auslöst. Das solltest Du 
aber leicht testen können.

von Alexander J. (Gast)


Lesenswert?

Florian D. schrieb:
> und wenn der Zeitpunkt des Einspielen unglücklich gewählt ist, bleiben
> alle Transistoren eingeschaltet, was zur Folge hat, dass bis der
> Einspielvorgang beendet ist, ein viel zu hoher Strom in die Schaltung
> fließt

Ich habe da in einer LED Matrix damals so gelöst, dass ich einfach einen 
Jumper an die Stromversorgung der Matrix gesetzt habe.
Da das Programmieren ja nicht per Zufall erfolgt, sondern ich ja weiß, 
wenn ich starte, habe ich die ganze Matrix stromlos gemacht.

von Pandur S. (jetztnicht)


Lesenswert?

Ja, die Beschaltung des AVR muss natuerlich so sein, dass im 
Programmiermodus, bedeutet Alle normalen Ports tristate, in
einem sicheren, Zustand sind.
Das bedeutet, du hast entweder externe pulldown, oder externe pullup 
Widerstaende an den relevanten Ports.

Falls du die Programmierpins, die ISP, meist MOSI & MISO, fuer das 
Projekt verbraucht hast, musst du die entkoppeln, und dem du sie zB mit 
einem 74LV126 oder so umschaltest. Das macht man mit dem Reset, der im 
Programmiermodus=low ist. Also, der Umschalter muss bei Reset=high auf 
die Applikation geschaltet sein, bei Reset=low auf den ISP Anschluss.

Der Reset hat sowieso einen 10k Pullup und einen 100nF nach GND.

: Bearbeitet durch User
von Florian D. (Firma: HTL) (flowdrucka64)


Lesenswert?

Sapperlot W. schrieb:
> Ja, die Beschaltung des AVR muss natuerlich so sein, dass im
> Programmiermodus, bedeutet Alle normalen Ports tristate, in
> einem sicheren, Zustand sind.
> Das bedeutet, du hast entweder externe pulldown, oder externe pullup
> Widerstaende an den relevanten Ports.
>
> Falls du die Programmierpins, die ISP, meist MOSI & MISO, fuer das
> Projekt verbraucht hast, musst du die entkoppeln, und dem du sie zB mit
> einem 74LV126 oder so umschaltest. Das macht man mit dem Reset, der im
> Programmiermodus=low ist. Also, der Umschalter muss bei Reset=high auf
> die Applikation geschaltet sein, bei Reset=low auf den ISP Anschluss.
>
> Der Reset hat sowieso einen 10k Pullup und einen 100nF nach GND.

Danke schonmal für deine schnelle Antwort!
Das Potenzial an dem Reset Pin ändert sich währen des Programmierens 
nicht! Das habe ich gerade nachgemessen.
MOSI und MISO sind bei mir frei.

Abschalten würde ich gerne ein L293D ( der hat ja einen Enable Pin) mit 
dem ich die MOSFets schalte.

: Bearbeitet durch User
von Pandur S. (jetztnicht)


Lesenswert?

Eigentlich wuerde ein pulldown von 2.2k genuegen um Fets anzusteuern.

: Bearbeitet durch User
von Florian D. (Firma: HTL) (flowdrucka64)


Lesenswert?

Im Nachhinein betrachtet schon allerdings sind die L293D schon verbaut..

von Pandur S. (jetztnicht)


Lesenswert?

pulldowns an die ports, .. oder die "en" des L293D an den Reset

von Florian D. (Firma: HTL) (flowdrucka64)


Lesenswert?

alles klar wird gemacht !
Vielen Dank für die schnelle und kompetente Antwort !

von Einer K. (Gast)


Lesenswert?

Peter D. schrieb:
> Die Frage ist natürlich, ob der Arduino Bootloader auch die IOs
> abschaltet oder einen echten (Watchdog-)Reset auslöst. Das solltest Du
> aber leicht testen können.

Der Arduino Bootloader kommt nach einem Reset an die Reihe.
Der muss also nix abschalten. Ist alles Hochohmig.
Ok, der Bootloader zappelt mit der LED, und nutzt die Serielle.
Das gilt es zu beachten.

An dem WDT fummelt der Bootloader nur rum, wenn der WDT vor dem Reset 
aktiv war.
Muss er.
Sonst schlägt der WDT zu, bevor der Bootloader fertig ist.

von Horst (Gast)


Lesenswert?

Sapperlot W. schrieb:
> Der Reset hat sowieso einen 10k Pullup und einen 100nF nach GND.

Aus welchem Datenblatt stammt eigendlich die Idee, !Reset müsse einen 
Kondensator bekommen?

von Georg (Gast)


Lesenswert?

Alexander J. schrieb:
> Da das Programmieren ja nicht per Zufall erfolgt, sondern ich ja weiß,
> wenn ich starte, habe ich die ganze Matrix stromlos gemacht.

Das löst das Problem beim Programmieren, aber nicht grundsätzlich. Wenn 
so hohe Ströme fliessen, dass etwas zerstört werden kann, sollte man die 
Anzeigenschaltung auch gegen sonstige Software-Hänger usw. absichern. 
Ich nehme dazu einen dynamisch angesteuerten Transistor, der von einer 
der Multiplexleitungen eingeschaltet wird, oder die Watchdog-Funktion 
eines Überwachungsbausteins (MAXxxx). Bleibt das Multiplexen stehen, 
egal warum, wird abgeschaltet.

Georg

von Florian D. (Firma: HTL) (flowdrucka64)


Lesenswert?

Könntest du auf die Variante mit dem dynamisch angesteuerten Transistor 
ein bisschen genauer eingehen ?
Wie genau sollte der denn angesteuert werden ?

: Bearbeitet durch User
von Alexander J. (Gast)


Lesenswert?

Georg schrieb:
> Wenn so hohe Ströme fliessen, dass etwas zerstört werden kann, sollte man
> die Anzeigenschaltung auch gegen sonstige Software-Hänger usw. absichern.

Jetzt wo du es beschreibst, komme ich ins grübeln.
Allerdings habe ich meine Schaltung damals so dimmensioniert, dass 
selbst wenn alle LED auf einmal leuchten sollten, nichts beschädigt 
wird.

Das habe ich einfach mit eine kleinen Programm getestet, dass alle LED 
einschaltet und dann an lässt. Den Zustand habe ich dann 24h stehen 
lassen und die 595 und die Transistoren im Auge behalten.

Florian D. schrieb:
> Könntest du auf die Variante mit dem dynamisch angesteuerten Transistor
> ein bisschen genauer eingehen ?

Interessiert mich auch. Danke.

von Florian D. (Firma: HTL) (flowdrucka64)


Lesenswert?

das Problem liegt nicht darin alle LEDs gleichzeitig leuchten zu lassen. 
Da die (bei mir 10) Ebenen ja gemultiplext werden, ist jede Ebene nur 
10% der Zeit aktiv. Wenn der Controller aber aufhört zu multiplexen, 
sind alle 10 Ebenen für 100% der Zeit aktiv was dann den 10fachen Strom 
für die LEDs bedeutet, wenn ich also die Vorwiderstände nicht um das 
10-fache zu groß mache, sterben die alle innerhalb von wenigen Minuten!!

von Georg (Gast)


Angehängte Dateien:

Lesenswert?

Florian D. schrieb:
> Könntest du auf die Variante mit dem dynamisch angesteuerten Transistor
> ein bisschen genauer eingehen ?

Ist schon so alt, dass es kein CAD-File gibt, sorry. Aus einem 
Medizincomputer, hat immer einwandfrei funktioniert bei 6 x 8 
7Segment-Anzeigen.

Georg

von Georg (Gast)


Lesenswert?

Hallo,

zur Ergänzung: derzeit verwende ich diese Schaltung nicht, weil heutige 
Anzeigen mit wenig Strom auskommen. Eine 7Segment-Anzeige, die mit 2 mA 
betrieben wird und mit 8fach Multiplexing, bekommt im Fehlerfall 16 mA 
ab, das hält sie aus ohne kaputtzugehen. Das ist die einfachste Lösung, 
auch wenn es nicht schön aussieht. Aber Fehler sind allgemein nicht 
schön.

Georg

von Manfred (Gast)


Lesenswert?

Horst schrieb:
> Aus welchem Datenblatt stammt eigendlich die Idee, !Reset müsse einen
> Kondensator bekommen?

eigendlich = eigentlich ?

Wie Du den Reset bedienst, ist Dir überlassen, aber für den 
Programmiervorgang muß wohl frei sein, da bietet sich der Kondensator 
an.

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.