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
Haste villeciht nur die pull up'saktiviert anstatt den pin hochzuziehn?
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.
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.
> 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.
Vielen Dank, hätte mir eigentlich ja schon beim simulieren auffallen müssen. Jetzt klapts!!
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.