mikrocontroller.net

Forum: Analoge Elektronik und Schaltungstechnik Dringend: Suche Basisspannung für Transistor


Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich möchte wissen, wie groß der Widerstand (Anhang) sein soll, 
bzw. ob 7,5 kOhm richtig sind. Der Transistor soll bei Spannung entweder 
durchschalten oder bei 0V "Sperren". Die Spannung vor dem Widerstand 
beträgt 5V (vom AVR). Nach welchem Wert vom Transistor (2N3904) richtet 
sich der Widerstand?

Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bild vergessen

Autor: noname (Gast)
Datum:
Angehängte Dateien:
  • preview image for tr.png
    tr.png
    3,01 KB, 517 Downloads

Bewertung
0 lesenswert
nicht lesenswert
jetzt aber

Autor: HildeK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welchen Widerstand hat das Relais?
Wie groß ist B bzw. hfe des Transistors?

Informiere dich auch über Freilaufdioden für induktive Lasten.

Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Innenwiderstand: 178 Ohm

Mehr Infos habe ich leider nicht.

Autor: Christian L. (lorio)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Freilaufdiode vergessen.

http://www.mikrocontroller.net/articles/Relais_mit...

Widerstand richtet sich nach:
-Laststrom
-hfe (Stromverstärkung)
-Übersteurungsfaktor

Basiswiderstand ist circa:
hfe *(Steuerspannung - 0,7 V) / (Laststrom * Übersteuerungsfaktor)

Gruß
Christian

EDIT:

Waren andere schon schneller =)

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hfe ist 60 bei 100mA und 100 bei 10mA

Otto

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
entschuldigung: 60 bei 50mA

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anhang ?

Welchen Kollektorstrom willst du denn fliessen lassen ?

Den Parameter den du suchst ist der Stromverstaerkungsfaktor B also das 
Verhaeltnis IC/IB = B

Mal angenommen dein Kollektorstrom betraegt 10mA und die 
Stromverstaerkung B = 100 dann ergibt sich dein Basisstrom zu IB = IC/B 
= 0.1mA.
Jetzt brauchst du noch die Spannung deines Ausganges.
Nehmen wir mal 5V.
An deinem Basisvorwiderstand fallen jetzt 5V - 0.7V = 4.3V ab.
0.7V = Spannung an der Basis-Emitterstrecke.

Um den Transistor jetzt zuverlaessig durch zu steuern erhoehen wir den 
Basisstrom um einen Uebersteuerungsfaktor. Der liegt in der 
Groessenordnung von 2.. 10 normalerweise.
Wir nehmen jetzt mal einen Faktor von 4 an.
Also ergibt sich damit ein Basisstrom von IB*4 = 0.4mA.

Jetzt kannst du den Vorwiderstand berechnen.

R = 4.3V / 0.4mA = 10750 Ohm.

Gewaehlt wird der naechste Normwert = 10KOhm

Gruss Helmi

Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zugegebenermaßen habe ich noch nicht alles Verstanden, aber wenn R2 = 10 
kOHm ist, mache ich nichts falsch?

Muss die Diode sein, oder würde es auch ohne gehen?

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit 7,5k machst Du auch nichts falsch aber die Diode (mit Kathode an +) 
muss sein.

Otto

Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, ich habe noch die hier: 
http://de.rs-online.com/web/search/searchBrowseAct...
gefunden. KAnn ich diese nehmen?

Autor: HildeK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Helmi
Ich weiss, du gingst von Annahmen aus, deshalb:
Sein Kollektorstrom ist knapp 30mA (178 Ohm Last) und Otto meinte, B 
sein rund 60 bei 50mA, also wäre es ganz gut, wenn er den 
Basiswiderstand ca. um den Faktor 5 reduzieren würde: 1k5 ist mein 
Vorschlag.

>Zugegebenermaßen habe ich noch nicht alles Verstanden, aber wenn R2 = 10
>kOHm ist, mache ich nichts falsch?
IMHO ist dann dein Basisstrom zu klein, um sicher durchzusteueren. Mit 
1k ... 2k liegst du viel besser.

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@HildeK

Da schliess ich mich deinem Vorschlag an.
Als ich anfing eine Antwort zu schreiben hatte er noch nicht gesagt das 
sein Kollektorstrom 30mA betraegt. Deshalb auch meine Frage am Anfang 
"Anhang ?"

Gruss Helmi

Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry, aber ich habe nie etwas von 30mA gesagt ;-)

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> sorry, aber ich habe nie etwas von 30mA gesagt ;-)

aber von 178 Ohm Innenwiderstand......

Otto

Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso, dann sollte ich vielleicht noch sagen, dass ich das ganze mit 
einem ATTINY ansteuere. Desshalb der Transistor, weil der Controller ja 
nicht so viel treiben kann. Ich habe erstmal einen Kiloohm verwendet, 
aber es funktioniert noch nicht.
Wenn ich das freie Ende von R2 im Plan direkt mit 5V verbinde, schaltet 
das Relais und es fließen anständige 30mA. Aber wenn ich das Ende direkt 
mit dem Pin PB0 verbind und folgendes Programm laufen lasse passiert 
nichts.


.include "tn12def.inc"         ; Definitionsdatei für den Prozessortyp 
einbinden

         ldi r16, 0xFF       ; lade Arbeitsregister r16 mit der 
Konstanten 0xFF
         out DDRB, r16       ; Inhalt von r16 ins IO-Register DDRB 
ausgeben

         ldi r16, 0b11111111 ; 0b11111100 in r16 laden
         out PORTB, r16      ; r16 ins IO-Register PORTB ausgeben

ende:    rjmp ende           ; Sprung zur Marke "ende" -> Endlosschleife


Ich habe alles sowohl mit 0b11111111 als auch mit 0b00000000 
ausprobiert.

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und das DDRB auf Ausgang geschaltet ?

Otto

Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe ich das nicht mit

out DDRB, r16

gemacht?

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was für eine Spannung steht denn am Pin PB0 an ?

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich habe alles sowohl mit 0b11111111 als auch mit 0b00000000
> ausprobiert.

Meine Frage war eigentlich, ob Du im Fall 0b00000000 das DDRB mit 
0b11111111 geladen hast ?

Otto

Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ne, ich habe den obrigen code nur mit beiden möglichkeiten (0b00000000 
und 0b11111111) ausprobiert. Sonst habe ich nichts weiter gemacht. Fehlt 
da etwa etwas?

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein - aber wenn es mit "1" nicht funktioniert, stimmt etwas anderes 
nicht. Wie sieht denn Deine Schaltung aus ?

Otto

Autor: noname (Gast)
Datum:
Angehängte Dateien:
  • preview image for sc.png
    sc.png
    6,59 KB, 430 Downloads

Bewertung
0 lesenswert
nicht lesenswert
Ich habe den Teil mit der Spannungsvers. weggelassen, ist aber ok, denn 
Kontakt mit dem TINY habe ich ja.

der Quarz und die Kondensatoren ist nicht drin.

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Spannungsversorgung wäre interessant und ohne Freilaufdiode (1N4148) 
könnte auch der µC durcheinander kommen.....

Otto

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du auch schon mal den Programmieradapter abgezogen ?
Nicht das der dein Signal an PB0 (MOSI) auf 0V hält.

Gruss Helmi

Autor: Hugo Ratlos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na klar! Jumper JP1 nicht gesetzt, wie?

Na gut, auf alle Fälle könntest Du ja einfach mal die Spannung am Port 
PB0 bei laufendem Programm messen.

Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welchen Wert müsste ldi r16 denn in meiner Schaltung haben? Dann könnte 
ich das korrekte Programm rüberspielen und dann messen. Ist sonst am 
Programm alles ok?

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
R16 müsste für PB0 "1" enthalten - es funktioniert auch mit FF

Evtl. ist Dein Problem aber die Spannungsversorgung, welche nicht 
reichen könnte, dass Relais zu speisen (z. B. bei Verwendung einer 
9V-Batterie mit 5V-Spannungsregler) oder die fehlende Freilaufdiode 
sein, die Deinen Controller "abstürzen" lässt.

Lass erst einmal eine LED blinken, um sicher zu sein, dass der 
Cpntroller läuft.

Otto

Autor: Olli R. (xenusion)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es fehlt immer noch die Freilaufdiode, und es ist KEINE gute Idee, das 
Relais aus derselben Spannungsquelle wie den uC zu versorgen.

Olli

Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin mir noch nicht ganz sicher, aber ich glaube es funktioniert 
alles - dank Eurer hilfreichen und schnellen Tipps! Vielen Dank!
Auf die Freilaufdiode etc. bin ich so nicht drauf gekommen.

Aber nochmal eine andere Frage: Gibt es in Assembler soetwas wie ein 
Delay? Ich möchte in einer Endlosschleife den Port von 0x00 auf 0xff mit 
einer Wartezeit von jeweils 1s schalten.

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Gibt es in Assembler soetwas wie ein Delay? Ich möchte in einer
> Endlosschleife den Port von 0x00 auf 0xff mit einer Wartezeit von
> jeweils 1s schalten

es geht mit mehreren (3) verschachtelte Schleifen (macht man so aber 
nicht)

Otto

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuche es mal so:

         ldi  r12, $10
LOOP2:   ldi  r11, $FF
LOOP1:   ldi  r10, $FF
LOOP0:   dec  r10
         brne LOOP0
         dec  r11
         brne LOOP1
         dec  r12
         brne LOOP2

Otto

Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Invalid Register (ldi  r12 kennt er scheinbar nicht)
wieso macht man das so nicht?

Kann man diesen C-Code nicht "direkt" übersetzen?:

while(1)
{
    Port1=0xff;
    _Delay_ms (500);

    Port1=0x00;
    _Delay_ms (500);
}

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ach ja - Du kannst nicht jedes Register mit "ldi" ansprechen

mit r15 bis r31 müsste es aber gehen.

Die Zeit ist abhängig von Deiner CPU-Frequenz:

         ldi  r19, $10
LOOP2:   ldi  r18, $FF
LOOP1:   ldi  r17, $FF
LOOP0:   dec  r17
         brne LOOP0
         dec  r18
         brne LOOP1
         dec  r19
         brne LOOP2


Nein, ein C-Programm kannst Du nicht einbinden.

Otto

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man macht es so nicht, weil der Controller in einer Delay-Schleife 
nichts sinnvolles tut - eine Alternative ist z. B. die Verwendung eines 
Timers (siehe Tutorium)

Otto

Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
cool, das gibt beim kompilieren keine Fehler. Ich benutze den Internen 
Taktgeber des ATTINY 12. Ich messe mit meinem Multimeter jetzt ca. 
200mV. - Ein Indiz dafür, das alles zu schnell geht?

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur wenn Du ein- und ausschaltest.

An Deiner Stelle würde ich eine LED mit 1k Vorwiderstand an PB0 
schalten.

PB0 o---/\/\/\--->|--- GND

Da siehst Du, was passiert.

Otto

Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann man keine Wartezeit einbauen, die sicher 0,5s (oder etwas mehr oder 
weniger, aber zumindest im Bereich) wartet, wenn man weiss, dass ich die 
Interne Taktung verwende?
Das mit der LED ist bestimmt eine gute Idee, aber auf meiner geätzten 
Platine schlecht durchführbar. Lieber würde ich ein Programm haben, was 
einfach nur endlos blinkt.

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schalt Deine LED über Deinen "JP1" (Kathode an den Basiswiderstand) dann 
sollte sie auch hinreichend hell leuchten.

Eine definierte Wartezeit kannst Du durch ausrechnen erhalten.

Sieh im Datenblatt nach, wieviel Takte ein "dec" und ein "brne" braucht 
und multipliziere dies mit dem Kehrwert der CPU-Frequenz.

Das Ausrechnen kann auch der Compiler übernehmen.

Die bessere Möglichkeit ist es, einen Timer zu verwenden.

Gruss Otto

Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Tiny12-Datenblatt steht aber nicht wie lange die Anweisungen "dec" 
und "brne" brauchen.

Wie kann ich die CPU-Frequenz ermitteln, wenn ich keinen externen Quartz 
angeschlossen habe?

Wenn ich ein Timer nehmen soll, geht dass dann auch wirklich mit Tiny12 
und assembler? Wie würde soetwas aussehen?

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Noname,

es steht alles im Datenblatt - die Anzahl der Taktzyklen auf Seite 85 !

http://www.atmel.com/dyn/resources/prod_documents/...

Die Verwendung des Timers ist im Tutorium beschrieben.

Otto

Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja gut, "brne" braucht einen halben Taktzyklus und "dec" einen ganzen.
Aber ich kenne ja nicht meine Taktfrequenz.

Im tutorial ist aber etwas anderes beschrieben. Ich suche ein 
Endlosprogramm, welches die LED mit 0,5 Hz blinken lässt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.