Forum: Mikrocontroller und Digitale Elektronik 2. Fragen (Attiny 2313 und Bascom)


von Tugrul Ö. (Gast)


Angehängte Dateien:

Lesenswert?

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 Ö.

von Otto (Gast)


Lesenswert?

Hallo Tugrul,

welchen Wert haben Deine Widerstände ?

Gruss Otto

von Otto (Gast)


Lesenswert?

und die "Sub blinken" ist innerhalb "Do loop"

Otto

von Tugrul Ö. (Gast)


Lesenswert?

Hallo Otto,

Ich habe mir schon gedacht das du gleich Antwortest ;).

Die Widerstände haben einen Wert von 180 Ohm.

MfG,

Tugrul Ö.

von Otto (Gast)


Lesenswert?

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

von Tugrul Ö. (Gast)


Lesenswert?

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 Ö.

von Otto (Gast)


Lesenswert?

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

von Tugrul Ö. (Gast)


Lesenswert?

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.

von Otto (Gast)


Lesenswert?

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

von Tugrul Ö. (Gast)


Lesenswert?

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

von Tugrul Ö. (Gast)


Lesenswert?

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


von Otto (Gast)


Lesenswert?

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

von Tugrul Ö. (Gast)


Lesenswert?

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 !

von Tugrul Ö. (Gast)


Lesenswert?

Hmm hast du ne schnelle Lösung Otto ?

von Karl H. (kbuchegg)


Lesenswert?

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.

von Tugrul Ö. (Gast)


Lesenswert?

Aha...

von Otto (Gast)


Lesenswert?

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

von Tugrul Ö. (Gast)


Lesenswert?

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 Ö.

von Otto (Gast)


Lesenswert?

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

von Tugrul Ö. (Gast)


Lesenswert?

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 Ö.

von johnny.m (Gast)


Lesenswert?

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

von Tugrul Ö. (Gast)


Lesenswert?

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

von johnny.m (Gast)


Lesenswert?

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.

von Tugrul Ö. (Gast)


Lesenswert?

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 Ö.

von Otto (Gast)


Lesenswert?

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


von Tugrul Ö. (Gast)


Lesenswert?

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.

von Otto (Gast)


Lesenswert?

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

von Tugrul Ö. (Gast)


Lesenswert?

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 Ö.

von Otto (Gast)


Lesenswert?

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

von Tugrul Ö. (Gast)


Lesenswert?

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 Ö.

von Dennis (Gast)


Lesenswert?

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