Forum: Mikrocontroller und Digitale Elektronik Tiny 24 bei High-Pegel nur 1,89 Volt am Ausgang


von Andi (Gast)


Lesenswert?

Hallo,
ich beabsichtige meine Fensterläden zu steuern.
Dazu habe ich mir eine Schaltung und ein entsprechendes Programm 
ausgedacht.
Da meine Schaltung nicht so funktioniert wie ich will, habe ich mir die 
Schaltung vereinfacht aufgebaut (z.B. LEDs statt Relais).
Doch leider funktioniert mein Testaufbau nicht so wie ich will.
Wenn ich die LED schalten will und die Ausgangsspannung am 
entsprechenden Pin messe, erhalte  ich leider nur einen Wert mit ca. 
1,89 V.
Deswegen habe ich alle Potis und Schalter abgeschlossen da ich anfangs 
dachte dass es vielleicht an den Potis liegt die ich zur Simulation der 
Analogwerte brauche und habe ein Programm geschrieben, mit dem die LEDS 
nach einer Zeit von 1,5 s abwechselnd nach der Reihe einschalten.
Das Programm funktioniert soweit allerdings habe ich wieder nur 1,89 
Volt und die LEDs leuchten ziemlich schwach.
Wenn ich allerdings das IC nur mit den Spannungsversorgungspins (Pin 1 
und 14) an den Sockel halte und die Spannung am Ausgangspin bei 
High-Pegel messe, erhalte ich ca. 5V.
Die LEDs die ich verwende sind grün und die Widerstanden sind 1,42kOhm 
Widerstände. Auch wenn ich den Widerstandswert mit nem Multimeter messe, 
erhalte ich einen Wert über 1,4kOhm.
Bein angenommenen 5V am Ausgang dürften maximal 3,6mA fließen, was dem 
Mikrocontroller wenig ausmachen dürfte, da er laut Datenblatt maximal 
40mA liefern kann.
Zur Info ich nutze den Internen Takt und beschalte den Reset-Pin nicht.
Woran kann es liegen, dass der Ausgang nur 2,89 Volt annimmt?
Vielen Dank im Voraus
Andi

von Jens (Gast)


Lesenswert?

Haste villeciht nur die pull up'saktiviert anstatt den pin hochzuziehn?

von Alain F. (fox82)


Lesenswert?

Programmierung plus ein Schema wäre Hilfreich.

Dies hier ist ein Beispiel einer LED an einem ATTiny15 / 45 mit Taster 
für EIN/AUS.
1
#include <avr/io.h>
2
#define F_CPU 8000000UL     /* int. Oszillator mit 8Mhz  */
3
#include <util/delay.h>
4
5
int x = 0;         
6
 
7
int main (void) {           
8
 
9
   DDRB = 0b00110111;             // Pin 3 = Eingang
10
   PORTB = 0b00101111;             // Pin 4 = LOW
11
12
13
14
  while(x==0){
15
16
  if ( !(PINB & (1<<PINB3)) ){
17
18
19
PORTB |= (1<<PB4);
20
x = 1;
21
_delay_ms(200); 
22
23
}
24
}
25
  while(x==1){
26
27
  if ( !(PINB & (1<<PINB3)) ){
28
29
PORTB &= ~(1<<PB4);  
30
x = 0;
31
_delay_ms(200); 
32
}
33
}
34
                          
35
    return main();               
36
}

Damit kann ich problemlos einen Transistor BC338 ansteuern und sogar 
Luxeon-LEDs schalten welche schnell mal 500mA brauchen. Dein Relais wird 
es somit ohne Probleme schalten.

von Andi (Gast)


Lesenswert?

Hier mein verwendeter Quellcode
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <stdint.h>
4
5
#define F_CPU 8000000UL     
6
7
#include <util/delay.h>
8
9
10
11
int main (void)
12
{
13
  DDRA=0x0F;  //Port A Pin 0-3 auf Eingabe Pin 4-7 auf Ausgabe
14
  DDRB=0x00;  //Port B auf Eingabe
15
while (1)
16
{
17
  PORTA &= ~(1<<PA4);
18
  PORTA |= (1<<PA7);
19
  _delay_ms(1500);
20
  PORTA &= ~(1<<PA7);
21
  PORTA |= (1<<PA6);
22
  _delay_ms(1500);
23
  PORTA &= ~(1<<PA6);
24
  PORTA |= (1<<PA5);
25
  _delay_ms(1500);
26
  PORTA &= ~(1<<PA5);
27
  PORTA |= (1<<PA4);
28
  _delay_ms(1500);
29
}
30
}
Direkt an den Ausgängen hängen die oben erwähnten Vorwiderstände und in 
Reihe die LEDs mit Kathode gegen Masse.
Sonst ist nur noch +5V und Masse am Mikrocontroller angeschlossen.

von Stefan E. (sternst)


Lesenswert?

> DDRA=0x0F;  //Port A Pin 0-3 auf Eingabe Pin 4-7 auf Ausgabe

Nein, genau umgekehrt. Mit 0x0F sind 0-3 Outputs und 4-7 Inputs.
Die "Nummerierung" in einem Byte geht von 7 - 0, also:
0x0F = (Bit7)00001111(Bit0)

Und da PA4-7 Inputs sind, schaltest du in deinem Code lediglich die 
internen Pullups ein und aus.

von Andi (Gast)


Lesenswert?

Vielen Dank,
hätte mir eigentlich ja schon beim simulieren auffallen müssen.
Jetzt klapts!!

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Dir ist aber klar dass Du Relais nicht direkt mit dem AVR schalten 
kannst, oder?

von Andi (Gast)


Lesenswert?

Natürlich, dazu betreibe ich nen Transistor als Schalter, der dann 
wiederum die Relais durchsteuert.
Als Relais habe ich 12 Volt Relais von SDS, da ich diese zufällig zu 
Hause hatte.
Gibt es eigentilch Relais, die man direkt mit einem Mikrocontroller 
ansteurn kann?

von Andreas K. (a-k)


Lesenswert?

5V-Reed-Relais mit 500 Ohm kann man direkt anschliessen.

Manche davon haben eine interne Freilaufdiode, man sollte aber auch dann 
entweder eine separate Schottky-Diode dafür verwenden, oder eine 
Si-Diode in Serie schalten. Sonst läuft der Port um 0,7V aus dem 
Vorsorgungsbereich raus. Manche hindert das zwar nicht daran, statt 
dessen die interne Schutzdiode als Freilaufdiode zu verwenden, aber...

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.