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
intmain(void)
4
{
5
DDRD=(1<<PD4);// ?PD4 als Ausgang?
6
DDRB|=(1<<PB5);
7
PORTB|=(1<<PB5);
8
return0;
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.
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.
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.
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
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.
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.
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.
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
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!
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
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.
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?
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?
...
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?
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?
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)
:-)
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 :-)
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.
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.