Source file: /~heha/ewa/PIC16F145x-Urlader/bootCDC1.zip/check-reset-by-mclr.a15

; Nachweis und Eingrenzung eines Siliziumfehlers in PIC16F145x
; (vermutlich alle Enhanced-PIC16 betreffend)

	radix	dec
	list	n=0
	include	"p16f1454.inc"
	include	"mymacros.i15"

 __config _CONFIG1,_FOSC_INTOSC
 __config _CONFIG2,0x3FFF

	banksel	TRISA	; Bank 1
	bcf	TRISA,4	; Kontroll-LED nach 5P geht jetzt an
	bcf	TRISA,5	; Ausgang für POR, LOW = _Kein_ PowerOnReset
	btfsc	PCON,NOT_POR
	 bra	l0
	bsf	PCON,NOT_POR
	banksel	LATA
	bsf	LATA,5	; RA5 = HIGH = PowerOn-Reset
	banksel	TRISA
l0:	btfsc	PCON,NOT_RMCLR
l1:	 bra	l1	; wenn das Bit 1 war, also _kein_ RESET-Pin: STOP
	bsf	PCON,NOT_RMCLR	; wenn das Bit 0 war, also RESET-Pin: Auf 1 „quittieren“
	banksel	LATA	; Bank 2
	bsf	LATA,4	; Kontroll-LED aus
l2:	bra	l2	; STOP
	end
; Theoretisches Ergebnis:
; RA4 = LOW = kein MCLR als Ursache
; RA4 = HIGH = MCLR als Ursache

; Tatsächliches Ergebnis:
; RA4 stets HIGH, auch bei PowerOn-Reset

; _Kein_ MCLR-Reset gelingt tatsächlich nur,
; wenn Stützkondensatoren an 5P entladen werden
; UND der Reset-Eingang mit 5P kurzgeschlossen wird,
; eine Beschaltung von !MCLR mit 10 kΩ gegen 5P tut's auch.
; Offenbar macht bereits die Pinkapazität ein Schnippchen,
; der interne Pullup ist dafür zu groß.

; Bei mehr als 0,1 V an 5P tritt das Problem auf,
; die Entladung muss auf ≤ 0,1 V erfolgen.
; Das ist v.a. problematisch bei Anwendungen mit Batteriestütze,
; ansonsten tut's ein Entladewiderstand als Workaround.

; Das Entladen der Stützkondensatoren kann entfallen,
; wenn kein !MCLR-Reset gegeben wurde, dann wird beim folgenden
; Powerup _kein_ MCLR-Reset angezeigt, OBWOHL in BEIDEN Fällen
; das Bit !RMCLR gesetzt wurde. Rätselhaft.
Detected encoding: UTF-80