Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
; ;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII ;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII ;I Erstinitialisierungen ;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII ;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII ; _reset: ; ;Systemtakt ( 4,8MHz ) durch 8 teilen ( 600kHz = 1,666µs ) ; ldi a,1<<CLKPCE ;Im Clock Prescaler Register Bit.. out CLKPR,a ;..Clock Prescaler Change Enable setzen.. ldi a,1<<CLKPS1|1<<CLKPS0 ;..und CLKPS[3:0] loeschen (Sicherheitsprozedur).. out CLKPR,a ;..nun mit CLKPCE=0 und CLKPS[3:0] SYS-Takt aendern ; ;Stapelzeiger initialisieren (fuer Unterprogramme und / oder Interrupts) ; ;ldi a,High(RAMEND) ;RAMEND, also das Ende vom SRAM, ist in der.. ;out SPH,a ;..Definitions-datei festgelegt ldi a,Low (RAMEND) ;Hier reicht ein Byte, weil das... out SPL,a ;...SRAM nur 64Byte gross ist ; ;Variablen initialisieren ( r0-r31 haben unbestimmten Inhalt ) ; clr flag_reg ;Allgemeines Flaggenregister loeschen ; ;Die drei Bytes des CY800-Protokolls loeschen ; clr byte_2 ;Die 3.. clr byte_1 ;..Bytes.. clr byte_0 ;..loeschen ; ;Bitzaehler auf 24 Bits einstellen ; ldi bit_zlr,#bit_zlr ;Wert f. Bitzaehler laden.. ; ;Codeadresse fuer Taste A laden ; ldi zh,high(_code*2) ;Z-Zeiger mit Vergleichscode-Adresse.. ldi zl,low (_code*2) ;..laden ; ;Vergleichszaehler f. 3x hintereinander gueltigen Code ; ldi a,#vergleichs_zlr ;..Vergleichszaehler.. mov vergleichs_zlr,a ;..laden ; ;Sleep-Mode -> Power Down gewuenscht ; sbr flag_reg,1<<pdm ;Power-Down-Mode FLAG setzen ; ;Ports Erstkonfiguration ; sbi DDRB,led.pla ;PORT-Bit als Ausgang f. PLA-LED sbi DDRB,led.ora ;PORT-Bit als Ausgang f. SLEEP-LED sbi DDRB,led.ge ;PORT-Bit als Ausgang f. TEST-LED sbi LED_PORT,led.ora ;LED-Orange ausschalten ; ;PCINT0-IRQ einrichten ; in a,PCMSK ;Pin Change Mask Register laden.. sbr a,1<<PCINT0 ;..den Pin Change Enable Mask 1.. out PCMSK,a ;..auswaehlen in a,GIMSK ;General Interrupt Mask Register laden.. sbr a,1<<PCIE ;..Pin Change Interrupt Enable Bit setzen.. out GIMSK,a ;..und somit den PCI1-IRQigeben ldi a,1<<PCIF ;Pin Change Interrupt Flag im.. out GIFR,a ;..General Interrupt Flag Register laden loeschen sei ;Alle programmierbaren Interrupts freigeben |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
; ;HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH ;HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH ;H Hauptprogrammschleife ;HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH ;HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH ; _main: ; ;SLEEP-Mode ausschalten und auf Werkseinstellung setzen ; in a,MCUCR ;MCU Control Register laden und.. cbr a,1<<SE|1<<SM1|1<<SM0 ;..auf Werkseinstellung.. out MCUCR,a ;..setzen ; ;Pruefen welcher Sleep-Mode drann ist ; sbrs flag_reg,pdm ;Power-Down-Mode erwuenscht? rjmp _idle ;Nein -> µC in IDLE-Mode versetzen ; ;SLEEP-MODE -> Power Down ; ;cbi PORTB,led.ora ;LED-Orange einschalten T E S T Z W E C K E ########################### ;sbi PORTB,led.ora ;LED-Orange ausschalten T E S T Z W E C K E ########################### ;cbi PORTB,led.ora ;LED-Orange einschalten T E S T Z W E C K E ########################### in a,MCUCR ;MCU Control Register laden.. sbr a,1<<SE|1<<SM1 ;..Power-Down-Mode und Sleep Enable vorbereiten.. out MCUCR,a ;..und freigeben sleep ;µC in den Schlaf-Modus versetzen rjmp _main ;Arbeitsschleife ausfuehren ; ;SLEEP-MODE -> IDLE ; _idle: ;sbi PORTB,led.ora ;LED Orange ausschalten T E S T Z W E C K E ########################### ;cbi PORTB,led.ora ;LED-Orange einschalten T E S T Z W E C K E ########################### ;sbi PORTB,led.ora ;LED-Orange ausschalten T E S T Z W E C K E ########################### in a,MCUCR ;MCU Control Register laden(IDLE ist vorgegeben).. sbr a,1<<SE ;..Sleep Enable vorbereiten.. out MCUCR,a ;..und freigeben sleep rjmp _main ;Arbeitsschleife ausfuehren |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
; ;QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ ; PIN CHANGE INTERRUPT 0 ;QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ ; _PCI0addr: ;sbi LED_PORT,led.ge ;LED-Gelb einschalten T E S T Z W E C K E ############################# ;cbi LED_PORT,led.ge ;LED-Gelb ausschalten T E S T Z W E C K E ############################# ;sbi LED_PORT,led.ge ;LED-Gelb einschalten T E S T Z W E C K E ############################# ;cbi LED_PORT,led.ge ;LED-Gelb ausschalten T E S T Z W E C K E ############################# in s_sreg,SREG ;CPU-Statusregister sichern ; ;PCINT0 Interrupt sperren ; in ia,GIMSK ;General Interrupt Masken Register laden und.. cbr ia,1<<PCIE ;..Pin Change Interruput 0 Freigabebit loeschen.. out GIMSK,ia ;..und somit die PCI0-IRQ sperren ; ;Power-Down-Mode sperren ; cbr flag_reg,1<<pdm ;Power-Down-Mode FLAG loeschen ; ;INT0 Interrupt auf steigende Flanke einstellen ; in ia,MCUCR ;MCU Control Register laden.. sbr ia,1<<ISC01|1<<ISC00 ;..die steigende Flanke einstellen und dies.. out MCUCR,ia ;..nun uebernehmen, nun dass.. in ia,GIMSK ;..General Interrupt Mask Register laden, dort.. sbr ia,1<<INT0 ;..dass External Interrupt Request 0 Enable bit.. out GIMSK,ia ;..setzen und somit den INT0-IRQ freigeben.. ldi ia,1<<INTF0 ;..Nun dass External Interrupt Flag 0 Bit.. out GIFR,ia ;..im General Interrupt Flag Register loeschen ; ;Systemtakt ( 4,8MHz ) durch 16 teilen ( 300kHz = 3,333µs ) ; ldi ia,1<<CLKPCE ;Im Clock Prescaler Register Bit.. out CLKPR,ia ;..Clock Prescaler Change Enable setzen.. ldi ia,1<<CLKPS2 ;..Sicherheitsprozedur nun mit CLKPCE=0 und out CLKPR,ia ;..CLKPS[3:0] SYS-Takt aendern, abschliessen ; ;Timer/Counter0 Zaehlregister fuer die Biterfassung einstellen ; ldi ia,$FF-#top ;Wert f. TOV0-IRQ ( Normal- Mode ).. out TCNT0,ia ;..ins Timer/Counter0 Zaehlregister laden _exit_PCI0addr: out SREG,s_sreg ;Statusregister restaurieren ;sbi LED_PORT,led.ge ;LED-Gelb einschalten T E S T Z W E C K E ############################# ;cbi LED_PORT,led.ge ;LED-Gelb ausschalten T E S T Z W E C K E ############################# ;sbi LED_PORT,led.ge ;LED-Gelb einschalten T E S T Z W E C K E ############################# ;cbi LED_PORT,led.ge ;LED-Gelb ausschalten T E S T Z W E C K E ############################# reti ;_PCI0addr ISR verlassen |
In der INT0-ISR passiert auch nicht viel und wie üblich dieser erstmal zu Beginn gesperrt. Der Timer/Counter0 wird in den Normalmode versetzt bzw. dies ist schon die Werkseinstellung, sowie die T/C0 Overflow Interrupt ohne Vorteiler initialisiert und dadurch gleichzeitig der Timer0 gestartet.
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
; ;QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ ; INTERRUPT REQUEST 0 INT0 ;QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ ; _INT0addr: ;sbi LED_PORT,led.ge ;LED-Gelb einschalten T E S T Z W E C K E ############################# ;cbi LED_PORT,led.ge ;LED-Gelb ausschalten T E S T Z W E C K E ############################# in s_sreg,SREG ;CPU-Statusregister sichern ; ;INT0 Interrupt sperren ; in ia,GIMSK ;General Interrupt Mask Register laden.. cbr ia,1<<INT0 ;..INT0 Interrupt sperren vorbereiten und.. out GIMSK,ia ;..ausfuehren.. ; ;Timer/Counter0 Overflow Interrupt ( TOV0-IRQ ) einrichten ; in ia,TIMSK0 ;Timer/Counter0 Interrupt Mask Register laden und.. sbr ia,1<<TOIE0 ;..Timer/Counter0 Overflow Interrupt Enable setzen.. out TIMSK0,ia ;..somit den TOV0-IRQ ermoeglichen ldi ia,1<<TOV0 ;Nun dass Timer/Counter0 Overflow Flag im.. out TIFR0,ia ;..Timer/Counter0 Interrupt Flag Register loeschen.. in ia,TCCR0B ;..dass Timer/Counter0 Control Register B laden.. sbr ia,1<<CS00 ;..Clock Select = 1:1 einstellen.. out TCCR0B,ia ;..und den T/C0 gleichzeitig starten _exit_INT0addr: out SREG,s_sreg ;Statusregister restaurieren ;sbi LED_PORT,led.ge ;LED-Gelb einschalten T E S T Z W E C K E ############################# ;cbi LED_PORT,led.ge ;LED-Gelb ausschalten T E S T Z W E C K E ############################# reti ;_INT0addr ISR verlassen |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
;670 im Windows Editor ;QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ ; Timer0 Overflow ISR ( Interrupt Service Routine ) ;QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ ; _OVF0addr: in s_sreg,SREG ;CPU-Statusregister sichern ;sbi LED_PORT,led.pla ;LED-PLA einschalten T E S T Z W E C K E ############################## ;cbi LED_PORT,led.pla ;LED-PLA ausschalten T E S T Z W E C K E ############################## ; ;CY800-Bits erfassen ; sec ;High-Bit vorgeben sbis CY800_PIN,cy800.data ;CY800 Signalpin = 1 ?.. clc ;..Nein -> Bit = 0 setzen ; ;Bits zusammenfassen ; rol byte_0 ;Carry-Bit und weitere Bits links rotieren.. rol byte_1 ;Carry-Bit und weitere Bits links rotieren rol byte_2 ;Carry-Bit und weitere Bits links rotieren.. dec bit_zlr ;Bitzaehler um eins verringern brne _next_bit ;Alle 24 Bits erfasst? NEIN -> springen.. ; ;INT0 Interrupt auf steigende Flanke einstellen ; _next_bit: in ia,MCUCR ;MCU Control Register laden.. sbr ia,1<<ISC01|1<<ISC00 ;..die steigende Flanke einstellen und dies.. out MCUCR,ia ;..nun uebernehmen, nun dass.. in ia,GIMSK ;..General Interrupt Mask Register laden, dort.. sbr ia,1<<INT0 ;..dass External Interrupt Request 0 Enable bit.. out GIMSK,ia ;..setzen und somit den INT0-IRQ freigeben.. ldi ia,1<<INTF0 ;..Nun dass External Interrupt Flag 0 Bit.. out GIFR,ia ;..im General Interrupt Flag Register loeschen rjmp _timer_stopp ; ; ;Timer/Counter0 stoppen. ; _timer_stopp: in ia,TCCR0B ;..dass Timer/Counter0 Control Register B laden.. cbr ia,1<<CS02|1<<CS01|1<<CS00;..Clock Select = T/C0 stopp einstellen.. out TCCR0B,ia ;..und nun den T/C0 stoppen ; ;Timer/Counter0 Zaehlregister fuer die Biterfassung einstellen ; ldi ia,$FF-#top ;Wert f. TOV0-IRQ ( Normal- Mode ).. out TCNT0,ia ;..ins Timer/Counter0 Zaehlregister laden ; ;Timer/Counter0 Overflow ISR verlassen ; _exit_OVF0addr: ;Timer0 Overflow ISR verlassen out SREG,s_sreg ;Statusregister restaurieren reti ;_OVF0addr ISR verlassen |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
brne _next_bit ;Alle 24 Bits erfasst? NEIN -> springen.. ; ;Bitzaehler auf 24 Bits einstellen ; ldi bit_zlr,#bit_zlr ;Wert f. Bitzaehler laden.. ; ;CY800-Paket vergleichen ; lpm code,Z+ ;Code-Byte2 laden und Zeiger inkrementieren.. cp code,byte_2 ;..beide Bytes vergleichen.. brne _ungueltig ;Der Code stimmt nicht -> springen lpm code,Z+ ;Code-Byte1 laden und Zeiger inkrementieren.. cp code,byte_1 ;..beide Bytes vergleichen.. brne _ungueltig ;Der Code stimmt nicht -> springen lpm code,Z ;Code-Byte0 laden.. cp code,byte_0 ;..beide Bytes vergleichen.. brne _ungueltig ;Der Code stimmt nicht -> springen ; ;Pausenzeit laden ; ldi ia,#pausenzeit mov pausenzeit,ia ; ;Pruefen ob alle 3 Bytes, 3 mal direkt hintereinander gleich waren ;bzw. der Vergleichszaehler 0 ist ; tst vergleichs_zlr ;3x positiver Vergleich?.. breq _neues_paket ;..JA -> Auf ein neues Paket vorbereiten ; ;Vergleichszaehler dekrementieren ; dec vergleichs_zlr breq _umschalten ;Code akzeptiert -> Ausgang toggeln rjmp _neues_paket ;Auf ein neues Paket vorbereiten ; ;Ausgang Umschalten ; _umschalten: sbi LED_PIN,led.ora ;LED-Orange toggeln T E S T Z W E C K E ############################# rjmp _neues_paket ;Auf ein neues Paket vorbereiten |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
;650,460 ;CY800-Paket vergleichen ; lpm code,Z+ ;Code-Byte2 laden und Zeiger inkrementieren.. cp code,byte_2 ;..beide Bytes vergleichen.. brne _ungueltig ;Der Code stimmt nicht -> springen lpm code,Z+ ;Code-Byte1 laden und Zeiger inkrementieren.. cp code,byte_1 ;..beide Bytes vergleichen.. brne _ungueltig ;Der Code stimmt nicht -> springen lpm code,Z ;Code-Byte0 laden.. cp code,byte_0 ;..beide Bytes vergleichen.. brne _ungueltig ;Der Code stimmt nicht -> springen ; ;Das Paket passt nicht zum Code ; _ungueltig: ;cbi LED_PORT,led.pla ;LED-PLA ausschalten T E S T Z W E C K E ############################# ;sbi LED_PORT,led.pla ;LED-PLA einschalten T E S T Z W E C K E ############################# ;cbi LED_PORT,led.pla ;LED-PLA ausschalten T E S T Z W E C K E ############################# ;sbi LED_PORT,led.pla ;LED-PLA einschalten T E S T Z W E C K E ############################# ;cbi LED_PORT,led.pla ;LED-PLA ausschalten T E S T Z W E C K E ############################# ;sbi LED_PORT,led.pla ;LED-PLA einschalten T E S T Z W E C K E ############################# ;cbi LED_PORT,led.pla ;LED-PLA ausschalten T E S T Z W E C K E ############################# ; ;Pruefen ob alle 3 Bytes 3 mal direkt hintereinander gleich waren ;bzw. der Vergleichszaehler 0 ist ; tst vergleichs_zlr ;3x positiver Vergleich?.. breq _pausenzeit ;..JA -> Pausenzeit -1 ; ;Vergleichszaehler laden f. Erkennung dass der Code 3x hintereinander ;OK war ; _vgz_laden: ldi ia,#vergleichs_zlr ;..Vergleichszaehler.. mov vergleichs_zlr,ia ;..laden ; ;Alles fuer die Erfassung eines neuen CY800-Paketes veranlassen ; _neues_paket: |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
;670,610 ;Alles fuer die Erfassung eines neuen CY800-Paketes veranlassen ; _neues_paket: ; ;Variablen initialisieren ; clr byte_2 ;Die 3.. clr byte_1 ;..Bytes.. clr byte_0 ;..loeschen ; ;Codeadresse fuer Taste A laden ; ldi zh,high(_code*2) ;Z-Zeiger mit Vergleichscode-Adresse.. ldi zl,low (_code*2) ;..laden ; ;Sleep-Mode -> Power Down vorgeben ; sbr flag_reg,1<<pdm ;Power-Down-Mode FLAG setzen ; ;Systemtakt ( 4,8MHz ) durch 8 teilen ( 600kHz = 1,666µs ) ; ldi ia,1<<CLKPCE ;Im Clock Prescaler Register Bit.. out CLKPR,ia ;..Clock Prescaler Change Enable setzen.. ldi ia,1<<CLKPS1|1<<CLKPS0;..und CLKPS[3:0] loeschen (Sicherheitsprozedur).. out CLKPR,ia ;..nun mit CLKPCE=0 und CLKPS[3:0] SYS-Takt aendern ; ;PCINT0-IRQ einrichten ; in ia,PCMSK ;Pin Change Mask Register laden.. sbr ia,1<<PCINT0 ;..den Pin Change Enable Mask 1.. out PCMSK,ia ;..auswaehlen in ia,GIMSK ;General Interrupt Mask Register laden.. sbr ia,1<<PCIE ;..Pin Change Interrupt Enable Bit setzen.. out GIMSK,ia ;..und somit den PCI1-IRQigeben ldi ia,1<<PCIF ;Pin Change Interrupt Flag im.. out GIFR,ia ;..General Interrupt Flag Register laden loeschen ; ;Timer/Counter0 stoppen. ; _timer_stopp: in ia,TCCR0B ;..dass Timer/Counter0 Control Register B laden.. cbr ia,1<<CS02|1<<CS01|1<<CS00;..Clock Select = T/C0 stopp einstellen.. out TCCR0B,ia ;..und nun den T/C0 stoppen ; ;Timer/Counter0 Zaehlregister fuer die Biterfassung einstellen ; ldi ia,$FF-#top ;Wert f. TOV0-IRQ ( Normal- Mode ).. out TCNT0,ia ;..ins Timer/Counter0 Zaehlregister laden ; ;Timer/Counter0 Overflow ISR verlassen ; _exit_OVF0addr: ;Timer0 Overflow ISR verlassen out SREG,s_sreg ;Statusregister restaurieren reti ;_OVF0addr ISR verlassen |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Machtwas« (20. März 2021, 13:13)
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Machtwas« (24. März 2021, 22:03)
Das weiß ich in der Tat auch nicht.ich weiß nicht mehr genau warum ich D4 in Reihe zum Emitter von Q1 gelegt hatte.
Das würde ich nicht tun.Die Dummheitsdiode D1 ist absichtlich im GND-Zweig, weil es Layouttechnisch von Vorteil war.
Das ist ja das Schöne an einer 5V6-Z-Diode, das da der Temperaturkoeffizient ( Temperaturbeiwert ) ungefähr bei 0 liegt.Also wenn D4 einen Sinn erfüllen sollte (der sich mir gerade nicht erschließt, dann solltest Du in Reihe zur Z-Diode an der Basis noch eine Silizumdiode vom selben Typ wie D4 schalten, um die stabilisierte Spannung somit auf ordnungsgemäße 5V anzuheben. Die auf diese Weise erreichbare Stabilisierung wäre dann sogar höher, als wenn Du D4 einfach weg lässt. Der Grund liegt darin, dass eine Z-Diode in Reihe mit einer normalen Siliziumdiode eine bessere Temperaturstabilität aufweist, als eine alleinige Z-Diode.
Da dieser Schusseligkeitsfehler sehr beliebt ist, bin ich lieber für meine Methode mit D1, da muss man dann keine Sicherung wechseln.Schalte die Diode lieber mit der Anode auf Masse und der Kathode auf den Ausgang der Sicherung. Bei Verpolung knallt dann die Sicherung durch.
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »Machtwas« (24. März 2021, 18:50)
Ach ja, ich glaube mich zu entsinnen, dass es bei der so ist.Das ist ja das Schöne an einer 5V6-Z-Diode, das da der Temperaturkoeffizient ( Temperaturbeiwert ) ungefähr bei 0 liegt.
J2? Den finde ich in Deinem Plan nicht.Zitat
Eine
weitere Idee zu D4 könnte gewesen sein, dass es möglich ist über den
Öffner zu J2 ( 24Vgnd ) einen Kurzschluß zu machen und dann die
Emitter-Basis-Durchbruchspannung ( Veb0 ) von 5V bei aufgeladenem C4,
den BC547C ( Q1 ) zerstören könnte.
Da habe ich früher genauso gedacht, aber schon seit vielen Jahren bevorzuge ich doch tatsächlich die "unelegante" Methode mit der Sicherung, die bei Verpolung fetzt.Da dieser Schusseligkeitsfehler sehr beliebt ist, bin ich lieber für meine Methode mit D1, da muss man dann keine Sicherung wechseln.
Btw.: Warum setzt Du eigentlich keinen 7805 ein?
Die Dinger sind billig, wundervoll stabil, jahrzehntelang zuverlässig, praktisch unkaputtbar und mit guten Schutzfunktionen ausgestattet, gegen Überstrom und Überhitzung.
J2? Den finde ich in Deinem Plan nicht.
Aber bei nur 5V Ausgangsspannung kann Dir die Basis-Emitter-Diode nicht in Sperrichtung durchknallen, die verkraftet mehr.
Wäre Deine Ausgangsspannung aber höher, dann wäre die sinnvollere Maßnahme eine Diode antiparallel zum Transistor: Anode auf den Emitter und Kathode auf den Kollektor.
Ich meinte also das es an J5 zu einem Kurzschluß zu J2 kommen könnte, woraufhin ja F1 auslöst und der Kollektor von Q1 offen wäre.Eine weitere Idee zu D4 könnte gewesen sein, dass es möglich ist über den Öffner zu J2 ( 24Vgnd ) einen Kurzschluß zu machen und dann die Emitter-Basis-Durchbruchspannung ( Veb0 ) von 5V bei aufgeladenem C4, den BC547C ( Q1 ) zerstören könnte.
Das wage ich zu bezweifeln.Deine Argumente sind natürlich aus gesundem Menschenverstand entstanden, aber so ist das nun mit mir, und in Bezug auf stromsparend mit dem 78L05 bestimmt auch vorteilhafter.
Die Diode antiparallel zum Transistor ist hier ja überflüssig, weil Du nur 5V erzeugen willst.Hm- vielleicht erklärt ein zusätzlicher DB-Ausschnitt mein Argument, sowie der betreffende Schaltplanausschnitt. Diode antiparallel zum Transistor schützt doch bei ... ? :
Btw.: Betragen Deine 24V eigentlich wirklich 24V?
Oder stammen die aus einem 24V-Trafo mit Gleichrichter und Elko?
Forensoftware: Burning Board® 3.1.7, entwickelt von WoltLab® GmbH