AVR Attiny85 - unterschiedliche Ausgangsspannungen - Newby

#6748328
Lesenswert?

Moin!
Ich hab mal wieder meine µC Bastelkiste herausgeholt und auch ein paar 
Erfolge verbuchen können ;-)
Ich habe rudimentäre Grundkenntnisse, bin jetzt aber auf ein "Phänomen" 
gestoßen, welches ich mir erstmal nicht wirklich erklären kann.

Ich möchte mit dem Attiny85 "Stand-Alone" ein Relais mit Zeitsteuerung 
ansteuern. Bei Tasterdruck wird für 9sek. das Relais angesteuert.
Über zwei LEDs soll der "Status" angezeigt werden. Die LEDs sind nach 
"Charlie-Plexing" Manier an zwei PINs (0, 1) angeschlossen.

Der Code sieht so aus:
1
int LEDrot=1;
2
const int relaisIN1 = 4;
3
int taster=3;
4
int LEDweiss=0;
5
int tasterstatus=0;
6

7
void setup()
8
{
9
pinMode(LEDrot, OUTPUT);
10
pinMode(LEDweiss, OUTPUT);
11
pinMode(relaisIN1, OUTPUT);
12
pinMode(taster, INPUT);
13
digitalWrite(relaisIN1, HIGH);
14
digitalWrite(LEDrot, HIGH);
15
digitalWrite(LEDweiss, LOW);
16
}
17

18
void loop()
19
{
20
// digitalWrite(relaisIN1, HIGH);
21
tasterstatus=digitalRead(taster);
22
if (tasterstatus == HIGH)
23
  {
24
   digitalWrite(LEDrot, LOW);
25
   digitalWrite(LEDweiss, HIGH);
26
   digitalWrite(relaisIN1, LOW);
27
   delay (500);
28
   digitalWrite(LEDweiss, LOW);
29
   digitalWrite(relaisIN1, HIGH);
30
  }
31
else
32
  {
33
   digitalWrite(LEDrot, HIGH); 
34
   digitalWrite(LEDweiss, LOW);
35
   digitalWrite(relaisIN1, HIGH);
36
  }
37
}

Jetzt "passiert" folgendes:
Bei
1
digitalWrite(LEDrot, LOW);
2
digitalWrite(LEDweiss, HIGH);
Liegen 1,8V zwischen den Pins an.

Bei
1
digitalWrite(LEDrot, HIGH);
2
digitalWrite(LEDweiss, LOW);
Liegen -3,8V zwischen den Pins an.

Wenn ich
1
[c]int LEDrot=1;
2
int LEDweiss=0;
auf
1
int LEDrot=0;
2
int LEDweiss=1;

ändere, ist es anders herum.

Warum?

Danke und Gruß
der "Stevie"
Angehängte Dateien:
#6748343
Lesenswert?

Hallo,

abgesehen davon das man die Leds auch an je einen Pin klemmen kann, 
solltest du den µC mal weglassen, beide R+Led normal parallel an 5V 
klemmen und messen. Danach schauste in Datenblatt der Leds und guckst 
nach dem Wert der Flussspannungen. Die 100 Ohm für eine übliche rote Led 
ist zudem etwas wenig.
#6748376
Lesenswert?

Hallo,

geht es noch konkreter? Aus dem Text kann ich nichts entnehmen. Welche 
Leds? Welche Pins? Was ist Vowi? Wie gesagt, ohne µC aufbauen, 5V vom 
Netzteil und messen. Schreibe die Werte in den Schaltplan und zeichne in 
den Schaltplan ein zwischen welchen Pins du was gemessen hast. Der 
Schaltplan sollte dann auch mit allen Angaben mit dem übereinstimmen was 
und wie aufgebaut ist.
#6748445
Lesenswert?

Veit D. schrieb:
> Hallo,
>
> abgesehen davon das man die Leds auch an je einen Pin klemmen kann,
> solltest du den µC mal weglassen, beide R+Led normal parallel an 5V
> klemmen und messen. Danach schauste in Datenblatt der Leds und guckst
> nach dem Wert der Flussspannungen. Die 100 Ohm für eine übliche rote Led
> ist zudem etwas wenig.

... ja, danke.

Ja, man kann natürlich auch über zwei Ausgäge steuern, aber im finalen 
Anwendungsfall stehen mir nur zwei Leitungen zur Verfügung (Kfz 
Anzeige).

µC weg gelassen verhalten sich die LEDs wie erwünscht. Egal wie die 
Spannung (5V) anliegen, leuchten die LEDs gleich hell.

Für den Zustand am µC verhält es sich wie im Bild aufgeführt.

Ohne Last liegen je nach Zustand 1: Pin0: "HIGH", Pin2 "LOW" und Zust. 
2: Pin0:"LOW", Pin2 "HIGH", 4,55, bzw. -4,28V an PIN1 und PIN0.

Die 100Ohm sind ja zwei Mal vorhanden, also Gesamtwiderstand 200Ohm. Und 
nach meinen noch vorhandenen Schulkenntnissen ist es "egal" wo die 
Widerstände sitzen. Wenn ich da auf dem Holzweg bin, bitte Info ;-)

DAnke und Gruß
der "Stevie"
Angehängte Dateien:
#6748453
Lesenswert?

Du hast bei Schalter HIGH andere Zeitliche Bedingungen, als bei Schalter 
LOW.
Der Ausgang macht kurz an, danach aus. deshalb misst dein Multimeter nur 
die halbe spannung, kann das sein?
1
void loop()
2
{
3
// digitalWrite(relaisIN1, HIGH);
4
tasterstatus=digitalRead(taster);
5
if (tasterstatus == HIGH)
6
  {
7
   digitalWrite(LEDrot, LOW);
8
   digitalWrite(LEDweiss, HIGH);
9
   digitalWrite(relaisIN1, LOW);
10
   delay (500);
11
   digitalWrite(LEDweiss, LOW);
12
   digitalWrite(relaisIN1, HIGH);
13
  }
14
else
15
  {
16
   digitalWrite(LEDrot, HIGH); 
17
   digitalWrite(LEDweiss, LOW);
18
   digitalWrite(relaisIN1, HIGH);
19
  }
20
}
#6748460
Lesenswert?

Falk B. schrieb:
> Da sollte in beiden Polaritäten fast das Gleiche rauskommen. Wenn nicht,
> hat eine Ausgang einen Treffer. Nimm mal einen anderen Controller. Oder
> andere IOs

... unfassbar, aber wahr.
Ich hatte drüber nachgedacht, aber verworfen, weil ich mir keinen Reim 
draus machen konnte.
Jupp. Der 8-Beiner ist im Halbleiterhimmel angekommen.
"Neuer" rein, alles läuft.

Danke für die nette Diskussion.

der "Stevie"

EDIT: Aber dass "nur" ein Ausgang die Grätsche macht ...

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