Hallo, ich bin im Bereich Mikrocontroller noch relativ neu, komme zu meiner großen Überraschung mittlerweile aber schon ziemlich gut mit dem ganzen Kram zurecht - nicht zuletzt durch das enorme Wissen, das hier auf etlichen Seiten zu finden ist. Momentan bastle ich an einer Schaltung, deren Hauptaufgabe die Ansteuerung von zwei 6-stelligen 7-Segment-Anzeigen ist. Ein Foto meiner beiden Test-Platinen habe ich euch in diesem Posting angehängt. Das Funktionsprinzip sieht im Groben so aus: Port D steuert 2x 6 PNP-Transistoren über 5,1K Ohm zum Selektieren der jeweiligen Stelle während des Multiplexens. Port A+C schalten die jeweiligen Kathoden der beiden 7-Segment-Anzeige. Der Programmablauf sieht so aus, dass in einer Interrupt-Subroutine der aktive Transistor um eine Stelle weiter geschaltet wird und dann Port A die Kathoden für die erste Anzeige und Port C die Kathoden für die zweiten Anzeige schaltet. Soweit eigentlich kein Problem. Zuerst hatte ich die Kathoden direkt über einen 150 Ohm Widerstand an die PINs meines Mega8515 angeschlossen. Dies funktioniert im Prinzip einwandfrei und ohne irgendwelche Probleme. Allerdings leuchten die LEDs so natürlich etwas schwächer. Um dies zu kompensieren wollte ich an Port A und C jeweils einen ULN2803 hägen, der dann über einen dahinter liegenden 51 Ohm Widerstand die Kathoden direkt und ohne Umweg über den AVR an Masse legt. Wenn ich nun eine meiner beiden Anzeigen an entweder den ULN2803 von Port A oder den ULN2803 von Port C anschließe, so funktioniert die Anzeige einwandfrei und leuchtet mit akzeptabler Helligkeit. Sobald ich nun aber die zweite Anzeige an den anderen ULN2803 anschließe, hängt sich mein gesamter AVR innerhalb einer halben Sekunde quasi auf. Die Anzeigen erlischen, es werden keine Interrupts mehr ausgeführt und der AVR reagiert auf keinerlei Inputs mehr bis ich ihn vom Strom trenne. Mein Verdacht ist nun, dass der AVR wegen Überstrom oder ähnlichem die Notbremse zieht und sich abschaltet. Da ich direkt an den Pins des AVR jedoch nur die Basen der 2x6 NPN-Transistoren sowie die beiden ULN2803 angeschlossen habe, dürfte über den AVR nur ein marginaler Strom fließen. Eigentlich auf jeden Fall deutlich weniger, als wenn ich die LEDs direkt am AVR betreibe. Fazit: AVR -> Vorwiderstand -> Kathoden: funktioniert AVR -> ULN2803 -> Vorwiderstand -> Kathoden: funktioniert nur bei Anschluss einer Anzeige. Nach stundenlanger Fehlersuche bin ich nun absolut ratlos und auf eure Hilfe angewiesen. Wenn jemandem hier irgendetwas auffällt, ich bin für jeden Tipp dankbar. Gruß David
So aus der Ferne und ohne Datenblatt des ULN würde ich einfach mal auf probleme mit der Stromversorgung tippern. Entweder zu dünne Leiterbahnen / schwache Versorgung (PC Netzteil als Versorgung? Sollte reichen) Fehlende Sieb-C´s an der CPU Fehlende PufferElko´s direkt vor dem eigentlichen Stromverbraucher (ULN,Transistoren) Anselm
Hallo, erstmal Danke für die schnellen Antworten. Mit Schaltplan/Programm kann ich im Moment gerade auf die Schnelle nicht dienen. Schaltplan müsste ich morgen erst einmal einen in Ruhe skizzieren, den man auch ins Netz stellen kann. Den Programm-Code habe ich zwar hier, das sind alles in allem aber 365 Zeilen in Bascom-Basic. Hier daher mal nur als Auszug die ISR, die für's Multiplexing zuständig ist.
1 | ' IRQ: LED-Multiplex |
2 | Tim0_isr: |
3 | ' Multiplex-Zaehler fuer die einzelnen LED-Stellen erhoehen |
4 | If Multiplex_id < 6 Then |
5 | Incr Multiplex_id |
6 | Else |
7 | Multiplex_id = 1 |
8 | End If |
9 | ' Vorherigen Transistor ausschalten |
10 | Select Case Multiplex_id |
11 | Case 1 : T6 = 1 |
12 | Case 2 : T1 = 1 |
13 | Case 3 : T2 = 1 |
14 | Case 4 : T3 = 1 |
15 | Case 5 : T4 = 1 |
16 | Case 6 : T5 = 1 |
17 | End Select |
18 | ' Aktuelle Stelle der ersten Frequenz anzeigen |
19 | Multiplex_temp = Lookup(freq1(multiplex_id) , Segment_data) |
20 | ' Dezimalpunkt an dritter Stelle einblenden |
21 | If Multiplex_id = 3 Then |
22 | Incr Multiplex_temp |
23 | End If |
24 | Led1 = Multiplex_temp |
25 | ' Aktuelle Stelle der zweiten Frequenz anzeigen |
26 | Multiplex_temp = Lookup(freq2(multiplex_id) , Segment_data) |
27 | If Multiplex_id = 3 Then |
28 | Incr Multiplex_temp |
29 | End If |
30 | Led2 = Multiplex_temp |
31 | ' Zustaendigen Transistor anschalten |
32 | Select Case Multiplex_id |
33 | Case 1 : T1 = 0 |
34 | Case 2 : T2 = 0 |
35 | Case 3 : T3 = 0 |
36 | Case 4 : T4 = 0 |
37 | Case 5 : T5 = 0 |
38 | Case 6 : T6 = 0 |
39 | End Select |
40 | Timer0 = T0_startwert |
41 | Return |
42 | |
43 | Segment_data: |
44 | Data &B01111110 |
45 | Data &B00010010 |
46 | Data &B10111100 |
47 | Data &B10110110 |
48 | Data &B11010010 |
49 | Data &B11100110 |
50 | Data &B11101110 |
51 | Data &B00110010 |
52 | Data &B11111110 |
53 | Data &B11110110 |
Der Gedanke mit der Stromversorgugn hört sich allerdings nicht ganz uninteressant an. Die Stromversorgung liefert mir ein fertiges Schaltnetzteil von Meanwell (gab's günstig bei Reichelt). Laut Datenblatt liefert es 5V und 5A, was für meine Zwecke dicke ausreichen sollte. Ein weitere Pufferung mittels Elkos habe ich jedoch im Moment noch gar nicht. Die einzigen Kondensatoren, die ich im Moment verbaut habe, sind ein 100nF Kondensatoren jeweils beim MAX232 und beim AVR zwischen Vcc und GND (und natürlich die im Schaltnetzteil). Ich werde morgen mal ein paar Versuche mit zusätzlichen Pufferelkos machen, das könnte sich vielversprechend anhören, Danke für den Tipp. In diesem Sinne, gute Nacht. ;-) David
2 ULN sind für einen Controller definitiv kein Problem. Ein Portpin kann ca. 20 ULN-Eingänge treiben. Außerdem gibt es durch die Eingangswiderstände des ULN(ca. 2.7kOhm) da auch keine Rückwirkung. Meine Vermutung geht hier ebenfalls in Richtung Stromversorgung, sprich zusätzlich einige hundert Mikrofarad am Stromeingang und den Masseanschluß der ULN nicht über dem Masseanschluß des Controllers führen, sondern separat zum Masseanschluß der Strombuchse ziehen. Dasselbe für die Plusleitung zu den Stellentreibern. (Sternverdrahtung.) Das Netzteil selbst sollte, wenn es keinen Defekt aufweist, absolut keine Probleme mit dieser Last haben, ich sehe die Leitungen zu den Platinen und die fehlende Pufferung als das Problem an. Gruß Jadeclaw.
Mit einem ULN2803 und einer LED-Anzeige funktioniert es also. Und mit zwei ULN2803 und 2 LED-Anzeigen geht es nicht. Versuch doch mal zur Fehlereingrenzung zwar den 2. ULN anzuschließen, ohne jedoch die dazugehörige Anzeige mit anzuschließen. Was passiert dabei? Reinhard
OK, sorry, ich lese gerade (und sehe es auch auf deinem Bild), dass du nur die LED-Anzeigen anschliesst, die ULN sind ja fest verdrahtet. Vergiss also das Posting von eben. Wer lesen kann ist klar im Vorteil :-) Reinhard
Kurzer Vorschlag (das Problem hatte ich mal): Schließe mal nur den AVR und die beiden ULN's an .. aber keine Anzeigen und sonstiges! Wenn es jetzt nicht geht Prüfe mal ob dein SNT überhaupt eine Spannung liefert?! Bei mir war es so, dass durch ein sehr "billiges" Schaltnetzteil die "Mindestbelastung" nicht gegeben war... Sollte aber eigentlich das SNT selbst integriert haben, aber eine Idee ist es Wert >>> Edit: Ok ich kann auch nicht lesen wie jemand über mir sry! Dann kann es wohl der Mindeststrom nicht sein... schade <<< Und kurze Anmerkung zu deinem Bild: Die Vorwiderstände zu deinen Transistoren (die Links vom ATMega) sehen aus wie bei mir vor nem Jahr noch gg Grüße Tobi
ich habe eigentlich nichts gegen deine Technik... ...aber, schaue dir Mal den MAX7219 an.Nur so zur Information. Da brauchst du drei Pins fuer bis zu 8 Siebensegmentdisplays
Guten Abend, vielen Dank für eure Antworten, ich konnte den Fehler nun dank eurer Hilfe beheben. Ich habe auf der Platine einfach einen 100uF Elko am Stromeingang eingelötet und schon funktioniert alles perfekt und absolut problemlos. Kleine Ursache, große Wirkung. ;-) Ich bin davon ausgegangen, dass die Spannungsversorgung bei einem fertigen Schaltnetzteil schon ausreichend stabilisiert ist, aber anscheinend darf man da wirklich nix und niemandem mehr trauen. :-) Um das Problem noch etwas besser zu verstehen werde ich die Platine morgen mit ins Geschäft nehmen und dort jeweils mit und ohne Pufferelko an ein Oszilloskop hängen. Da sollten die Spannungsschwankungen dann hoffentlich schön zu sehen sein. Würde mich nämlich interessieren, in welchen Größenordnungen sich das alles denn so abspielt. Mein Multimeter mit 3 Messungen pro Sekunde zeigt mir nämlich immer nur konstante 5V an. :-) Und auch noch Danke für die zahlreichen Tipps mit der Sternverdrahtung etc., werde ich mir ab sofort angewöhnen. Den MAX7219 habe ich mir auch mal angeschaut, hört sich vielversprechend an. Wenn auch der IC zumindest bei Reichelt nicht mehr zu den billigsten gehört. Meine Eigenbau-Schaltung gefällt mir persönlich - jetzt wo sie funktioniert - auch gar nicht mal so schlecht. :-) PS: Ist es eigentlich sinnvoll, vorsorglich einfach pauschal an jede Microconroller-Platine mit solchen Stromspitzen einen 100uF Elko an den Stromeingang zu löten, oder entstehen dabei auch irgendwelche Nachteile? Im Rahmen meines Projektes werden nämlich schlussendlich etwa 10 AVR-Platinen an dem 5V-Schaltnetzteil hängen, wobei jedoch nur 4 Platinen 7-Segment-Anzeigen steuern werden, der Rest ist keinen Stromschwankungen ausgesetzt. Ich könnte mir vorstellen, dass es beim Einschalten zu einem ziemlich großen Einschaltstrom kommen könnte, wenn erstmal auf jeder Platine so ein Pufferelko aufgeladen werden muss. Oder ist das Aufladen von insgesamt 1000uF für ein solches 5V/5A Schaltnetzteil nur Kleinkram? Gruß David
in Digitalschaltungen ist es ueblich an jedes IC einen Kondensator zu haengen....das hat nichts mit Groszuegigkeit zu tun. Schnelle ICs ziehen fuer sehr kurze Zeit enorm hohe Stroeme...wenn Saft in naechster Naehe ist,dann geht dabei nichts schief.
Prinzipiell und fast immer kommt bei mir auf jede Platine mit µC, die über Kabel an einem SVG hängt, ein Puffer-Elko von 10-47µ, je nach zu erwartendem Strom. Und natürlich der obligatorische 100n Angstkondensator dicht an den µC. Kostet nicht viel und schützt vor Seltsamheiten. Und 1000µ sollten für ein SNT mit 5A kein Problem sein.
@David Fröhlich: Das muß nicht am Netzteil liegen. Jeder elektrische Leiter hat auch eine unangenehme Eigenschaft: Selbstinduktivität. Bei langsam ansteigender Last macht diese Selbstinduktivität nichts aus, bei Anstiegszeiten im Bereich um 25nsec sieht es schon anders aus. Ein ULN2803 schafft immerhin noch 250nsec. Das regelt kein Netzteil aus, das müssen die Ausgangselkos schaffen. Hängt da jetzt ein Meter Kabel zwischen Platine und Netzteil, sind die Ausgangselkos des Netzteils wirkungslos, die Spannung bricht beim Einschalten der Displays zusammen. Also muß ein Kondensator auf der Platine die Stromspitzen abfangen, bis genug Energie vom Netzteil nachkommt. Gruß Jadeclaw.
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.