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
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
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.
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
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
>Hardwaremäßig, hab ich die Treibertransistoren mit Pulldowns versehen, >damit nichts ungewollte aussteuert. Ich würd die Invertieren. Zumindest die ROW-Transistoren Gruss Chris
>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.
>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
>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
Was ist jetzt mit Row, bei einer 7-Segmentanzeige gemeint? MFG
@ 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
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
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
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.
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.
@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
@ 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
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
@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
Ja, bevor die Monoflop-Zeit abgelaufen ist, wird neu gestartet.
@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
>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
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
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 :-)
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.
>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.
@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
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.
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
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
>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.
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...
>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=...
+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
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.