Hallo zusammen, Habe folgendes Problem mit einem Led-Cluster. Spannung ist 10 Volt und 60 mA Strom. (15 Leds , rot) Wie schalte ich diese Spannung/Strom mit dem ATmega8 ? Habe schon mit einem Transistor und Optokoppler versucht aber ich bekomme nicht die volle helligkeit hin, weil nicht genug Strom durch den Cluster fließt. Gibt es spezielle Treiber dazu ? Für Eure Hilfe bin ich Euch sehr dankbar. Gruß Roman
Optokoppler ist nicht erforderlich. Ansonsten kann man nur raten, was du da fabriziert hast. Stell mal rein, was du genau gemacht hast.
>>10 Volt und 60 mA >>15 LEDs hmmh kann auch nicht ganz funktionieren je nach dem welche LEDs wenn man von den "standart" LEDs aus geht brauchen diese ca. 20mA das stueck bei 2 .. 3V wen du nun jede LED einzelnd ansteuern willst kommst du aug ferade mal 3 stück mehr nicht hast du allerdings eine Matrix anzeige 1 2 3 4 5 A # # # # # B # # # # # C # # # # # könnte es klappen mit deinen 60mA aber wie schon gesagt eine genaue Beschreibung fehlt Gruss Jens
>>>10 Volt und 60 mA >>>15 LEDs > > hmmh kann auch nicht ganz funktionieren je nach dem welche LEDs > wenn man von den "standart" LEDs aus geht brauchen diese ca. 20mA > das stueck bei 2 .. 3V z.B. 5 Stück in Reihe, dreimal parallel, gibt 10V, 60mA.
Dannke erstmal für die schnellen Antworten ! Der Cluster ist eine fertige "Lampe" mit 3x5 also 15 Superhellen Leds. (Bei Reichelt gekauft 4,50 €). Habe ein Bild davon angehängt. Also keine Matrix oder ähnlichem. Die Lampe hat zwei Kontakte sonst nichts. Habe auch eine Skizze gemacht wie ich das angeschlossen habe. Laut Datenblatt ist der Optokoppler für ein Strom von 100 mA ausgelegt. Müsste also ausreichen. Und trotzdem messe ich nur ca. 25 mA. Kann ich mir nicht erklären. Oder ist das normal das ich weniger Strom messe als es wirklich ist?
Ich gehe mal davon aus, daß der Cluster als Stromregelung nur Vorwiderstände besitzt. Solche Cluster reagieren dann empfindlich auf Abweichungen der Eingangsspannung. Meß mal den Spannungsabfall über den "Schalttransistor". Ist dieser geeignet die Last zu treiben?
ob der Transistor geeignet ist weiss ich nicht. Wie kann ich das prüfen ? Die bezeichnung ist BC 337-40 Ich messe dort 3 Volt. Roman
Aus dem Datenblatt. RFM. Sorry. Wenn die 3 V die UCE des Transistors sind, hast du an dem Cluster nur noch 9 V liegen. Hätte ich aus dem Stromverbrauch auch so geschätzt.
Hi, der BC337-40 ist stark genug, leider weis ich nicht ob der AT-MEGA interne pull-ups hat. Da der BC337-40 sowiso etwas mehr Basisstrom verträgt nimm doch einen 1K Widerstand als pull-up. Die Schaltung sollten dann wie folgt aussehen: BC337: Emitter an Masse(GND) Basis direkt am Ausgangs des AT-MEGA, zusätzlich ein 1K Widerstand von der Basis auf +5V (pull-up), Die Anode (+) des LED-Clusters auf 12V+ und die Kathode(-) auf den Kollektor des BC337, das wars!. Auf die Art kannst du Lasten bis 500mA Strom schalten. Gruß, Ralf N.
Muss ich den Pin dann als eingang stellen weil es leuchtet auch wenn die verbindung zum Controller unterbrochen ist. Aber es leuchtet gut habe jetzt mit einem ca.50 Ohm Widerstand meine 60 mA. Klasse. Gruß Roman
Hi, natürlich leuchtet es wenn der Controller nicht dran ist, da ja der Transistor über den Widerstand durchgesteuert wird. Das Prinzip ist folgendes: Der Controller liefert nur einen geringen Strom bei high am Ausgang, deshalb hilft man mit einem pull-up nach der den Strom zum steuern des Transistors liefert. Andersrum kann aber der Conroller einiges an Strom gegen Masse schalten, bedeutet sobald man eine 0 ausgibt ist es für den Controller kein Problem 5mA Strom gegen Masse kurzzuschließen so das an der Basis vom Transistor 0 Volt anliegen und er speert. Also gib einfach mal eine 0 am Portpin aus und schon wird auch dein LED Cluster ausgehen, oder brücke mal Masse auf die Basis des T. dann passiert das gleiche. Gruß, Ralf N.
Hallo , Vielen Dank für die Erklärung Ralf, habe einiges dabei gelernt. Jetzt steht der Aufgabe einen Sonnenaufgang für Aquarium Fische nichts mehr im wege. Danke auch an die anderen. Gruß Roman
Wenn die Basis direkt an den Port kommt, was ist dann bei H-Pegel am Port??? Der ATMega hat nämlich Gegentaktausgänge. ...
was ist ein Gegentaktausgang ? Geht der Port dan nicht kaputt ohne Wiederstand?
so wie das oben beschrieben angeschlossen messe ich 0,95 Volt. Ich habe das ohne pull-up Wiederstand angeschlossen also: von Port zum Wiederstand 1k Ohm dann weiter zum Basis am Transistor. Das funktioniert gut.
Hi, wenn das so ist das der AT-MEGA Transistor-Brücken am Ausgang hat dann muss natürlich der Basisstrom begrenzt werden, und der pull-up entfällt. Ich hatte bis jetzt noch nicht mit AT-MEGA zu tun aber die anderen MCUs hatten immer interne pull-ups und einfache Transistorausgänge. Gibt es denn einen Treiberbaustein mit Brücken-Ausgang, benötige ich für einen R2R D/A Wandler. Gruß, Ralf N.
habe auch vor, ein led cluster über nen µController zu steuern. Das Cluster hat 10 mal 3 LEDS in reihe mit Vorwiderstand für 12 V und einmal eine LED einzelnd mit 12V VoWid. Habe nun das Problem, dass diese einzelne LED immer an ist, da der Transistor nicht richtig "zu" macht. auch ohne µController an der basis fließt andauernd ein strom. Was kann ich tun?
Hö? Spannung an der Basis wegenehmen, dann kann auch kein Strom mehr fließen.
tja, das tut es leider aber... es liegt eine spannung von ca 7 ~ 8 V an, wenn man schaltet, dann natürlich 12V. aber diese 7 volt reichen, um die eine einzelne led zum leuchten zu bringen. für den rest reicht es nicht aus, die sind dann halt wie gewünscht dunkel. habe einen BC 875 glaub ich, jedenfalls npn weiß echt nicht weiter... leider zieht das cluster zu viel strom, um es mal an den anderen transistoren zu testen, die ich hier rumliegen habe. der 875er soll 2A können. die leds ziehen ~300 mA was ist, wenn ich die basis nicht nur auf null setze, sondern zusätzlich auf -5v oder so? veringert sich der strom dann vielleicht
Wie wäre es mit einem "normalen" Basis-Vorwiderstand? Dann hat men einen Spannungsabfall vom uC Pin über die Basis des Transistors auf das Bezugspotenzial (Masse oder UB). Dieser Spannungsabfall ergibt einen Basis-Strom und dieser ist die Grundlage für das "Schalten" (Eigentlich nur Stromverstärkung) des Transistors. Die Pins eines AVRs können 5 mA leisten (eigentlich noch mehr, aber der Gesamte chip darf eine maximale Stromstärke nicht überschreiten -> siehe Datenblatt "Electrical Characteristics" Nun kann der Vorwiederstand entsprechend dimensioniert werden. probier mal 5k)
also: AVR-pin -- Widerstand (ca 5k) -- Basis ? und leds, bzw masse an collector und emitter ? das hatte ich schon. der strom geht nicht ganz aus. aber wird stärker, wenn AVR-pin auf high ist.
Wenn der Portin 4.6V liefert, die Basis aber nur 0.8 Volt braucht, kannst Du einen Spannungsteiler statt eines Vorwiderstandes nehmen. So hast du einen Widerstand von der Basis nach Masse, der die Basis dann auch "leerräumt". Portpin--470Ohm--+->Basis | 2,2KOhm | -(Masse) Was mir beim "zeichnen" gerade auffällt. Der AVR hat doch, wie erwähnt Gegentaktausgänge. Dieser sollte ja wohl stark genug sein, die funktion des 2.2KOhm Widerstand zu erfüllen. Deine Schaltung ist sicher irgentwie falsch. Was hast Du doch gleich für einen Transistor verwendet? BC845? Sieh mal nochmal nach, bitte und stell mal die Schaltng rein. Wir wern ja wohl die Lampen auskriegen_ AxelR.
Eigentlich hat der AVR Gegentakt-Ausgänge... Jetzt mal eine ganz dumme Frage: Ist der Pin auch als Ausgang geschaltet? Ich hatte mal in der Firmware von einem Programmer einen Bug, indem die Richtung des Pins nicht richtig geschaltet wurde. Das Quasi-Software-RS232 ging aber trotzdem (manchmal). Wenn der Pin auf Eingang steht, dann wird nur immer der Pull-Up ein- und ausgeschaltet und die 30k reichen dann aber trotzdem aus um einen transistor zu "schalten". Nur beim ausschalten (Basis-Tristate) wirkt dann der Cbe Kondi und die beiden np-Übergänge; Dadurch "sperrt" der Transistor nicht 100%. Du kannst das Testen, indem du von beiden Betriebs-Potenzialen direkt auf den Pin misst. Wenn dann zweimal der selbe wert kommt, dann ist alles in ordnung ansonsten ist der pin high-z.
habe alles so, wie im avr-tutorial (beispiel mit den leds)... habe ein eigenes "blinkmuster" programmiert, was mit leds direkt am port auch klappt. jetzt wollte ich halt das cluster dran machen, aber da 300 mA ein wenig zuviel für den uC sein dürften G halt nen transistor dazwischen. habe ncohmal geguckt, ist der den BC875. nehme gleich mal nen anderen und teste es mit einem kleineren verbraucher
...zuviel für den uC sein dürften G halt nen transistor dazwischen. ... Eben. Ich will Dir sicher nicht zu nahe treten, aber GENAU das hätte mich Intressiert. Wie hast Du denn den Transistor dazwischen? Hast Du vielleicht BasisEmitterKollektor verwechselt? Weil 12V-5V sind ca.7Volt. Wenn da mal nichts verdreht ist. Ich mein ja nur
eigentlich nein (laut datenblatt und standard transistor belegung halt...) schalten tut er ja auch. und ohne uC (schalter als ersatz) macht er ja das selbe (hab auch nen 2. getestet, liegt also nicht an defekt oder so)
hab nun mal einen belastbareren aus nem alten radio ausgebaut und siehe da... ES KLAPPT! die beiden 875er müssen wohl mal einen mitbekommen haben oder so. der eine war zwar neu aber beim rumprobieren... naja ;P vielen dank auf jeden fall für die schnellen antworten! habe jetzt: AVR-Pin -- Widerstand 4,7k -- Basis und: Collector -- Masse sowie: Emitter -- Leds (-) und dann LEDs(+) nach plus 12V
Und genau so dürfte es nicht gehen... Richtig wäre: Port - Widerstand - Basis GND (Minus) - Emitter Kollektor - LED (Katode) LED (Anode) - +12V (falls LED-Cluster internen Widerstand hat) ...
sag ich doch verkehrt rum. Wenn man Transistoren im Inversbetrieb betreibt, was sicherlich geht, passiert genau dieser effekt. die Basis-Emitterstrecke bricht durch bei ca. -6V, bleiben entsprechend viele Volts in den Lampen (ich erkläre das hier ganz einfach) Daher sollte meine Frage vorhins auch nicht böse zu verstehen gewesen sein...
ja stimmt, hab mich gerade verschrieben, bzw verguckt oder falsch gedacht, da ich den transistor von oben gesehen habe und nicht wie abgebildet von unten... Port - Widerstand - Basis GND (Minus) - Emitter Kollektor - LED (Katode) LED (Anode) - +12V (falls LED-Cluster internen Widerstand hat) <= jo, ist da. so ist es auch jetzt. und ende! endlich geht der kram! :o hat ja lang genug gedauert... PUNKT.
Nunja, diese "Lektion" ist eigentlich lange vor den Mikrocontrollern an der Reihe... ...
düp die duuu... hab bis vor 5 tagen immer nur "grob-elektronische-mechanische" schaltungen wie sachen mir relais oder vielleicht mal ner flip-flop schaltung als wechselblinker gebaut. ab und zu auch mal ein bausatz von conrad oder so. und nun hab ich innerhalb von 2 tagen gelernt, wie man mit der hand platinenlayouts für mega8er und displays entwirft, den code schreibt und anpasst usw und so fort... also bitte, was will man da erwarten G immerhin leben meine uC noch :D
so, bin jetzt nach einiger zeit mit meinem projekt fertig geworden und lüfte nun das geheimnis... http://www.kitesurfer1404.eu.tc/lights/edge bitte nicht über den quelltext des µC lachen... war ja mein erstes projekt mit nem controller ;) vielen dank noch mal für die hilfe hier im forum! tolle seite! weiter so! hab hier alles über µC gelernt, was ich brauchte.
Video und Quelltext habe ich mir nicht angesehen... Ansonsten gut gemacht für ein Erstlingsprojekt. Mit Streifenplatinen und dem Bohrer für Trennstellen hatte ich auch schon hantiert. Schau dir mal den ULN2003 und ULN2803 an. Wenn du mehrere Transistoren brauchst, dann bieten sich diese Treiber ICs an. Deiner Webseite konnte ich aber nicht entnehmen, welchen Zweck dieses Teil erfüllen soll. Ist es eine Art "Lichtorgel"? Oder einfach nur "bunte Lampe" mit Programmsteuerung? Frohen Rest vom Fest... ...
oh, das ganze ist ein blaulichtbalken von nem US-policecar. da ich nur den träger und die bunten gehäuseteile hatte und das innenleben nur schwer und teuer zu beschaffen ist in deutschland musste ich den balken halt persönlich ausbauen ;) jetzt kommt schon die ein oder andere anfrage aus den staaten, wie man das so baut und so weiter... vor allem die geringen kosten (~10 euro pro steuerplatine) haben alle fasziniert. und die möglichkeit eigene "blitz/blinkmuster" zu programmieren. solltest die bei gelegenheit mal das video anschauen grüße
Ok... Auf USA-Polizei bin ich jetzt nicht gekommen, Knoten im Kopf... Würde glatt auf meinen Trabbi passen (wenn ich einige Jahrzehnte jünger wäre)... Das wird wohl nicht das letzte Programm für diesen Mega8 gewesen sein. Da lassen sich ja allerhand Spielereien mit machen. Baust du noch eine Sirene rein? Frohen Rest vom Fest... ...
jetzt hast du mich auf eine idee gebracht... leider ist kein platz mehr im gehäuse für nen lautsprecher, AAAAABER ich hab noch nen zweiten balken, da ist so ein 6 kilo druckkammer lautsprecher drin. der kann 100W vertragen. leider fehlt mir das passende steuergerät. das wäre mal eine idee. leider habe ich da keine vorstellung, wie ich beginnen sollte... würde wieder nen mega8 nehmen, weil ich damit ja jetzt schon positive erfahrung gemacht habe. naja, einzige frage: wie bekomme ich das ding dazu, ein sirenengeräusch abzugeben? eine einfach sinus/rechtecksspannung ist ja langweilig. sollte wenn dann ja auch ein wenig realistisch klingen. denke dabei an den typischen amerikanischen heul sound. vieleicht noch verschiedene sirenentöne. schnell und langsam oder diesen "hupen-sound" wie beim feuertruck. vielleicht hat hier ja jemand ne idee, wie man a) so was programmiert und b) welche teile man noch braucht, damit nachher genug power bei rüber kommt. (müssen nicht gleich die vollen 100 watt sein, da das ding in meinem zimmer steht lol ) weiterhin ein frohes fest!
Na ich würde es erstmal mit dem Compare-Interrupt des Timer1 probieren. Dann in der Mainloop (von einem Timer synchronisiert) die Intervallwerte hoch&runterzählen. Ob du nun die OC-Pins nutzt (toggeln) oder in der ISR einen Pin deiner Wahl toggelst, bleibt dir überlassen. Wenn du darauf achtest, dass im Aus-Zustand immer sicher ausgeschaltet wird, dann kannst du den Lautsprecher mit einem FET direkt anschließen. Das Programm passt mit Sicherheit noch mit in den vorhandenen Mega8 rein. Frohen Rest vom Fest... ...
wie würde so was als sourcecode aussehen? habe ja noch nie so was gemacht und meine ASM kenntnisse gehen nicht über das asm-tutorial hinaus. wenn dann wird das ein eigenens projekt, heißt uns steht der controller voll zur verfügung. will nun den FET mit dem lautsprecher an einen pin hängen. alt oszillator wird der interne 1MHz gewählt. wie würde nun konkret ein ansteigender ton und danach fallender ton programmiert werden? also bsp. 1 sek ansteigend, danach 1 sek fallend, vielleuicht von 300 Hz bis 2000 Hz oder so. vielleicht mach ich lieber mal ein neues thema auf... mit led-cluster hat das ja nur noch wenig zu tun....
Na der Mega8 ist doch mit deinen LEDs nicht ausgelastet, oder? Und ein paar Pins (1 Ausgang und für jeden Modus einen Taster/Schalter) sind doch auch noch frei, oder? Nunja, ich kann kein C, ich halte ASM für einfacher. Aber auch in C kann man mit der Hardware (Interrupts) arbeiten. Und ein Programm ganz ohne Interrupts kann ich mir eigentlich garnicht vorstellen. Das geht schon mit dem Einlesen und Entprellen von Tastern bzw. Schaltern los. Das macht man in einem Timer-Interrupt alle 4...20ms. Der Interrupt ist damit ja noch nicht ausgereizt, man kann in dieser ISR noch etliche andere Aufgaben erledigen (z.B. Software-Timer für weitere langsame Steuerungen). Ein solcher Timer-Int kann auch die Mainloop "takten". Der MC geht dann nach getaner Arbeit in den Schlafmode und wird vom nächsten Int geweckt. Wartezeiten realisiert man dann nicht durch Warten (Zeitschleife) sondern durch "Unterlassen" (Überspringen, falls Zeit noch nicht abgelaufen und dafür was anderes tun). Man holt sich zum Warten nur eine Kopie vom aktuellen Software-Timer, addiert die Wartezeit und überspringt die Routine so lange, wie Software-Timer und "Zeitstempel" nicht übereinstimmen. Somit blockiert eine laufende Wartezeit nicht die anderen Anwendungen, die quasi gleichzeitig laufen. Um nun einen einfachen Rechteck-Sound mit änderbarer Frequenz zu erzeugen, nimmt man am besten von Timer1 einen der Compare-Interrupts. Man rechnet sich gemäß verwendetem Vorteiler den minimalen Intervallwert (maximale Frequenz) und maximalen Intervallwert (minimale Frequenz) aus (beides sind dann unsigned-16-Bit-Zahlen). Die Mainloop kann nun (vom Entprell-Timer synchronisiert) einen Wert zwischen den Extremwerten hinundher gleiten lassen. In der Compare-ISR wird dann das Compare-Register des Timers ausgelesen, das Intervall dazu addiert und die Summe ins Compare-Register zurück geschrieben. Dann wird noch der Portpin getoggelt und die ISR schnellstens verlassen. Beim Ausschalten des Sounds (Deaktivieren des Comp-Interrupts) ist der Portpin zusätzlich auf 0 zu setzen, damit kein Ruhestrom über den Lautsprecher fließt. Das Synchronisieren der Mainloop erreicht man mit einem Flag in einem Register (Boolean-Variable). Da meist noch andere Programmteile ("Jobs") synchronisiert werden müssen, legt man für jeden Zweck ein solches Flag an. Muss nun von einem Programmteil (z.B. ISR) ein Job aufgerufen werden, so wird nicht etwa das zugehörige Unterprogramm aufgerufen (dauert viel zu lange, ISRs müssen extrem kurz bleiben), sondern nur das zugehörige "Jobflag" gesetzt. In der Mainloop werden dann nacheinander alle Jobflags geprüft und bei gesetztem Flag wird das zugehörige Unterprogramm aufgerufen, was den Job erledigt und das Jobflag wieder löscht. Sind alle Jobs erledigt, geht der MC bis zum nächsten Int in den Sleep-Mode. Diese Art der Programmierung ist einfach, übersichtlich und erweiterbar. Sie spart gegenüber der Warteschleifenprogrammierung gewaltig Rechenzeit ein, so dass ganz nebenbei noch weitere Programmteile laufen können. Ich programmiere auf diese Art in ASM, das geht aber auch in C, BASIC und anderen Sprachen. Man muss es nur wollen und auf vorgefertigte WAIT-Funktionen verzichten. Schau dir mal in der Codesammlung Peter Danneggers Tastenentprellung an, das ist einer der ersten Schritte in diese Richtung... Frohen Rest vom Weihnachtsfest... ...
vielen dank schon mal. habe ein neues thema "polizeisirene mit mega 8" aufgemacht.
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.