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,
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.
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 ^^.
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