Hallo, ich habe bei Ausgangsports des AVRs gemessen, dass, wenn sie 0 sein sollten, Spannungen zwischen 0,5V und 1V haben. Das Problem ist, dass die nachgeschalteten Transistorn dann schon leitend werden. Mein Basiswiderstand ist 1,5kOhm, wenn er kurzgeschlossen wird wird das Problem nur minimal besser. Ist das immer so oder habe ich irgendwo einen Fehler gemacht? Kann ich, um das Problem zu lösen, an den Ausgang noch eine Diode hängen (in Serie zum Basiswiderstand), damit die dem Transistor Basisspannung klaut? Viele Grüße Patrick
Patrick wrote: > Ist das immer so Nein >oder habe ich irgendwo einen Fehler gemacht? Ja > Kann ich, > um das Problem zu lösen, an den Ausgang noch eine Diode hängen (in Serie > zum Basiswiderstand), damit die dem Transistor Basisspannung klaut? Theoretisch ja, praktisch ist es aber sinnvoller den Fehler zu beheben anstelle einen Workaround um dessen Auswirkungen zu machen. Port auf Ausgang geschaltet? Lässt du Strom in den Port hinein fließen?
> Ist das immer so oder habe ich irgendwo einen Fehler gemacht?
Könnte sein.
Wenn du den Port in Wirklichkeit nicht auf Ausgang geschaltet hast,
sondern nur den Pullup ein/ausschaltest, könnte das einen ähnlichen
Effekt haben.
Ich poste mal meinen Code, so wie ich mich kenne übersehe ich eine Banalität. Die betroffenen Pins sind PB1 bis PB3. Die Hardware werde ich morgen untersuchen, dafür habe ich keinen Nerv mehr.
1 | .include "tn2313def.inc" |
2 | |
3 | .def temp1 = r16 |
4 | |
5 | .org 0x0000 ; Startadresse |
6 | rjmp main |
7 | .org 0x000D ; Timer0: 36kHz-Signal |
8 | rjmp tmr0_ovf |
9 | |
10 | |
11 | main: |
12 | |
13 | ldi temp1, 0 ; Port D Eingang |
14 | out DDRD, temp1 |
15 | |
16 | ldi temp1, 0xFF ; Eingänge mit Pullup |
17 | out PORTD, temp1 |
18 | |
19 | ldi temp1, 0xFF ; Port B Ausgang, zunächst alles 0 |
20 | out DDRB, temp1 |
21 | |
22 | ldi temp1, ramend ; Stackpointer initialisieren |
23 | out SPL, temp1 |
24 | |
25 | ldi temp1, 0b00000010 ; WGM02:0 = 2(dezimal) -> CTC-Modus (Auto-Reload) |
26 | out TCCR0A, temp1 |
27 | |
28 | ldi temp1, 54 ; Reload-Wert ist 54 |
29 | out OCR0A, temp1 |
30 | |
31 | ldi temp1, 0b00000001 ; Overflow-Interrupt für T0 aktivieren |
32 | out TIMSK, temp1 |
33 | |
34 | ldi temp1,0b00000001 ; loslaufen lassen, Prescaler=1 |
35 | out TCCR0B, temp1 |
36 | |
37 | sei ; Interruptflag setzen |
38 | |
39 | |
40 | loop: |
41 | |
42 | sbis PIND,0 ; wenn PD0 gesetzt gehe NICHT nach rot |
43 | rjmp rot |
44 | sbic PIND,1 ; wenn PD1 gelöscht gehe NICHT nach grün |
45 | rjmp gruen |
46 | rjmp gelb |
47 | |
48 | rot: ; Setze Ausgang rot |
49 | |
50 | sbi PORTB,1 |
51 | cbi PORTB,2 |
52 | cbi PORTB,3 |
53 | rjmp loop |
54 | |
55 | gelb: ; Setze Ausgang gelb |
56 | |
57 | cbi PORTB,1 |
58 | sbi PORTB,2 |
59 | cbi PORTB,3 |
60 | rjmp loop |
61 | |
62 | gruen: ; Setze Ausgang grün |
63 | |
64 | cbi PORTB,1 |
65 | cbi PORTB,2 |
66 | sbi PORTB,3 |
67 | rjmp loop |
68 | |
69 | |
70 | |
71 | |
72 | tmr0_ovf: |
73 | |
74 | sbi PINB,0 ; PB0 invertieren |
75 | reti |
Die Software sieht ok aus. Bleibt jetzt also noch die Hardware. Entweder bekommt der Pin von irgendwo Strom, oder der Vss Pin liegt nicht auf 0V.
Habe nochmal geschaut und einen anderen Tiny2313 ausprobiert. Dasselbe, auch mit offenem Ausgang...
Fehler in der Schaltung, vielleicht liegt die Masse so ungünstig, d.h. es fließt irgendwo Strom der diesen Spannungsabfall verursacht oder ähnliches, schlechte Verbindung in der Masse oder was auch immer.
Schaltung ist nur auf Papier, im Prinzip hängt am Port wie gesagt der npn über einen Basiswiderstand, am Kollektor LEDs mit Vorwiderstand an 12V, Emitter an (gemeinsamer) Masse. Was ich noch sagen wollte: Auf dem STK500-Board messe ich nur 0,34V, da gibt es das Problem nicht (aber alles ist invertiert). Was ist mit Vss gemeint? Vcc habe ich natürlich an 5V
> Schaltung ist nur auf Papier,
Und wie kannst du dann eine Spannung messen?
AAAARGH... Ich habe den Fehler entdeckt. Darf ich nicht sagen was es war. Vielen Dank für eure Mithilfe! Schönen Abend, Patrick
>Darf ich nicht sagen was es war.
Damit musst Du jetzt aber schon rausrücken. Wär ja sonst megaundankbar
;-)
Er wird wohl vergessen haben GND anzuschliessen und der Strom hat sich dann einen Weg über die Schutzdioden und die Transistoren gesucht.
Er hat gegen die Masse des Netzteils gemessen und dabei vergessen, daß das STK500 ne Graetzbrücke als Verpolschutz hat. Dann mißt man immer eine Diodenflußspannung zuviel. Peter
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.