Dual LED an ATTiny 2313

OP #2860191
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.
Angehängte Dateien:
#2860234
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
#2860303
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
}
OP #2860336
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
#2860353
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.
OP #2860464
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?
#2860475
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?
...
OP #2860499
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?
#2860523
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren