Hallo, ich habe mir eine Schaltung aufgebaut, die einen mir nicht ganz nachvollziehbaren Fehler aufweist. Schaltung: Über drei Ausgänge eines ICs wird jeweils ein Transistor geschaltet. Über diese werden jeweils 5V geschaltet. Am Kollektor hängen LEDs mit Vorwiderständen in Parallelschaltung. Über den einen Ausgang werden so rote, über den zweiten blaue und über den dritten grüne LEDs geschaltet. Resultat: Schalte ich den Ausgang 3 an, leuchten die grünen LEDs. Schalte ich den Ausgang 2 an, leuchten die blauen LEDs. Schalte ich den Ausgang 1 an, leuchten die roten UND die grünen LEDs. Wäre eine Leitung Kurzgeschlossen, würde ja auch bei Ausgang 3 beide Farben leuchten. Also wo kann dieser Fehler herkommen? Mfg, Mark
Wenn die rote LED in Serie mit der grünen LED angeschlossen ist geht das schon. Ist aber Geräten, hast du ein Bild Schaltplan Layout? mfg Andreas
Basiswiderstände gibt es natürlich. Der IC ist ein Atmega 644PU20. Alle LEDs laufen über die gleiche Versorgungsspannung. Wären Rot und Grün versehentlich in Reihe geschaltet, würden sich die roten ja kurzschließen, oder nicht? Ich hab hier leider keine Möglichkeit, Programme zu installieren. Gibt es einen Online Schaltplanzeichner? Mfg
Mark schrieb: > Gibt es einen Online Schaltplanzeichner? Packpapier und Bleistift reichen auch. :-) Gruss Harald
Es gibt die schönen ASCII Zeichnungen, die du hier häufig siehst;-) (Es gibt von sehr vielen Programmen die -Portable Version, LibreOffice, GIMP, selbst KiCAD gibt es wohl=) http://sourceforge.net/projects/kicad-portable/files/) Ich versuche kurz zu zeichnen was ich meine...
1 | A -------|>(rot)---+--|>(grün)----- GND |
2 | | |
3 | B |
Wenn du A anschaltest leuchten rot und grün, wenn du B anschaltest leuchtet nur grün, hast du ggf. diese Schaltung vor dir, also ganz einfach einen Fehler in deiner Schaltung? mfg Andreas
Schonmal dein Program unter die Lupe genommen das du da keien fehler gemacht hast was bei sauberen aufbau ja wahrscheinlicher ist.
Ich hab mal eine grobe Skizze mit Paint angefertigt. Sie ist leicht vereinfacht, es hängen mehrere LEDs mit jeweils einem Vorwiderstand am Transistor. Werte hab ich gerade keine im Kopf, kann ich aber nachreichen, wenn welche erforderlich sein sollten. Ich muss wohl alle Anschlüsse nochmal überprüfen. Übrigens: Bei "Rot" liegen annährend 5V an der roten LED plus Vorwiderstand an. An der grünen LED mit Vorwiderstand liegen lediglich 2,x V an. An dem Programm sollte es also auch nicht liegen. Es ist auf das aller wesentlichste beschränkt, also Pins als Ausgang definieren und Pins auf logisch 1 setzen, sonst nichts. Mfg
Mark schrieb: > An dem Programm sollte es also auch nicht liegen. Kannst du leicht prüfen: Nimm den µC aus dem Sockel und leg auf die Pins, die zu den Transistoren führen mittels Drahtbrücke 5V. Dann müssen die jeweilige LED leuchten.
Mark schrieb: > An dem Programm sollte es also auch nicht liegen. > Es ist auf das aller wesentlichste beschränkt, also Pins als Ausgang > definieren und Pins auf logisch 1 setzen, sonst nichts. Die meisten Fehler macht man bei Dingen, die einem leicht vorkommen :) Vielleicht setzt du die Pins der LEDs, die nicht leuchten sollen, nicht im PORT-, sondern im DDR-Register auf 0. Dann ist der Ausgang deakti- viert, und der interne Pullup ist aktiviert, was die über Transistoren angesteuerte LEDs ebenfalls zum Leuchten bringt. Das war aber nur ein Beispiel, was man in der Eile alles falsch machen kann. Ansonsten: Miss mal im Problemfall (Rot und Grün leuchtet, obwohl nur Rot leuchten soll) die Spannung an allen roten Punkten gegen GND. Da wird dir (oder jemand anderem hier) sicher so etwas wie Schuppen von den Augen fallen.
> ...eines ICs
Joa, wir wissen Bescheid,
das IC mal anders herum reinstecken, fertig.
Ich werde die Schaltung heute Abend noch einmal durchtesten und den Code mit anfügen. Vielen Dank für die vielen Ratschläge und Lösungsansätze! Ich denke auch, dass es einfach ein kleiner Fehler in der Verkabelung sein könnte, da diese bei vielen LEDs doch recht unübersichtlich ist. Was mir gerade einfällt: Könnt es auch sein, dass der Transistor bei den grünen LEDs kaputt ist und daher eine dauerhafte Spannung von 2,x V an den LEDs anliegen lässt? Ich weiß, dass dies dann auch der Fall wäre, wenn nur die blauen LEDs leuchten, aber vielleicht ist das ja so und ich hab es aufgrund der Intensität des blauen Lichts nicht gesehen (Rot, Grün und Blau liegen sehr dicht zusammen). Ich werde dies heute Abend ebenfalls mal überprüfen! Mfg
Yalu X. schrieb: > Ansonsten: Miss mal im Problemfall (Rot und Grün leuchtet, obwohl nur > Rot leuchten soll) die Spannung an allen roten Punkten gegen GND. Da > wird dir (oder jemand anderem hier) sicher so etwas wie Schuppen von > den Augen fallen. Ich würde noch drei rote Punkte hinzufügen, nämlich unmittelbar an den Emittern der Transistoren, insbesondere während die LEDs leuchten. Da sollte zwar Massepotential liegen, aber vielleicht ist dazwischen doch eine Unterbrechung. :-) Gruss Harald
Mark schrieb: > Ich denke auch, dass es einfach ein kleiner Fehler in der Verkabelung > > sein könnte, da diese bei vielen LEDs doch recht unübersichtlich ist. Jo, kann sein, z.B. wie im Bild. Port 3 auf High: Grün an Port 1 auf High: Strom aus Emitter T1 fließt in Basis T2: Rot und Grün an
Warum so kompliziert? Löte die Basiswiderstände am Prozessor ab und lege sie testweise an +5V. Danach ist es klar, ob es ein Soft- oder Hardwarefehler ist. Ein Pegelprüfstift sollte auch nicht fehlen.
So, ich meld mich mal wieder. Ich hab festgestellt, dass es grundsätzlich noch ein Problem in der Schaltung gibt. Ich habe mal alle LEDs über den IC eingeschaltet. Während an Rot und Blau (inklusive Widerstand) an nährend 5V anliegen, liegt an Grün nur etwa 2,5V an. Der Rest liegt direkt am Transistor an. Vom Ausgang des IC zur Masse liegen bei allen fast 5V, bei den "grünen" Ausgängen aber nur ca. 0,72V. Kann man anhand dessen schon sagen, ob der Transistor defekt ist, oder, ob es am IC liegt? Kann es vielleicht sein, dass der Basiswiderstand überbrückt wurde und dadurch der Transistor zerstört wurde? (Falls wichtige Daten fehlen, sagt bitte Bescheid. Ich habe habe erstmal keine weiteren Werte aufgeschrieben, da sich die Situation ja sehr verändert hat.) Mfg
Hier nochmal das Programm:
1 | #include <avr/io.h> |
2 | |
3 | int main( void ) |
4 | {
|
5 | |
6 | DDRA = 0x1F; |
7 | DDRB = 0x1F; |
8 | DDRC = 0x1F; |
9 | |
10 | PORTA = 0x1f; |
11 | PORTB = 0x1f; |
12 | PORTC = 0x1f; |
13 | |
14 | while(1) |
15 | return 0; |
16 | |
17 | }
|
Mfg
Wie groß sind die Basiswiderstände für die drei Transistoren und die Vorwiderstände für die drei LEDs? An welchen Pins sind die LEDs angeschlossen?
Bitte lesen:
>
Warum so kompliziert? Löte die Basiswiderstände am Prozessor ab und lege
sie testweise an +5V. Danach ist es klar, ob es ein Soft- oder
Hardwarefehler ist.
<
Und tun.
Dann logisch denken und die Schaltung korrigieren, die Loetbruecken
entfernen, die Transistoren richtig herum einbauen.
Problem erledigt.
Gruss
Michael
Hallo, Rb = 1/4W, 5%, 220 Ohm Transistor = BC 337-40 Rvrot = 150 Ohm Rvblau = 100 Ohm Rvgrün = 100 Ohm Angeschlossen sind die Basiswiderstände an PA0, PB0 und PC0. PA1-PA4, PB1-PB4 und Pc1-PC4 sollen nachher genauso angeschlossen werden. Daher Ist alles auf 0x1F geöffnet und geschaltet. Falls das Datenblatt des IC weiterhilft: http://www.atmel.com/dyn/resources/prod_documents/doc2593.pdf Es soll ja keiner seine kostbare Zeit mit suchen verbringen, wenn ihr mir schon so gut zur Seite steht. :)
Michael Roek schrieb: > Warum so kompliziert? Löte die Basiswiderstände am Prozessor ab und lege > sie testweise an +5V. Danach ist es klar, ob es ein Soft- oder > Hardwarefehler ist. Da alles ein wenig verbaut ist (ich weiß, es ist kein gutes Schaltungsdesign, welches ich gewählt habe) würde ich nach Möglichkeit darauf verzichten, die Widerstände auszulöten. Aber, da das Programm ja hier zu sehen ist, kann man einen Softwarefehler auch so erkennen, oder nicht? Vielleicht liege ich ja falsch, aber mir wäre in diesem Programm kein Fehler bekannt, der dieses Resultat erzeugen würde. Natürlich könnte ich ein Bauteil nach dem anderen testen, aber besser wäre es, wenn man so vielleicht schon sehen könnte, woran es liegt. Wenn keiner was dazu sagen kann, bleibt mir natürlich nichts anderes übrig, aber ich hoffe noch, auf Erfahrungswerte. :) Mfg
kann es sein das du die widerstände falsch ausgerechnet hast? für die leds würde ich bei 5volt Netzspannung 100ohm als widerstand nehmen, als basis widerstand würde ich lass mich nicht lügen zwischen 1k und 1.5k nehmen das kommt aber auf deinen transistor an.
jan schrieb: > kann es sein das du die widerstände falsch ausgerechnet hast? > für die leds würde ich bei 5volt Netzspannung 100ohm als widerstand > nehmen, > als basis widerstand würde ich lass mich nicht lügen zwischen 1k und > 1.5k nehmen das kommt aber auf deinen transistor an. Die Vorwiderstände waren bei den LEDs dabei. Für Blau und Grün sind sie ja zumindest 100 Ohm groß. Beim Basiswiderstand habe ich mich hier im Forum informiert, wo mir nach letztendlich 220 Ohm nahgelegt wurden. Bei Blau und Rot funktioniert es ja auch ohne Probleme. Könnte es denn sein, dass der Basiswiderstand versehentlich kurzgeschlossen wurde und es den Transistor zerschossen hat, der jetzt nur noch als Widerstand fungiert? Oder hätte das andere Auswirkungen? Mfg
Da fällt mir gerade etwas ein, was häufig vergessen wird: Hast du den JTAG gedisabelt? Der beeinflusst zwar nur PC2-PC5, stört aber spätestens dann, wenn du dort weitere Dinge anschließt, was du ja vor hast. Mark schrieb: > Vom Ausgang des IC zur Masse liegen bei allen fast 5V, bei den "grünen" > Ausgängen aber nur ca. 0,72V. Bist du sicher, dass der Basiswiderstand für grün 220Ω und nicht z.B. 2,2Ω hat? Welches ist der "grüne" Ausgang? Ist das PC0? Ist der vielleicht defekt? Hast du einen zweiten Controller, den du testen könntest? Oder kannst du eine LED (mit dem ganzen Transistorgedöns) mal an PC1 testen? Und wie Jan schon schrieb: 220Ω ist recht wenig für die Basiswiderstän- de. Da fließt ein Basisstrom von 20mA, der LED-Strom ist auch nicht höher. Du könntest die LEDs also genauso gut direkt am µC betreiben. Lass die Transistoren auch etwas tun und mach die Basiswiderstände mindestens um den Faktor 10 größer. Trotzdem erklärt das aber nicht die Fehlfunktion.
Yalu X. schrieb: > Da fällt mir gerade etwas ein, was häufig vergessen wird: Hast du den > JTAG gedisabelt? Der beeinflusst zwar nur PC2-PC5, stört aber spätestens > dann, wenn du dort weitere Dinge anschließt, was du ja vor hast. Bei den Fuses hab ich nur den CKDIV8 verändert. JTAG werd ich dann auch noch disablen. > Bist du sicher, dass der Basiswiderstand für grün 220Ω und nicht z.B. > 2,2Ω hat? Es sind überall die gleichen Basiswiderstände verbaut, außer, Reichelt hätte derbst Mist gebaut. ;) >Welches ist der "grüne" Ausgang? Ist das PC0? Ja, das müsste PC0 sein. > Ist der vielleicht defekt? Hast du einen zweiten Controller, > den du testen könntest? Möglich, dass dieser defekt ist. Ich habe aber leider keinen Ersatz IC zur Hand. > Oder kannst du eine LED (mit dem ganzen Transistorgedöns) mal > an PC1 testen? Werde ich das nächste mal einmal testen. Wie sieht es denn mit meiner Theorie aus? Unsinn oder könnte es eine Erklärung sein? Mfg
jan schrieb: > und hast du npn transistoren genommen? Ja, es sind NPN Transistoren. Nähere Bezeichnung bei Reichelt: Transistor NPN TO-92 45V 0,5A 0,625W Mfg
so wie ich das sehe braucht dein transistor wirklich 1A reichelt gibt 800mA conrad 1A wobei ich jetzt das 16er model genommen habe, nimm doch einfach einen BC547B und dann einen 1,5k basis widerstand, das ist zufällig auch der wie es hier im tutorial beschrieben wird, der benötigt nur 20 mA, zudem ist dieser transistor billiger ;)
jan schrieb: > so wie ich das sehe braucht dein transistor wirklich 1A reichelt gibt > 800mA conrad 1A wobei ich jetzt das 16er model genommen habe, > nimm doch einfach einen BC547B und dann einen 1,5k basis widerstand, das > ist zufällig auch der wie es hier im tutorial beschrieben wird, der > benötigt nur 20 mA, zudem ist dieser transistor billiger ;) Das nächste mal werde ich mich vielleicht für diesen entscheiden. Doch jetzt habe ich mir ja einige dieser Transistoren besorgt, ich würde mich ärgern, wenn ich sie dann nicht benutzen könnte. ;)
^|^ schrieb: > Die paar Zeilen nennst du Programm? > Glaube kaum daß das so funzt. Was ist es den sonst? Es ist, wie ich sagte, nur zum testen und kein Programm, welches später im Einsatz ist. Warum sollte es denn nicht funktionieren? Ich lasse mich natürlich gerne belehren, wenn etwas fehlen sollte! Mfg
jan schrieb: > nimm doch einfach einen BC547B Wieso denn das? Mark hat einen BC337-40. Der hat sogar eine höhere Stromverstärkung als der BC547B (da hättest du schon einen BC547C vorschlagen müssen). Für die 20mA LED-Strom reicht das locker. Auch wenn Mark auf hellere LEDs mit 100mA oder 200mA umstellen möchte, ist der BC337-40 noch ausreichend, während der BC547 schon deutlich in die Knie geht. > zudem ist dieser transistor billiger ;) Nicht einmal das. Bei Reichelt kosten beide 4 Cent :)
Mark schrieb: > Es ist, wie ich sagte, nur zum testen und kein Programm, welches später > im Einsatz ist. > Warum sollte es denn nicht funktionieren? > Ich lasse mich natürlich gerne belehren, wenn etwas fehlen sollte! Das Programm sollte am Ende in einer Endlosschleife laufen. bei dir wird die Main aber sofort mit return 0 verlassen. Wie wärs mit einem ; hinter dem while (1) ?
Mikel schrieb: > Wie wärs mit einem ; hinter dem while (1) ? Stimmt, das ist ein Bug. Der sollte aber nichts ausmachen, da m.W. main beim AVR-GCC am Ende ohnehin direkt in die exit-Routine springt, die in der AVR-Libc als Endlosschleife implementiert ist.
Bei 220 Ohm Basisvorwiderstand hast du etwa 20 mA und das ist etwa die Größe der Last. Das ist für deinen Prozessor zu viel. Wer hat dir denn diesen Käse erzählt? Und laß dich nicht von der zig-fachen Übersteuerung der Basis verrückt machen. Die braucht man nur in der Digitaltechnik, um steile Flanken zu bekommen. Die Transis haben heute meist eine h21e von >300. Versuche es mal mit 4,7K und du wirst sehen, das deine LED bei 20 mA schön leuchten.
Yalu X. schrieb: > Nicht einmal das. Bei Reichelt kosten beide 4 Cent :) dann werde ich mich im datenblatt verguckt haben schon alleine weil den ich egsehen ahbe 50cent gekostet hat :/ habe auch den obrigen Beitrag nicht gesehen. Sorry das wird dann wohl mein fehler gewesen sein. ist den kein Elektroladen bei dir um die Ecke? o Naja und nochmal zum code, ich habe dir mal ein delay eingefügt, eventuel klappt es ja besser wenn die anderen Ports ausgeschaltet sind mein code geht jetzt jeden Port einmal seperat durch. #include <avr/io.h> #include <util/delay.h> int main() { DDRA = 0x1F; DDRB = 0x1F; DDRC = 0x1F; while(1) { PORTC = 0x00; PORTA = 0x1f; _delay_ms(100); PORTA = 0x00; PORTB = 0x1f; _delay_ms(100); PORTB = 0x00; PORTC = 0x1f; _delay_ms(100); } return 0; }
Muss ich mich wiederholen: > Warum so kompliziert? Löte die Basiswiderstände am Prozessor ab und lege sie testweise an +5V. Danach ist es klar, ob es ein Soft- oder Hardwarefehler ist. < Tus doch einfach...... wenn es keine SMD Widerstaende sind, knipst Du ein Ende durch und machst den Test....anschliessend einen Loetpunkt drauf. Oder ziehst den uC aus der Fassung! Warum faengst Du nicht mit dem einfachsten an? Und BC337 ist super....den benutze ich fuer (fast) alles! Gruss Michael
mit einem Logik-Tester oder Pfüfstift mit LEDs drin (ähnlich Duspol) hätte ich das schon vor zig Tagen herausbekommen, wie man daraus so einen Elefanten > Aufwand machen kann? aber Übung macht bekanntlich den Meister !
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.