Forum: Mikrocontroller und Digitale Elektronik ATMega8515 mit zwei ULN2803 überfordert?


von David F. (dfroe)


Angehängte Dateien:

Lesenswert?

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

von Anselm 6. (anselm68)


Lesenswert?

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

von Nullahn (Gast)


Lesenswert?

Schaltplan/Programm

von David F. (dfroe)


Lesenswert?

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

von Jadeclaw D. (jadeclaw)


Lesenswert?

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.

von Reinhard R. (reirawb)


Lesenswert?

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

von Reinhard R. (reirawb)


Lesenswert?

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

von Tobias B. (tc-soundnlight)


Lesenswert?

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

von Mensch_Z (Gast)


Lesenswert?

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

von David F. (dfroe)


Lesenswert?

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

von Mensch_Z (Gast)


Lesenswert?

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.

von Sven (Gast)


Lesenswert?

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.

von Jadeclaw D. (jadeclaw)


Lesenswert?

@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
Noch kein Account? Hier anmelden.