; 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-8 | 0
|