Forum: Mikrocontroller und Digitale Elektronik 7 Segment Multiplex, Sicherheit, watchdog??


von Fralla (Gast)


Lesenswert?

Ich steuere mit einem AVR 8 Stück 7-Segmentanzeigen im Multiplexbetrieb. 
In einem frücheren Projekt wurde eine 7-Segmentanzeige durch einen 
Fehler in der Software zerstört (multiplex hat ausgesetzt). Ein anderes 
mal hat das multplixen nach mehreren tagen ausgesetzt, weiß nicht warum. 
War nicht weiter schlimm->Anzeige getauscht. Jetzt verwende ich aber 
teure, große 7-Segment und ich möchte sie nicht durch solche Fehler 
zerstören.

Hardwaremäßig, hab ich die Treibertransistoren mit Pulldowns versehen, 
damit nichts ungewollte aussteuert.

Jetzt würde ich gerne wissen, welche Software Maßnahmen ich setzten kann 
um diese zu verhindern. Watchdog verwednen??, oder gibts andere Tricks?.

MFG

von Helmut L. (helmi1)


Lesenswert?

Die wirklich sicher Loesung ist das Hardwaremaessig zu machen.
Mit einem deiner Leitungen die die Stellen ansteuert triggerst du ein 
retiggerbares Monoflop und wenn das durch einen Fehler nicht mehr 
getriggert wird schaltest du Hardwaremaessig die Treiber ab.

Gruss Helmi

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Der Watchdog ist - richtig konfiguriert - auch sicher (genug). In der 
Init zählt man die per Watchdog aufgelaufenen RESET-Vorgänge per 
RESET-Flags, bei mehrfachem Auslösen schaltet man die Anzeige ab und 
legt den Controller schlafen. Nur in der zyklisch laufenden Ausgabe darf 
dann das "wdr" ausgeführt werden. Die Dauer des Watchdogtimers sollte so 
gering wie möglich eingestellt werden.

von Falk B. (falk)


Lesenswert?


von Peter D. (peda)


Lesenswert?

Travel Rec. wrote:
> Der Watchdog ist - richtig konfiguriert - auch sicher (genug).

Und genau das wird in der Entwicklungsphase nicht zutreffen!

Entweder er wird deaktiviert oder an der falschen Stelle getriggert.

Du wirst ja eh irgendwelche Treiberschaltungen verwenden, da wird für 
einen zusätzlichen 74HC123 bestimmt genügend Platz sein. Der muß nicht 
programmiert werden und funktioniert immer.


Peter

von Fralla (Gast)


Lesenswert?

Also in der Entwicklungsphase werde ich Segment-Vorwiderstände auswählen 
die keinen Schaden anrichten.

Grundsätzlich werde die HW-Lösung mit dem Monoflop verwednen. Und da der 
AVR einen Watchdog hat werde ich diesen zusätzlich verwenden. Kann das 
irgwendwelche nachteile mit sich bringen.

Wie ich die Treiber Hardwäremäßig abschalte, ist mir klar.
Aber mit welchem Signal soll das Monoflop getriggert werden? Brauch ich 
dann eine eigene Leitung vom µC zum retriggern? Oder geht das mit den 
enable Signalen für die Leistungstreiber?

Es gibt den HCT4538 und HCT123, welcher wäre zu empfehlen?
MFG

von Chris D. (m8nix)


Lesenswert?

>Hardwaremäßig, hab ich die Treibertransistoren mit Pulldowns versehen,
>damit nichts ungewollte aussteuert.

Ich würd die Invertieren. Zumindest die ROW-Transistoren

Gruss Chris

von Helmut L. (helmi1)


Lesenswert?

>Aber mit welchem Signal soll das Monoflop getriggert werden? Brauch ich
>dann eine eigene Leitung vom µC zum retriggern?

Nein


>Oder geht das mit den
>enable Signalen für die Leistungstreiber?

Ja

>Es gibt den HCT4538 und HCT123, welcher wäre zu empfehlen?

Für diesen Zweck gehen beide.

von Chris D. (m8nix)


Lesenswert?

>Brauch ich dann eine eigene Leitung vom µC zum retriggern? Oder geht das >mit den 
enable Signalen für die Leistungstreiber?

Hier würd ich jeweils eine Diode von jeder Row-Line zum Triggereingang 
des HCT123 legen. Den Triggereingang dann mit einem Pullup/down (je nach 
Logik) beaufschlagen.

Gruss Chris

von Fralla (Gast)


Lesenswert?

>Ich würd die Invertieren. Zumindest die ROW-Transistoren

Wie ist das denn gemeint?

Hier würd ich jeweils eine Diode von jeder Row-Line zum Triggereingang
des HCT123 legen. Den Triggereingang dann mit einem Pullup/down (je nach
Logik) beaufschlagen.

Row-Line? Wie ist das gemeint, ich verwende 7 Segment anzeigen. Es 
handelt sich um Common-Anode Typen. Die Anoden werden von pnp 
Transistoren durchgeschaltet, für die Segmente, verwende ich einen 
ULN2803(npn).
Was wird jetzt über dioden mit dem Monoflop verbunden?

MFG

von Fralla (Gast)


Lesenswert?

Was ist jetzt mit Row, bei einer 7-Segmentanzeige gemeint?

MFG

von Falk B. (falk)


Lesenswert?

@ Fralla (Gast)

>Was ist jetzt mit Row, bei einer 7-Segmentanzeige gemeint?

Das sind eine Common Anoden. Durch die Dioden + Pull-Widerstand erreicht 
man eine ODER-Verknüpfung. Wenn nicht alle paar ms die Anode 
weitergeschaltet wird schlägt des Monoflop zu und schaltet ab.

MFg
Falk

von Chris D. (m8nix)


Angehängte Dateien:

Lesenswert?

Sorry, das row und column ist mir von den Matrix-Displays 
hängengeblieben.
Mit Row-Line meine ich Ports die dir die gemeinsamen Anoden der 
Segmentanzeigen schalten.

Wenn du PNP-Transistoren zum schalten der gemeinsamen Anoden verwendest, 
würd ich dort die Pulldown-Widerstände am Prot weglassen, da beim Reset 
sonst alle Transistoren kurz durchsteuern.

Das Monoflop wird in jeder Umschaltpause der Segmente zurückgesetzt. 
Werden durch einen Fehler ein oder mehrere Segmentanzeigen dauerhaft 
angesteuert wird der Ausgang Q Low.

Gruss Chris

von holm (Gast)


Lesenswert?

Eine clevere Variante ist, in die Basisleitungen der Treibertransistoren 
für die Anoden einfach Elkos einzubauen, die werden dann nur 
aufgesteuert
Wechselspannung anliegt, d.h. der Multiplexbetreib läuft.

War mal so im LLC1 gelöst glaube ich...

Gruß,

Holm

von Vorname N. (logout-name)


Lesenswert?

Das ist die Low-cost Lösung. Wenn man die Anzeigen aber am Limit 
betreibt, dann wird diese Methode dazu führen, dass wenn nicht weiter 
geschaltet wird, der Strom doch ausserhalb der Spezifikation liegt, oder 
aber, wenn der C kleiner gewählt wird, der Transistor nicht in der 
ganzen (Leit-)Phase voll durchschaltet. Wenn man HW-mässig so einen 
Schutz einbaut, dann bitte richtig. Da ist die Monofloplösung das 
"schönste" Mittel.

von Joachim R. (bastelbaer)


Lesenswert?

Hallo, hast du schon mal überlegt einen max7721 einzusetzen. Der ist 
genau für den Zweck entwickelt worden, ist über SPI zu programmieren und 
hat die ganze Schutzgeschichte in Hardware gegossen.

Kostet zwar ein paar Euros (7,55 bei Reichelt), erspart aber Code und 
Stress.

Eine Helligkeitsregelung ist auch schon integriert und über Software 
steuerbar. Und wenns sein muss kannst du auch jedes Segment einzeln 
anteuern.

Ich habe ebenfalls schon mal eine "Grossbild"-Siebensegmentanzeige und 
eine 8x8-LED-Matrix damit gebastelt und war sehr zufrieden damit.

von Matthias L. (Gast)


Lesenswert?

>einen max7721 einzusetzen

Meinst du den MAX7219?

Den 7721 kann ich nicht finden...

von Fralla (Gast)


Lesenswert?

@Chris: Danke für die Schaltung, die du gepostet hast, dass hilft mir 
viel weiter. Ich habe Pullups, nicht Pulldowns.

Nur jetzt ist mir nicht mehr klar wie ich vom HCT123 aus abschalte. wie 
gesagt, an den Kathoden arbeitet ein ULN2803(npn) und an den Anoden ein 
pnp-Transistor (BC636).

MFG

von Falk B. (falk)


Lesenswert?

@ Fralla (Gast)

>Nur jetzt ist mir nicht mehr klar wie ich vom HCT123 aus abschalte.

Du brauchst einen Hauptschalter, einen grossen MOSFET in GND oder VCC, 
der alles abschalten kann. der wird vom 123er gesteuert. Ich würde hier 
der Einfachheit einen Logic Level N-Kanal MOSFET empfehlen, der GND 
schaltet.


Mosfet-Übersicht

MFg
Falk

von Helmut L. (helmi1)


Lesenswert?

Wenn du die BC636 nicht direkt von deinem Prozessor treibst sondern über 
einen 3 zu 8 Decoder (74hc138) steuerst so kannst du mit dem Enable 
Eingang das Display abschalten und du kannst auch noch Prozessorpins 
sparen

Gruss Helmi

von Helmut L. (helmi1)


Angehängte Dateien:

Lesenswert?

Hier der Schaltplan

von Fralla (Gast)


Lesenswert?

@Helmut: Danke für deine Schaltung.
Und ja, ich verwende bereits einen 3 zu 8 decoder, hab einen HC238 
eingesetzt, der hat die Ausgänge nicht invertiert. Dieser treibt NPN 
Transistoren (zwecks invertierung, aber auch Stromverstärkung) und diese 
die BC636(PNP). Das hab ich bereits versucht und funktioniert.

Jedoch hab ich ganz auf die enable eingänge des HC238 vergessen.

Also ich verbinde die Ausgänge des HC238 über dioden+pullup mit dem 
Monoflop. Und den Ausgang des Monoflop mit dem enable des HC238. Hört 
das Multiplexen auf, schaltet das Monoflop, sozusagen den decoder aus, 
und kein Transistor wird durchgesteuert.
Hab ich das so richtig verstanden?

MFG

von Wolf (Gast)


Lesenswert?

Ja, bevor die Monoflop-Zeit abgelaufen ist, wird neu gestartet.

von Chris D. (m8nix)


Lesenswert?

@helmi1
Jetzt wo ich's seh helmi.... würd ich's genau soooo machen ;-)
Ich schwöar :D
Ein super Forum ist das hier - Egal welche Ideen man hat, es gibt immer 
einen der löst das Problem noch eleganter und rationeller. Find ich 
klasse.

PS: Aber an den weissen Hintergrund im Eagle Schaltplaneditor werd ich 
mich wohl nie gewöhnen :D

Gruss Chriss

von Chris D. (m8nix)


Lesenswert?

>Also ich verbinde die Ausgänge des HC238 über dioden+pullup mit dem
>Monoflop. Und den Ausgang des Monoflop mit dem enable des HC238. Hört
>das Multiplexen auf, schaltet das Monoflop, sozusagen den decoder aus,
>und kein Transistor wird durchgesteuert.
>Hab ich das so richtig verstanden?

Jup
Kannst du so machen. Ich denke helmi's Vorschlag geht davon aus, das 
wenn sich der Logikpegel am Eingang A0 des Decoders ändert, man davon 
ausgehen kann das der Multiplexer "läuft". Wenn du aber ganz auf Nummer 
sicher gehen willst (Der Decoder könnte ja auch seinen Geist aufgeben) 
machs über Dioden nach dem Decoder. Einfacher ist auf alle Fälle helmis 
Vorschlag :-)

Gruss Chriss

von Chris D. (m8nix)


Lesenswert?

Nachtrag: (Decoderdiodenschutz)
Da dein Decoder aber nicht invertiert müsstest du die Dioden nach dem 
HC238 dann "umdrehen", den Pullup in einen Pulldown verwandeln, das 
ganze anstatt an den Eingangs "B" auf Eingang "A" des Monoflops legen 
und den freien Eingang "B" danach auf Vcc legen... hoffe das stimmt? ... 
schon bissi spät ;-)

Gruss Chris

von Chris D. (m8nix)


Lesenswert?

Oh Oh....
ich hab Mist verzapft.... Wenn dann kannst du nur vor dem Decoder die 
Signale abgreifen... Sonst würde er sich ja selbst abschalten - 
vermutlich niemals anschalten. Da aber durch die drei Leitungen (2^3) 
bereits alle 8 Segmente angesteuert werden gibt es auch keine Pause 
zwischen einem "Segmentwechsel" wesshalb die Diodenmethode hier auch 
nicht funktionieren kann.... Ergo ist helmis Schaltung hierzu die einzig 
wahre.

Gute Nacht :-)

von Helmut L. (helmi1)


Lesenswert?

Schoen das ihr die halbe Nacht ueber meinen Vorschlag dikutiert habt.
Wie schon richtig erkannt wurde kann man den HC123 nicht von den 
Dekoderausgaengen triggern lassen.
1. kaemme die Sache nicht in Schwung es sei denn man triggert den HC123 
uebe seinen anderen Eingang ein erstes mal.
2. Da so gesehen keine Umschaltpause exestiert wuerden wenn man die 
Dekoderausgaenge zusammenfast keine Triggerimpulse entstehen

Ich triggere den HC123 ueber die niederwertigste Leitung. Diese Leitung 
wird bei jedem 2. Element gepulst. Die MF-Zeit muss also ein bisschen 
laenger als diese Zeit sein. Beim ausfall dieser Impulse wird das 
betreffende Element also bei richtiger Dimensionierung des MF etwas mehr 
als die doppelte Zeit einmalig bestromt. Das duerfte es im allgemeinen 
aushalten.

@Chris D. (m8nix)

Wenn ich daran denke werde ich es fuer dich demnaechst schwarz machen.

von Gast (Gast)


Lesenswert?

>In einem früheren Projekt wurde eine 7-Segmentanzeige durch einen
>Fehler in der Software zerstört (multiplex hat ausgesetzt). Ein anderes
>mal hat das Multiplexen nach mehreren Tagen ausgesetzt, weiß nicht warum.

Bringe Deine Software in Ordnung, dann brauchst Du keine speziellen 
Klimmzüge zu machen. Selber jahrelang Multiplexer gewesen und nie 
stehengeblieben :-)
Da auch Monoflops ein Eigenleben entwickeln können, setzte ich sie seit 
Jahrzehnten nicht mehr ein. Wenn die Hardware angepaßt werden sollte, 
dann würde ich hochohmige Basiswiderstände verwenden und zu diesen 
parallel Kondensatoren schalten (ggf. +Diode+Reihenwiderstand), die für 
einige Millisekunden einen höheren Basisstrom liefern und die 
Treibertransistoren voll durchsteuern. Bleibt das Multiplexen aus, fießt 
nur noch ein geringer Strom durch die LEDs.

von Joachim R. (bastelbaer)


Lesenswert?

@lippy
Der 7219 und der 7221 sind fast gleich. Der Unterschied ist der, dass 
der 7221 SPI, QSPI, MICROWIRE Serial Interface hat, der 7219 nur ein 
serielles. Und die Bestellnummer bei Reichelt ist die MAX 7221 CNG

von loetkolben (Gast)


Lesenswert?

Oder nimm einfach in der Erprobungsphase höhere Vorwiderstände für die 
LEDs, dann kann bei einem Stehenbleiben des Multiplexers nichts 
durchschmoren.

Zusätzlich würde ich für Verwendung des Watchdog plädieren, der wie 
schon vorgeschlagen. Wenn man vorher sich mit ein paar einfachen 
Projekten mit dem Watchdog aus Softwareseite vertraut macht, sollte der 
in den Griff zu kriegen sein.

von Josef (Gast)


Lesenswert?

Würde die Lösung mit dem MAX7219 bevorzugen. Haben damit schon gute 
Erfolge
erzielt. Die Vorteile liegen klar auf der Hand: Keine Vorwiderstände, 
keine Transistoren, kein Abstürzen, gute Helligkeit (einstellbar), 
weniger Software- Aufwand, Kaskadierbarkeit, gute Störfestigkeit.

Der höhere Anschaffungspreis macht sich schnell bezahlt, wenn man die 
Kosten
für Vorwiderstände, Transiststoren, gr.Layout, Bestückungszeit, mehr 
Software
und schlussendlich unzufriedene Kunden (zB. mangelnde Helligkeit ab 5 
Stellen im MC-Mux-Betrieb - Re-Design notwendig ) abzieht.



Schöne Grüße Josef

von Fralla (Gast)


Lesenswert?

Also ich werd den HC123 mit der niederwertigsten Stelle des HC238 
verbinden, wie in der Schaltung von Helmut. Dass das Segment einmalig 
doppelt solange bestrom wird, kann es verkraften, ganz am limit wird es 
ohnehin nicht betrieben.

Die Lösung mit dem MAX7219 werd ich mir für andere Projekte ansehen.

Jetzt hab ich eine weitere Frage (möchte kein extra topic eröffen). Es 
geht ums dimmen. Einzele LEDs,(RGB) hab ich schon mit tabelle gedimmt 
(mit Hardware PWM).

Wie dimme ich bei meiner jetztigen Hardware-Konfiguration die LEDs am 
besten?
Ich hab mir folgendes überlegt.
Mit dem Overflow Interupt werden die Anoden weitergeschaltet. Un mit dem 
Compare Interupt wird die Aktuelle Anode vorzeitig abgeschaltet. Gibts 
bessere vorschläge? (ohne MAX7219)

MFG

von Matthias L. (Gast)


Lesenswert?

>Gibts bessere vorschläge? (ohne MAX7219)

Über die Enable-Leitung des 74xx138. (Pin6)
Den einfach mit einem Hardware-PWM Ausgang (OCR) verbinden und mit hoher 
Frequenz laufen lassen
PS: Ich würde allerdings zur Kollektorschaltung raten.

von Marko (Gast)


Lesenswert?

Ja, daran hab ich auch schon gedacht, jedoch brauch ich dann wieder 
einen Pin mehr.
Was hat die von mir genannte Lösung für einen Nachteil? Kann nählich nur 
schwer einen Pin entbehren...

von Matthias L. (Gast)


Lesenswert?

>Mit dem Overflow Interupt werden die Anoden weitergeschaltet. Un mit dem
>Compare Interupt wird die Aktuelle Anode vorzeitig abgeschaltet.

Rechne doch mal paar Zeiten aus.
Und dann schätze mal ab, was das für Softwareaufwand (und Spaghetticode) 
nach sicht ziehen könnte...

Und dann vergleiche das mal mit einem Pin und OCRx=...

von Helmut L. (helmi1)


Lesenswert?

+5V
              |
             R1        +--------
Eingang       |        |       |
------C1------+--------+ B    Q+---- zum 138
   |                   |       |
   |                   |       |
   +--C2------+--------+ A     |
              |        |       |
              R2       +--------
              |         74HC123
             GND

Du kannst das Monoflop das dir das Display Schuetzt auch nich fuer die 
Helligkeit einzustellen brauchen.

R1,C1,R2,C2 bilden impulse die das MF bei der negativen und der 
positiven Flanke triggern. Da der Eingang ja bei jedem Display wechseln 
ihren Pegel wechselt wird das MF jedesmal getriggert. Die Zeit des 
Monoflops bestimmt nun die Helligkeit. Du must die Zeit nur ueber ein 
Poti einstellbar machen.

So hast du 2 Probleme mit einem MF geloest. Hardware watchdog fuers 
Display und Helligkeits einstellung.

Gruss Helmi

von Joachim R. (bastelbaer)


Lesenswert?

Fralla wrote:
> Gibts bessere vorschläge? (ohne MAX7219)
MAX7221 :-)

von Marko (Gast)


Lesenswert?

> Gibts bessere vorschläge? (ohne MAX7219)
>MAX7221 :-)
und ohne MAX7221 ;-)


>Rechne doch mal paar Zeiten aus.
>Und dann schätze mal ab, was das für Softwareaufwand (und Spaghetticode)
>nach sicht ziehen könnte...

Um die Anoden weiterzuschalten muss ich doch sowieso in eine ISR. In der 
Compare-ISR würden die Pins für die Segmente, (oder Anodenauswahl) 
einfach nur auf null gesetzt werden.  Kannst du mir mal erklären wieso 
der Softwareaufwand dann so hoch wird.

Wenn ja, dann entbehre ich einen Pin und machs mit Hardware PWM und dem 
zeiten enable des monoflops.

Danke für den Vorschlag mit dem Poti, jedoch kann ich das so nicht 
Verwenden. Ich bekomm die Helligkeitswerte via UASRT rein.

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.