Forum: Mikrocontroller und Digitale Elektronik Problem mit ATtiny85 Analoger Eingang / Digitaler Ausgang


von Sven F. (svenf123)


Angehängte Dateien:

Lesenswert?

Hallo liebe Community!

Ich habe ein kleines Problem mit meinem ATtiny85 (mit Arduino IDE):

1.) Den ATtiny versorge ich mit 5V und an Pin 6 hängt eine LED. Ein 
einfacher Blink-Sketch läuft ohne Probleme: Die LED geht an und aus, 
genauso wie sie soll.
2.) Jetzt soll die LED erst leuchten, wenn es dunkel ist. Daher habe ich 
einen Fotowiderstand auf einen analogen Inputpin gelegt (Pin 2 am 
ATtiny).
Pin5 bekommt 5V als Versorgungsspannung/Referenzspannung für die 
analogen Inputs.
3.) Das Programm läuft genau so wie es laufen soll: Ist es dunkel geht 
der digitale Pin auf HIGH. ABER: Die LED leuchtet nur sehr schwach... 
Der µC treibt auf einmal kaum noch einen Strom?!? Damit die LED leuchtet 
musste ich einen npn-Transistor als Verstärker zwischenschalten...

Bisher habe ich keine Erklärung auf dieses Phänomen und im Internet 
finde ich dazu auch nichts
Ist das normal oder habe ich etwas übersehen?

von Max H. (hartl192)


Lesenswert?

Sven Fießer schrieb:
> habe ich etwas übersehen?
Der Transistor hätte gerne einen Basiswiderstand und die LED einen 
Vorwiderstand.

Zeig mal deinen Quellcode.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

In diesem Fall kannst du die LED auch mit einem 180-330 Ohm 
Vorwiderstand direkt an den MC hängen, wenns eine rote, grüne oder gelbe 
ist.

von Christian J. (Gast)


Lesenswert?

Sven Fießer schrieb:
> ABER: Die LED leuchtet nur sehr schwach...

Erstens:

1) Du benutz eine Arduino IDE um den zu programmieren
2) Eine LED braucht keinen Transistor zu Ansteuerung
3) Da fehlen die Widerstände -> Korrigieren! LED an Pin, davor 560 Ohm 
oder so.
4) Von rechts wegen gehört an den LDR eigentlich auch noch ein C zur 
Glättung und Pufferung, da Analogeingänge nicht 1Meg haben sondern ca 
100kOhm.
5) Wozu braucht Pin 5 eine Referenzspannung/Versorungsspannung? Weg 
damit.

Dann wir es wohl daran liegen, dass Du den LED Ausgang mit einem 
"analogen Befehl gesetzt hast". Das kenne ich nämlich, dann glimmen die 
LED nur so an den Analogpins. Denk dran, dass Digitalpins mit nur der 
Nummer angesteuert werden, Analog Pins mit einem "A".

Und falls Du diese Library für die Attinys aus dem Netz benutzt... die 
sind nicht unbedingt Fehlerfrei. Die für den Atmega1284 musste ich auch 
erst pinmässig korrigieren, weil der die "A" Pins einfach vergessen 
hatte.

Tip: Lass den Arduinokram bei sowas einfachem weg.

von Karl M. (Gast)


Lesenswert?

Hallo,

da ist auch noch mehr im Argen, RESET mit Pullup, Vcc - GND 100nF.
Warum ist PB0 beschaltet ?
Schau mal ins Datenblatt des Tins85, da findet man auch die passenden 
ADC Referenzwerte.

von Christian J. (Gast)


Lesenswert?

Reset braucht keinen PU. Reset kann man weg-fusen bei diesen Winzlingen.

Guckst du hier:

http://fc04.deviantart.net/fs70/f/2013/038/3/7/attiny_web_by_pighixxx-d5u4aur.png

von Sven F. (svenf123)


Lesenswert?

Hallo,

1.) Vorwiderstand und Basiswiderstand habe ich getrost weggelassen. So 
funktioniert es wie es soll (auch wenn es nicht richtig ist).

2.) PullUp braucht man für den tiny nicht. Schrieb auch hobel bereits.

3.) Aref wird auch benötigt (an PB0). Siehe Kommentar "Runaway Pancake":
http://forum.arduino.cc/index.php?topic=90297.0

4.) Lege ich die LED direkt an den digitalen Pin (OHNE analog in) 
leuchtet die LED wunderbar. Schalte ich den analogen Pin dazu, glimmt 
die LED nur noch ganz leicht. Deshalb die Transistorstufe.

5.) Mein Code:

int var;
int licht;

void setup() {
  pinMode(1, OUTPUT);
  pinMode(4, INPUT);
}

void loop()
{
  licht = analogRead(3);
  var = digitalRead(4);

  if (var != 0 && licht > 500)
  {
  digitalWrite(1, HIGH);
  delay(5000);
  }
  else
  {
  digitalWrite(1, LOW);
  }
}

von weekend (Gast)


Lesenswert?

Sven Fießer schrieb:
> 1.) Vorwiderstand und Basiswiderstand habe ich getrost weggelassen. So
> funktioniert es wie es soll (auch wenn es nicht richtig ist).

Kann ich auch bei Arduino mitmachen :)

von H.Joachim S. (crazyhorse)


Lesenswert?

Jo, soll er mal getrost weitermachen....
Warum hast du denn dem Fotowiderstand einen Vorwiderstand gegönnt? Den 
kann man auch getrost weglassen. Überhaupt sind Widerstände völlig 
sinnlose Bauteile, braucht kein Mensch.

von Daniel S. (daniel_s49)


Lesenswert?

Sven Fießer schrieb:
> var = digitalRead(4);
>
>   if (var != 0 &&

In deinem Schaltplan oben ist PB4 unbeschaltet. Damit wäre var 
potenziell zufällig und dein if mal erfüllt und mal nicht.


Sven Fießer schrieb:
> 1.) Vorwiderstand und Basiswiderstand habe ich getrost weggelassen. So
> funktioniert es wie es soll (auch wenn es nicht richtig ist).

Vorwiderstand kann man eventuell weglassen, aber vielleicht hat es ja 
einen Grund, dass jeder so ein Ding empfielt. Würde mich stutzig machen 
;-)
Den Basiswiderstand kannst du nicht weglassen

von Sven F. (svenf123)


Lesenswert?

Danke für diese große Hilfe. Auf dumme Kommentare kann ich auch 
verzichten

von Sven F. (svenf123)


Lesenswert?

Daniel S. schrieb:
> Sven Fießer schrieb:
>> var = digitalRead(4);
>>
>>   if (var != 0 &&
>
> In deinem Schaltplan oben ist PB4 unbeschaltet. Damit wäre var
> potenziell zufällig und dein if mal erfüllt und mal nicht.
>
PB4 ist bei mir beschalten. Habe ich nur in diesem Bild weggelassen.
>
> Sven Fießer schrieb:
>> 1.) Vorwiderstand und Basiswiderstand habe ich getrost weggelassen. So
>> funktioniert es wie es soll (auch wenn es nicht richtig ist).
>
> Vorwiderstand kann man eventuell weglassen, aber vielleicht hat es ja
> einen Grund, dass jeder so ein Ding empfielt. Würde mich stutzig machen
> ;-)
> Den Basiswiderstand kannst du nicht weglassen


Ist der analoge Pin dazugeschalten, treibt der digitale Ausgang sehr 
kleine Ströme. Nicht einmal 15mA! Daher glimmt auch nur die LED, wenn 
ich sie direkt an den Pin hänge. Daher ist auch kein Basiswiderstand 
vorhanden.

Den Vorwiderstand habe ich nur aus Einfachkeit weggelassen. Ich versorge 
die Schaltung mit einer Batterie, die kaum Strom liefert, daher ist auch 
die LED bisher abgeraucht.

Aber das einzige, das ich bisher lese ist, dass die Widerstände fehlen. 
Das ist hier vollkommen irrelevant für mein Problem.
Der digitale Ausgang soll, wenn der analoge Eingang dazugeschalten ist, 
funktionieren als wäre kein analoger Eingang dabei.

von spess53 (Gast)


Lesenswert?

Hi

>Aber das einzige, das ich bisher lese ist, dass die Widerstände fehlen.
>Das ist hier vollkommen irrelevant für mein Problem.

Wenn alles hier gesagte angeblich irrelevant ist, warum funktioniert 
dein Scheiß dann nicht richtig?

MfG Spess

von Sven F. (svenf123)


Lesenswert?

spess53 schrieb:
> Hi
>
>>Aber das einzige, das ich bisher lese ist, dass die Widerstände fehlen.
>>Das ist hier vollkommen irrelevant für mein Problem.
>
> Wenn alles hier gesagte angeblich irrelevant ist, warum funktioniert
> dein Scheiß dann nicht richtig?
>
> MfG Spess

Der Transistor ist NICHT mein Problem.

Nochmal von vorne. Die Schaltung:

NUR Vcc/GND und die LED (direkt am digitalen Ausgang) hängen an dem µC: 
Die LED leuchtet genau so wie sie soll.

Nun kommt der analoge Eingang dazu (mit Vref): Jetzt glimmt die LED 
nurnoch, da der µC nur einen sehr kleinen Strom treibt.

DAS ist mein Problem. Das mit dem Transistor war nur eine Notlösung 
(nicht relevant).

von Sven F. (svenf123)


Lesenswert?

Max Mustermann schrieb im Beitrag #4138503:
> Sven F. schrieb:
>> das einzige, das ich bisher lese ist, dass die Widerstände fehlen.
>> Das ist hier vollkommen irrelevant für mein Problem.
>
> Wenn du sogenau weist was für DEIN PROBLEM relevant ist, warum must du
> dann hier fragen?
>
> Solche Spinner mit einem unvollständigen Schaltplan, ohne Code und ohne
> Bild von ihrer verbratenen Schaltung schlagen hier min. einer am Tag
> auf.

Der Schaltplan ist für die Problembeschreibung vollständig.

Der Code funktioniert, da das selbe Programm auf dem Arduino Uno ohne 
Probleme läuft.
Nur der Umzug auf den ATtiny will nicht richtig funktionieren (die Pins 
sind richtig deklariert und auch richtig beschalten).

: Bearbeitet durch User
von weekend (Gast)


Lesenswert?

Ich trau es mich ja nicht zu sagen: Es fehlt noch Abblockkondensator. 
Ich kann keine Hysterese im Code erkennen. Mit den Batterien und starkem 
Strom durch den Transistor beim Schalten (ich blick nicht durch, ob der 
Basiswiderstand nu drin ist und nur auf dem Plan fehlt) fängt doch da 
bestimmt was an zu schwingen ... ?

von Christian J. (Gast)


Lesenswert?

Sven F. schrieb:

> Daher ist auch kein Basiswiderstand
> vorhanden.
>
> Den Vorwiderstand habe ich nur aus Einfachkeit weggelassen.

Hast Du eigentlich gelesen, was ich geschrieben habe? Aufmerksam, was 
der alte Knacker so schreibt? Ich habe das mal eben mit dem  Attiny84 
zusammen gesteckt ... läuft einwandfrei mit meinem 5-Zeiler. Aber wenn 
du alles besser weisst, dann komm auch selbst drauf, warum das bei dir 
nicht läuft. Ich brauche übrigens kein Vcc an Aref, da kommt was anderes 
dran.

>>Nun kommt der analoge Eingang dazu (mit Vref): Jetzt glimmt die LED
>>nurnoch, da der µC nur einen sehr kleinen Strom treibt.

Jo, ist mir klar warum das so ist...

>>Der Code funktioniert, da das selbe Programm auf dem Arduino Uno ohne
>>Probleme läuft.

Dann guck dir mal den Schaltplan, was da anders ist .... und der Uno 
bedient sich der eigenen Libraries, der Attiny85 aber hat 
"selbstgestrickte", die keinesfalls fehlerfrei sind, wie man an den 
Kommentaren im Quellcode lesen kann.

>>licht = analogRead(3);

Da würd ich mal drüber nachdenken ..... das ist nämlich falsch. Und wenn 
man sich mal die Implementierung von analogRead anschaut, dann sieht man 
auch warum. Klar, dass die glimmt, ich würde auch glimmen, wenn ich 
hundertausend Mal die Sekunde eines vor den Kopf bekommen würde.

von Sven F. (svenf123)


Lesenswert?

Christian J. schrieb:

>
>>>Nun kommt der analoge Eingang dazu (mit Vref): Jetzt glimmt die LED
>>>nurnoch, da der µC nur einen sehr kleinen Strom treibt.
>
> Jo, ist mir klar warum das so ist...
>
>
>>>licht = analogRead(3);
>
> Da würd ich mal drüber nachdenken ..... das ist nämlich falsch. Und wenn
> man sich mal die Implementierung von analogRead anschaut, dann sieht man
> auch warum. Klar, dass die glimmt, ich würde auch glimmen, wenn ich
> hundertausend Mal die Sekunde eines vor den Kopf bekommen würde.

Danke. Das Problem ist gelöst. Habe eben die Schalutung neu aufgebaut 
(ohne Vref) und es funktioniert wie es soll. Da habe ich im Arduino 
Forrum anscheinend Stuss gelesen.

licht = analogRead(3); ist doch richtig? Er macht was er soll?

von Christian J. (Gast)


Lesenswert?

licht = analogRead(A3);

Das "A" nicht vergessen !!!!! analogRead ist ein Macro, dass erst die 
Pins umschlüsselt. Und A3 ist was anderes als D3. Siehe Bild was ich 
gepostet habe. Arduino hat da seine eigene Logik.

von Andreas H. (ahz)


Lesenswert?

spess53 schrieb:
>>Aber das einzige, das ich bisher lese ist, dass die Widerstände fehlen.
>>Das ist hier vollkommen irrelevant für mein Problem.
>
> Wenn alles hier gesagte angeblich irrelevant ist, warum funktioniert
> dein Scheiß dann nicht richtig?

YMMD :-D

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.