Forum: Mikrocontroller und Digitale Elektronik Dual LED an ATTiny 2313


von Sandro L. (sandro_l)


Angehängte Dateien:

Lesenswert?

Hallo.

Wie im Anhang zu erkennen, habe ich 3 dual LEDs von Reichelt 
(http://www.reichelt.de/DUO-LEDs-Blink-LEDs/LED-3-RG/3/index.html?;ACTION=3;LA=5011;GROUP=A5335;GROUPID=3022;ARTICLE=10229;OFFSET=1000;SORT=artnr) 
mit je einem 270 Ohm Widerstand an den ATTiny 2313 angeschlossen.

Zum testen habe ich mit dem folgenden Programm versucht, eine LED zum 
leuchten zu bringen.
1
#include <avr/io.h>
2
3
int main(void)
4
{
5
DDRD = ~(1<<PD4);
6
DDRB |= (1<<PB5);
7
PORTB |= (1<<PB5);
8
return 0;
9
}

Weil es nicht funktioniert hat, habe ich einen Testaufbau mit 2 
low-current entgegengesetzt parallel geschalteten LEDs aufgebaut. Dort 
leuchtet die LED nur, wenn ich folgendes Programm verwende:
1
#include <avr/io.h>
2
3
int main(void)
4
{
5
DDRD = (1<<PD4); // ?PD4 als Ausgang?
6
DDRB |= (1<<PB5);
7
PORTB |= (1<<PB5);
8
return 0;
9
}

Wenn ich es dann mit der Dual LED versuche, leuchtet immer noch nichts.
Am Strombedarf der Dual LED kann es nicht liegen, denn sie braucht nur 
9.93 mA und sie leuchtet, wenn man sie direkt an 5V anschliesst. Auch 
der ATTiny kann nicht defekt sein, denn ich habe auch einen anderen 
ausprobiert, mit dem gleichen Ergebnis.

Wenn ich im Versuchsaufbau das erste Programm auf den ATTiny lade und 
die LED dann mit GND statt mit PD4 verbinde, leuchtet die LED im 
Testaufbau, wie sie sollte.

Woran könnte das liegen?

Vielen Dank im Voraus.

von Düsendieb (Gast)


Lesenswert?

Auch Port D muss ein Ausgang sein

DDRD=0xff;

von Eumel (Gast)


Lesenswert?

Was macht dein Controller nach main?

von Sandro L. (sandro_l)


Lesenswert?

Im Moment noch nichts... Ich wollte erst mal damit beginnen, dass die 
Anzeige funktioniert. Schlussendlich soll es bei einer Modellbau 
Fernsteuerung über einen Kanal 10 verschiedene Zustände von 
Kippschaltern übertragen.

von Eumel (Gast)


Lesenswert?

Muss man da nicht eine endlosschleife Einbauen?
Dein Controller kann nicht nichts machen.

von Sandro L. (sandro_l)


Lesenswert?

Düsendieb schrieb:
> Auch Port D muss ein Ausgang sein
>
> DDRD=0xff;

Warum muss er auch ein Ausgang sein? Kannst du mir das erläutern?

von Sandro L. (sandro_l)


Lesenswert?

Eumel schrieb:
> Muss man da nicht eine endlosschleife Einbauen?
> Dein Controller kann nicht nichts machen.

Stimmt. Hab jetzt mal eine Endlosschleife eingebaut. Das Ergebnis ist 
aber immer noch das selbe.

von Eumel (Gast)


Lesenswert?

Ich glaube, du musst dir mal anschauen was Eingänge und Ausgänge bei 
einem Controller bedeuten :)
Tipp: Eingänge sind immer hochohmig!

von Karl H. (kbuchegg)


Lesenswert?

Sandro L. schrieb:
> Düsendieb schrieb:
>> Auch Port D muss ein Ausgang sein
>>
>> DDRD=0xff;
>
> Warum muss er auch ein Ausgang sein? Kannst du mir das erläutern?


Deine Vorstellung davon, was ein 'Ausgang' macht und was ein 'Eingang' 
mchat ist falsch.

Du hast die LED an einem Pin an einem 'Ausgang' angeschlossen und den 
anderen an einen 'Eingang'. Deine Vorstellung war: Der Strom kommt aus 
dem Ausgang raus, rinnt durch die LED und läuft dann wieder in den 
Eingang hinein. Damit ist der Stromkreis geschlossen und die LED 
leuchtet.

Das stimmt aber nicht.
Sieh einen Eingang mehr als "Fühler" an. Er stellt fest, ob an seinem 
Pin Spannung anliegt oder nicht. Aber (im Idealfall) rinnt da weder 
Strom rein noch raus.

Genauso musst du deine Vorstellung eines 'Ausgangs' revidieren.
Einen Ausgang kannst du dir als Schalter mit 2 Stellungen vorstellen, 
den du Programmgesteuert umstellen kannst. Entweder der Pin ist dann 
nach Vcc (also der + Spannung) durchgeschaltet, oder er ist nach Masse 
durchgeschaltet.


 2 Ausgänge
                       Vcc
                        |      Pin
           Steuerung     \------o-------------+
           des einen    .                     |
           Pins         |                     |
       Pin auf '1'     GND                  LED
                                              |
                                              |
                                              |
                       Vcc                    |
                        |                     |
                        .                     |
          Steuerung      /------o-------------+
          des anderen   |      Pin
          Pins         GND
       Pin auf '0'


Beide Pins sind als Ausgang geschaltet. Der eine Ausgang verbindet 
seinen Pin mit Vcc, der andere mit Masse. Dadurch hast du eine 
geschlossene Verbindung Vcc-LED-Masse und die LED leuchtet.

Ein Eingang ist wie ein Fühler. Wie dein Voltmeter, wenn du so willst.
Wenn du einen Aufbau machst:
von VCC zur LED und das andere Ende der LED lässt du in der Luft 
baumeln, dann erwartest du auch nicht, dass die LED leuchtet. Selbst 
dann wenn du mit einem Voltmeter am freien Ende der LED versuchst die 
Spannung zu messen und so (über das Voltmeter) eine Verbindung zur Masse 
herstellst erwartest du nicht, dass die LED leuchtet. Ein Voltmeter, 
genauso wie ein Eingang im µC, lässt zwar einen winzig kleinen Strom 
durch, aber das reicht noch lange nicht, dass die LED leuchten würde.


                VCC
                 |
                 |
                LED
                 |           rotes Kabel
                 |<-------------------+
                 |                    |
             baumelt frei          Voltmeter
                                      | schwarzes Kabel
                                    Masse



Also. Fazit:
Pin als Ausgang - du bestimmst ob mit Vcc oder mit GND verbunden
                  (1 oder 0)
Pin als Eingang - der Pin ist ein Messgerät

von Eumel (Gast)


Lesenswert?

Karl Heinz hats super erklärt!
Dafür: Daumen hoch!

von Thomas E. (thomase)


Lesenswert?

Sandro L. schrieb:
> Warum muss er auch ein Ausgang sein? Kannst du mir das erläutern?
Hast du doch schon selbst festgestellt:

> die LED dann mit GND statt mit PD4 verbinde, leuchtet die LED im
> Testaufbau, wie sie sollte.

Der Port ist als Eingang hochohmig. Auch wenn er 0 ist, muß er als 
Ausgang geschaltet sein, damit der Strom "reinfliessen" kann.

mfg.

von Karl-Heinz (Gast)


Angehängte Dateien:

Lesenswert?

Hi Sandro L.,

Hier ist mal ein Beispiel Programm.

von Sandro L. (sandro_l)


Lesenswert?

Die Erklärung von Karl Heinz ist sehr verständlich und nachvollziehbar! 
Danke!

Im Testaufbau mit den Low-current LEDs funktioniert es jetzt auch 
einwandfrei. Nur mit der Dual LED gehts immer noch nicht. Ich habe keine 
Ahnung, was da anders sein sollte, ausser dass 2 LEDs in einer verpackt 
sind.

von Karl H. (kbuchegg)


Lesenswert?

Und wie sieht dein Programm jetzt aus?

von Sandro L. (sandro_l)


Lesenswert?

Hier mein jetziges Programm:
1
#include <avr/io.h>
2
int main(void)
3
{
4
DDRD = (1<<PD4);
5
6
DDRB |= (1<<PB5);
7
PORTB |= (1<<PB5);
8
9
while(0);
10
return 0;
11
}

von Martin S. (tungl)


Lesenswert?

Unabhaengig vom Rest: while(0); ist keine Endlosschleife, da "0" immer 
"falsch" ist. Also wenn, dann: while(1);

von Sandro L. (sandro_l)


Lesenswert?

Martin S. schrieb:
> Unabhaengig vom Rest: while(0); ist keine Endlosschleife, da "0" immer
> "falsch" ist. Also wenn, dann: while(1);

Oh, ja klar! Das hätte ich eigentlich wissen sollen. Nur funktioniert es 
immer noch nur bei den Low-current LEDs und bei der dual LED nicht.

von Karl H. (kbuchegg)


Lesenswert?

Sandro L. schrieb:
> Martin S. schrieb:
>> Unabhaengig vom Rest: while(0); ist keine Endlosschleife, da "0" immer
>> "falsch" ist. Also wenn, dann: while(1);
>
> Oh, ja klar! Das hätte ich eigentlich wissen sollen. Nur funktioniert es
> immer noch nur bei den Low-current LEDs und bei der dual LED nicht.

Dann nimm dir mal ein Voltmeter und miss die Spannung an den Pins nach.

Und: Nicht kleckern, klotzen
1
int main()
2
{
3
  DDRA = 0xFF;
4
  DDRD = 0xFF;
5
6
  DDRB = 0xFF;
7
8
9
  PORTB = 0xFF;
10
  PORTD = 0x00;
11
  PORTA = 0x00;
12
13
  while( 1 )
14
    ;
15
}

von Karl H. (kbuchegg)


Lesenswert?

Was wird das eigentlich mit dem Pin PA0 (links)?

Wieso hast du den mit GND verbunden? Willst du den absichtlich zum 
Erzeugen eines Kurzschlusses benutzen können?

-> Vorsicht. Wenn du auf Port A ausgibst. Der Pin muss immer 0 bleiben!

von Sandro L. (sandro_l)


Lesenswert?

Für diesen Pin habe ich keine Funktion. Im Nachhinein denke ich, wäre es 
besser gewesen, diesen in der Luft zu lassen. Das mit dem Kurzschluss 
habe ich gar nicht bedacht. Gut, dass du es bemerkt hast.

Ich glaube, ich habe den Fehler gefunden, warum es nicht funktioniert. 
Wenn ich an den Pins VCC und GND des ATTinys die Spannung messe, habe 
ich beim Testaufbau wie erwartet die 5V bei der Anwendung habe ich, wenn 
ich beim Sockel direkt messe, auch die 5 V, jedoch an den Beinen des 
Controllers nur 0.5V. Dort wird der Kontakt nicht richtig hergestellt. 
Der Sockel im Testaufbau ist vergoldet, der andere nicht. Wie könnte ich 
besseren Kontakt bekommen? Der Sockel ist dieser hier: 
http://www.reichelt.de/IC-Sockel/GS-KO-20P/3/index.html?;ACTION=3;LA=5011;GROUP=C131;GROUPID=3215;ARTICLE=8235;OFFSET=1000;SORT=artnr

von Karl H. (kbuchegg)


Lesenswert?

Sandro L. schrieb:

> ich beim Testaufbau wie erwartet die 5V bei der Anwendung habe ich, wenn
> ich beim Sockel direkt messe, auch die 5 V, jedoch an den Beinen des
> Controllers nur 0.5V. Dort wird der Kontakt nicht richtig hergestellt.
> Der Sockel im Testaufbau ist vergoldet, der andere nicht. Wie könnte ich
> besseren Kontakt bekommen?


* enweder die Kontakte sind ein wenig korrodiert.
  -> den µC ein paar mal rausnehmen und wieder reinstecken
     beim reinstecken auch wirklich reinstecken! ruhig
     mal ein wenig kräftiger draufrücken

* oder du hast eine ganz banale kalte Lötstelle.

von Sandro L. (sandro_l)


Lesenswert?

Kalte Lötstellen fallen schon mal weg, denn ich habe ja 5V, wenn ich 
beim Sockel direkt messe, sprich die Messkabel in den Sockel stecke. 
Auch nach einigem rein und raus nehmen des ICs habe ich immer noch genau 
die selbe Spannung am IC. Gibt es noch eine andere Möglichkeit oder soll 
ich den Sockel ersetzen?

von Karl H. (kbuchegg)


Lesenswert?

Sandro L. schrieb:
> Kalte Lötstellen fallen schon mal weg, denn ich habe ja 5V, wenn ich
> beim Sockel direkt messe, sprich die Messkabel in den Sockel stecke.

Ah, ok.
Ich wusste nicht, ob du vom Kelch sprichst oder von der Lötstelle 
Sockel/Platine.
Das heißt deshalb noch lange nicht, dass die Lötstelle nicht doch 
lauwarm sein kann. Solange kein µC im Sockel steckt, muss auch kein 
Strom über die Löststelle - kein Spannungsabfall. Zieht der µC dann 
Strom, fällt an der Lötstelle die Spannung plötzlich ab.

> Auch nach einigem rein und raus nehmen des ICs habe ich immer noch genau
> die selbe Spannung am IC. Gibt es noch eine andere Möglichkeit oder soll
> ich den Sockel ersetzen?

Was misst du, wenn du den µC im Sockel hast

* direkt am µC Pin
* an der Lötstelle Sockel/Platine

sind die beiden Spannungen unterschiedlich, dann hast du ein 
Kontaktproblem im Sockel. Lässt sich zb so feststellen, dass du einfach 
mal mit einem Stückchen Draht von Vcc eine zusätzliche Freiluftleitung 
direkt auf den Vcc Pin vom µC ziehst.

Sind die beiden aber gleich (und ich vermute mal, das das so ist), dann 
geht die Suche weiter.

Steckt der µC richtig rum im Sockel?
Hast du Abblockkondensatoren verbaut?
Bricht die Spannungsversorgung isgesammt ein?
Wie ist die Versorgung aufgebaut?
Sonst irgendwo ein Kurzschluss auf der Platine?
...

von Karl H. (kbuchegg)


Lesenswert?

Was mir noch einfällt.
Konzentrier dich nicht nur auf die Vcc!
Auch eine schlechte Masseverbindung kann ähnliches hervorrufen.

von Sandro L. (sandro_l)


Lesenswert?

Du hast recht. Die Spannung ist gleich. Die Spannung fällt also überall 
auf 0.7V ab.
Ein Abblockkondensator ist im Sockel integriert. Die ganze Platine wird 
von der Modellbaufernsteuerung aus einem NiCd Akku versorgt.

Könnte der Pin PA0 den Kurzschluss verursachen, weil er direkt auf GND 
gelegt ist? Soll ich ihn von GND trennen und in der Luft lassen?

von Karl H. (kbuchegg)


Lesenswert?

Sandro L. schrieb:

> Könnte der Pin PA0 den Kurzschluss verursachen, weil er direkt auf GND
> gelegt ist?

Solange du den Pin nicht ansprichst, ist er Eingang und da macht die 
Verbdindung nichts aus.

> Soll ich ihn von GND trennen und in der Luft lassen?

erst mal trennen.
ist eine potentielle Fehlerquelle, wenn auch nicht jetzt.

Wie hoch ist die Stromaufnahme der Schaltung?

von Karl H. (kbuchegg)


Lesenswert?

Was mir noch einfällt.
Was ist mit der Spannung, wenn der µC nicht im Sockel ist?

(Das würde schon mal einen Hinweis darauf geben, ob irgendwo auf der 
Platine sonst ein Kurzschluss sein Unwesen treibt)

von Karl H. (kbuchegg)


Lesenswert?

:-)
Der Akku ist aber nicht zufällig leer?
(Nicht lachen. Hatte ich bei mir auch schon mal. Man soll nie irgendwas 
ausschliessen, solange man es nicht geprüft hat :-)

von Sandro L. (sandro_l)


Lesenswert?

So, habe die Pads mal von GND getrennt. Jetzt nimmt die Schaltung 0.3µA 
auf. Der Akku ist voll geladen und wenn der µC nicht im Sockel ist, 
fällt die Spannung nicht zusammen.

von Sandro L. (sandro_l)


Lesenswert?

Hab die Platine jetzt einmal mit den 5V vom Computer betrieben. Und 
siehe da! Es funktioniert. Liegt wohl an der Stromversorgung der 
Fernsteuerung.

von Sandro L. (sandro_l)


Lesenswert?

Nochmals vielen Dank an die vielen Beiträge und die tollen Erklärungen!

Ich werde einen separaten Spannungsregler einbauen, damit die Spannung 
nicht zusammenfällt.

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.