Guten Abend allerseits. Ich habe wieder mal zwei neue Fragen ^^. Ich habe an meinem Attiny 2313 5 von diesen hellen blauen LED's mit einem Winderstand angeschlossen und zwar pro Ausgang eine LED. Und einen IR Empfänger TSOP 1738 an PB03 PD2, PD3, PB0 , PB1 , PB2 und PB3. Ich habe mal den Attiny angefasst und hatte das Gefühl das er "warm" wird und war mir nicht sicher ob dies normal ist bei 5V oder ob er irgendwie überlastet wird. Laut Datenblatt kann ja jeder Ausgang max. 40mA aushalten und diese LED's haben einen Stromverbrauch von 30mA und der IR Empfänger gerade mal 5mA. Muss ich mir da Sorgen machen, wenn der einige Stunden ohne Pause läuft ? Das zweite Problem habe ich in meinem Source Code (BASCOM). Wenn ich die Taste 1 auf der FB drücke sollen die 3 LED's leuchten (PB0...PB2) und bei der Taste 2 sollen sie ausgehen. Bei der Taste 3 sollen die 3 LED's blinken und bei Taste 4 sollen die 2 LEDs in dem Gehäuse ausgehen (PD2 und PD3). Nur wenn ich eine Taste drücke, reagiert der das ganze nicht mehr ^^, er ignoriert alle anderen eingaben. Ich kann meinen Fehler nicht finden... kann auch sein das meine Lösung umständlich ist, aber eine andere fiel mir auf die Schnelle nicht an. Ich habe den Source Code mit in den Anhang gepackt. Bedanke mich schonmal im Voraus. MfG, Tugrul Ö.
Hallo Tugrul, welchen Wert haben Deine Widerstände ? Gruss Otto
Hallo Otto, Ich habe mir schon gedacht das du gleich Antwortest ;). Die Widerstände haben einen Wert von 180 Ohm. MfG, Tugrul Ö.
Hallo Tugrul, 1. Vermutlich steht die Sub "blinken" an falscher Stelle 2. Die Widerstände sind in Ordnung. 3. Trotzdem entstehen pro LED ca. 100mW Verlustleistung. 4. Deshalb wird er warm - aber m. E. kein Grund zur Besorgnis.... Gruss Otto
Hallo Otto, Ich habe davor die SUB Blinken auch außerhalb der Do Loop Schleife gehabt, aber da blinken die LED's nureinmal und mehr nicht. Ich mein, Modus bleibt ja solange "blink" solange nichts neues gedrückt ist und ruft dann auch solange "blinken" auf. Nur wenn ich auf die Taste 3 drücke.. blinken die LEDs nur einmal und wenn ich dann auf 1 oder 2 Drücke blinken die LED's wieder einmal und sie sind aus. Und die Innenbeleuchtung-LED's reagieren gar nicht ^^. Ansonsten danke für deine Hilfe. MfG, Tugrul Ö.
Hallo Tugrul, zerlege die Aufgabe in Teilschritte: 1. gib Dein Command an die LED aus: >Portb.0 = Output '//LED zum steuern >Portb.1 = Output '//LED zum steuern >Portb.2 = Output '//LED zum steuern und prüfe, ob überhaupt die richtigen Kommandos kommen. 2. Wenn das funktioniert, toggle in jedem Unterprogramm eine der LED Otto
Hallo Otto ! Die Kommandos kommen schon richtig an !. Wozu soll ich jedem Unterprogramm eine LED toggeln ? Man das regt mich auf... ich programmiere schon seit Jahren mit VB, aber ich komm nicht einfach drauf.
Wenn Du sicher bist.... Welche Tasten drückst Du ? In Blinken hast Du z.B.: "if an = 1", machst aber nichts damit evtl. ist das schon eine Ursache
Was ich noch hinzufügen wollte. Als ich mein "Gerät" ausgeschaltet habe, indem ich den Schalter betätigt habe, hat eine LED noch sehr schwach geleuchtet. Ist das eine Art "Reststrom" ? oder ist das ein Zeichen auf eine Fehlfunktion. Danke
Also erster Fehler war schonmal: Das die If-Bedingungen der Modus Teile außerderhalb der If Bedingung der Address < 255 sein muss... sonst ruft er das ja nur auf wenn etwas gedrückt wird. So jetzt reagiert der aber nicht auf die Taste 1 und 2. Hängt der in Sub Blinken die ganze Zeit drin ? Kann ja nicht sein, sie wird ja nur von Do Loop aufgerufen... hmm Das bekomm ich au no raus ^^.
Hallo Tugrul, während Du in der Sub "Blinken" mit ihrem "wait" bist, kannst Du nichts mehr empfangen...... das mußt Du anders aufziehen.... Gruss Otto
Aber na klar !! Das hat mir gefehlt... das mit wait das er das stoppt ! Ich dachte er stoppt nur die SUB aber er stoptt das ganz Programm. Soweit ich weiß nennt man das synchron und nicht asynchron, kenn ich wieder aus meinen Net.Sockets erfahrungen in VB.NET ^^. Dem Programm fehlt ein Multi Threading ^^. Danke !
Halte dich einfach nur an das übliche µC Schema und du hast kaum Probleme. Das übliche µC Schema schaut so aus: Es gibt eine Hauptschleife. In dieser Hauptschleife wird die eigentliche Arbeit gemacht. Die Arbeit ist in Jobs aufgeteilt. Ein Job kann angefordert werden indem eine globale Variable auf einen bestimmten Wert gesetzt wird. do if DoJob1 = 1 then mache was auch immer die Aufgabe von Job1 ist DoJob1 = 0 end if if DoJob2 = 1 then mache was auch immer die Aufgabe von Job2 ist DoJob2 = 0 end if loop Jeder Job soll kurz sein. Zb. Eine Led einschalten. Wichtig: Eine Taste abfragen könnte ein Job sein, wird es aber normalerweise nicht sein. Benutzereingaben macht man meist so: Man benutzt einen Timer um sich eine Funktion regelmässig aufrufen zu lassen. In dieser Funktion (ja, das ist ein Interrupt Handler) wird dann zb. ein Taster ausgewertet. Je nachdem welcher Taster das ist, wird durch Setzen einer Job-Variablen von der Hauptschleife die Ausführung eines Jobs angefordert. In diesem Timer Interrupt könnte man aber auch eine Variable hochzählen lassen und eine JobVariable setzen, die im zugehörigen Job dann dafür sorgt, dass der Zähler als Intensität für eine LED genommen wird. Summa Summarum: In praktisch jedem Program hast du irgendeinen Timer im Einsatz, der mit einem seiner Interrupts für eine Zeitbasis im Programm sorgt. Den Rest besorgt dann die Hauptschleife.
Hallo Tugrul,
> Hmm hast du ne schnelle Lösung Otto ?
ich habe Dein post leider erst jetzt gelesen....
insgesamt möchte ich mich den Ausführungen von
"Karl heinz Buchegger" anschliessen.
Die "Kurzvariante" wäre:
nimm eine globale Variable als Timer und zähle
sie in der "do-Schleife" hoch:
timer = timer + 1
Frage in der Blinkroutine den Zustand ab und
verlasse sie sie dann sofort wieder.
if timer > x
Toggle Portb.0
endif
Gruss Otto
Hallo Otto, Ich habe das nicht so ganz verstanden.. Ich habe zuvor nicht mit den Timern gearbeitet... Muss mich mal darüber erkundigen damit nen Loch gestopft wird ^^. Danke euch beiden. MfG; Tugrul Ö.
Hallo Tugrul, in diesem Fall keinen "echten Timer" nur eine Variable hochzählen un die LED umschalten, wenn der Wert grösser eines bestimmten anderen ist. z. B. > 200 Da ich nicht weiß, wie schnell "BASCOM" ist, kann ich Dir über den genauen Wert keine Angabe geben. Otto
Hi, achso ! Ok ich glaub ich habs verstanden, ich werde das aber aus zeitlichen Gründen erst morgen versuchen. Wünsche euch beiden eine gute Nacht und einen guten Start in die Woche. MfG, Tugrul Ö.
Es ist zwar im Prinzip korrekt, dass jeder Portpin bis zu 40 mA treiben kann. Das ist aber nicht die komplette Wahrheit. Im Datenblatt ist zusätzlich ein Maximalstrom für alle Portpins zusammen angegeben, der nicht überschritten werden sollte. Der liegt beim Tiny2313 bei 60 mA. Deine LEDs ziehen aber insgesamt wesentlich mehr als diese 60 mA (siehe Fußnoten 4 und 5 unter den "DC Characteristics"). Zunächst wird der µC bei Überschreitung dieses Wertes zwar nicht kaputt gehen. Wenn Du aber noch ein wenig von dem Teil haben willst, dann solltest Du solche Lasten nicht direkt treiben. Gerade der Tiny2313 hat in der Hinsicht einen sehr geringen Grenzwert. Bei den größeren AVRs kann man mehr dranhängen...
Hallo ! a.) Geht der kaputt wenn ich noch 3 weitere oder mehr LED's dran mache ? Wird es dann zu extrem ? Kann ich eventuell nen Kühlkörper drauf packen ? b.) Gibt es möglichkeit das so zu regelt das dem Attiny nichts passiert ? Danke
Zu a.): Wie gesagt, Du bist mit der bisherigen Konfiguration schon über die Grenze hinaus. ATMEL garantiert einwandfreie Funktion nur innerhalb der "Test Conditions". Wenn Du noch mehr dranhängst, steigt die Gefahr, dass etwas kaputt geht. Zu b.): Ja, Du könntest entweder Low-Current-LEDs nehmen, die aber erheblich lichtschwächer sind (und ich weiß jetzt nicht, obs die auch in blau gibt) oder Du schaltest die LEDs über Transistoren.
Hallo Johnny ! Wie schalte ich die den über Transistoren ? Hättest du nen Schaltplan ? Hatte bisjetzt mit Transistoren nicht zu viel zu tun (was natürlich unglaublich ist, denn Transistoren sind ja das A und O in der Elektronik) MfG, Tugrul Ö.
Hallo Tugrul, nimm einen NPN - Transistor (z. B. BC107): + o---------+ I R Widerstand I V LED - I I/ Port -/\/\-I Transistor I> I I GND o---------+ Der hat 3 Anschlüsse: Basis Kollektor und Emitter. Mit der Basis steuerst Du den Transistor, die kommt über einen Widerstand von ca. 10k an den Port. Die LED kommt über den vorhandenen Vorwiderstand an + und die Kathode an den Kollektor. Und der Emitter des Transistors an Masse. Gruss Otto
Hallo Otto !! Danke dir !. Kann ich auch mehrere LED's an den Transistor parellel anschliessen ? Dann braucht ja jede LED nen eigenen Widerstand. Meine Zweite Frage ist, ob ich eine 9-12V Quelle für die Transistor nehmen kann. Muss ich dann aber die Masse dieser Quelle mit der Masse der Stromversorgung meiner Attiny Platine (5V) verinben ? Oder kann das auch unabhängig ablaufen. Ich dachte mehr an sowas: 12V o---------+ I R Widerstand I V LED - I I/ Port -/\/\-I Transistor I> I I GND o---------+ Reicht es aus wenn nur der Port an die BASIS angeschlossen wird ? oder muss die GND der 12V Quelle noch mit dem GND des Attinys angeschlossen werden bzw. mit der GND meines "GERÄTES". Ist eine noobige Frage, aber ich möchte meine Platine nicht samt Attiny zur Hölle befördern.
Hallo Tugrul, es muß der Port und die Masse der anderen Stromversorgung angeschlossen werden, denn andernfalls kann kein Strom in die Basis fliessen. Die Höhe der Betriebsspannung ist unkritisch aber übertreibe es nicht, denn der Transistor hat eine "Maximalspannung". Aber 9-12V sind kein Problem. Du kannst die LED in Reihe (mit einem Vorwiderstand) R = (Ub - Uled1 - Uled2 - Uled3) / I also bei 3 gleichen grünen LED z. B.: R = (12V-6V) / 0,015A = 400 Ohm oder parallel (mit JE einem Vorwiderstand schalten). R = (Ub - Uled) / I Beachte aber den Maximalstrom des Transistors. Gruss Otto
Hallo Otto. Ja das der Port angeschlossen werden muss war mir klar, habe es nur sehr schlecht ausgedrückt. Ich hatte gedacht, dass man die Masse 2. verschiedener Stromquellen nicht zusamm schliessen darf. Also kann ich ruhig die Masse der 12V Quelle mit der Masse der Attiny Platte verbinden. Nur gillt das für alle Massen ? Kann ich auch die Masse einer 50V Quelle an die Masse des Attinys anschliessen und es würde nichts passieren ? (Also die Masse des Attinys ist ja die Masse der 5V Stromversorgung ^^). Danke für deine ausführliche Beschreibung. Ich habe noch so viel zu lernen, aber eines Tages werde ich auch so gut wie du bzw. die anderen.. eines Tages.... g MfG, Tugrul Ö.
Hallo Tugrul, im Prinzip kannst Du die Masse jeder (galvanisch getrennten) Stromquelle mit der Masse des Controllers verbinden. Nur solltest Du dabei immer berücksichtigen, was: a) im Normalbetrieb a) im Fehlerfall alles so passieren kann. a) So können z. B. durch das Schalten induktiver Lasten Rückwirkungen entstehen, die bei falscher Beschaltung Deinen Controller "killen". b) Spannungen über 60V sind keine Kleinspannung mehr und u. U. lebensgefährlich - haben somit also nichts an einem "Versuchsaufbau" zu suchen. Arbeite mit 9-12V und es wird nichts schlimmes passieren, es sei denn Du holst 12V unabgesichert aus einem Autoakku..... Gruss Otto
Hallo Otto ! Ja ich bin schon vorsichtig ^^ ich weiß was gefährlich ist nur habe ich so aus Neugier gefragt, desweiteren wollte ich wissen wie ich so eine Rückwirkung verhindern kann ? mit der Diode ?. Wie kann ich mich da absichern. Und zu dem Autoakku wollte ich sowiese schon nachfragen, ich möchte eventuell für einen guten Freund was in sein Auto bauen. Er soll seine LEDs per FB fernsteuern. Wie kann ich den diese Spannung im Autoakku absichern ? Ein Spannungsregler ? (7812 ?) Danke dir. ! MfG, Tugrul Ö.
Im Auto ist alles etwas komplizierter, da das KFZ-Bordnetz stark verseucht ist. Durch hohe (150 V) Spannungsspitzen durch den Anlasser z.B. Da brauchst Du noch extra Schutzschaltungen, Dein 7812 wird da denk ich mal nicht überleben. Mehr kann ich Dir dazu nicht sagen, weil ich mich selber nicht so gut auskenn. Benutz mal die Suchfunktion, wurde schon öfter darüber geredet. Hier steht aus bischen was dazu: http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.23
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.