Pic MCLR opstartprobleem

Hoi,

Ik heb een PIC16F876A welke regelmatig problemen geeft met het opstarten,
het lijkt een MCLR gerelateerd probleem.

Meestal start het programma niet, alsof de pic in reset blijft hangen.
Een enkele keer start het programma wel..
Als ik MCLR met een 1K weerstand eventjes naar de ground trek start de pic direct op.

Ik heb al verschillende weerstanden en verschillende condensator waardes geprobeerd. De pic verwisseld met een nieuwe. En een opstart delay van 5 seconden geprobeerd. Echter lost dit het probleem niet op.

Wat kan dit probleem veroorzaken?

Onderstaand het aansluitschema zoals door microchip aanbevolen:
VDD=5VDC
VCC=0VDC
R1=10K
R2=10K
C1=0,1uf

Nog nooit heeft een 16F876a bij mij opstartproblemen gegeven door wijzigingen aan de MCLR of gebruik van afwijkende waarden van de R of C.
Bijna nooit gebruik ik een C maar dat kan het probleem niet zijn.

Volgens mij is de 5V voeding niet goed door rommel op de voedingslijnen zoals gebruik van een switched mode voeding, maar ik gok op een fout in het programma.

Als je eens opgeeft welk kristal je gebruikt zal ik in de late namiddag eens een programma geven welke het zeker doet, heb nu geen tijd.

LDmicro user.

Condensator van 100nF aan /MCLR moet altijd, anders is het vragen om problemen. (niet met opstarten, maar door stoorpulsen)
De weerstand R2 is niet nodig bij een condensator van 100nF, R1 iets van 10k of 4k7 maken.

Beste is ook om de Power-up Timer altijd aan te zetten, en ook de Brown-out Reset. (zeker als de voeding wat gammel is)
Ook wel beide Vss pinnen aansloten en een 100nF over Vcc/Vss geplaatst?

Veel voorkomende fout is ook dat LVP wordt aangezet, en de PGM pin niet wordt aangesloten. Beste is LVP uit te zetten (wordt zelden gebruikt)
Als LVP toch aan moet staan, dan moet de PGM pin aan Vss gelegd worden.

[Bericht gewijzigd door Arco op 10 september 2017 10:37:12 (21%)]

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com
Lambiek

Special Member

Ik ben het helemaal met arco eens, en ik heb ook nooit problemen met die pin.

Hier heb je nog een voorbeeld voor het instellen van je config.

pic basic code:


Xtal 10                                     ; cristal 10Mhz

Config HS_OSC,_                             ; cristal groter dan 4MHz
       WDT_OFF,_                            ; Watchdog Timer Enable uit
       PWRTE_ON,_                           ; Power-up Timer Enable aan
       BODEN_OFF,_                          ; Brown-out Reset Enable uit
       LVP_OFF,_                            ; Low Voltage Programming uit
       CPD_OFF,_                            ; Memory Code Protection uit
       WRTE_ON,_                            ; Program Memory Write Enable aan
       DEBUG_OFF,_                          ; In-Circuit Debugger Mode uit
       CP_OFF                               ; Code Protection uit

Ik weet niet of je gebruik maakt van een kristal, maar anders wordt de eerste regel anders natuurlijk.

Als je haar maar goed zit, GROETEN LAMBIEK.

Als je een gammele voeding hebt, is het ook raadzaam om BODEN_ON te gebruiken.
Als de voeding bij opstarten even in een 'grijs gebied' (spanning te laag) blijft hangen, kan de processor vastlopen en is een reset nodig...
In dit geval gok ik op een LVP/PGM probleem... ;)

[Bericht gewijzigd door Arco op 10 september 2017 11:54:22 (10%)]

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com

Ik gebruik een 4MHz kristal. Deze staat op een paar mm van de osc pennen met op iedere pin een 22pF condensator naar de ground.

Als voeding gebruik ik een MeanWell IRM 05-05 voor het 5V gedeelte. En een MeanWell IRM 20-24 voor het 24V gedeelte.
Achter de voedingen staat bij de 5V een 470uF condenstator. En bij de 24V 2 x 560uF.

Onderstaand een scopebeeld bij het opstarten gemeten op VDD en VSS van de pic.

Het veranderen van BODEN_OFF & PWRTE_OFF naar ON had geen effect.
Low-voltage programming stond al uit omdat ik die niet gebruik.

Onderstaand de huidige fuse instellingen:

pic asm code:

__CONFIG        _DEBUG_OFF & _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _FOSC_XT & _WRT_OFF & _LVP_OFF & _CPD_OFF

Er staan ook behoorlijk wat 100nF ontkoppelcondensatoren in het circuit. Ook direct voor de VDD en VSS van de pic.
Bijde VSS pinnen liggen aan de ground.

Als de pic eenmaal is opgestart blijft hij probleemloos doordraaien.

Zou dit in de opstartroutine kunnen zitten, of is er toch iets mis met de voeding?

Lambiek

Special Member

Maak het hardware matig eerst zo zoals arco het zei, en dan kunnen we verder kijken.

Als je haar maar goed zit, GROETEN LAMBIEK.

Ik weet niet of je brown-out detectie nodig hebt anders zou ik boden_off doen...

Ik zag later dat je dat al geprobeerd had, maar zie op je scoop-beeld dat de 5V maar 4,8V is, probeer die eens naar 5,1V in te stellen op de meanwell....

[Bericht gewijzigd door Roches op 10 september 2017 14:50:30 (50%)]

Domoticz en ESP8266, goede combo!!!

Die Meanwells werken prima, ik gebruik ze ook veel...
Ik zie niet echt iets vreemds, misschien dat de sourcecode verheldering geeft. (doet een simpel programmaatje met een knipperled hetzelfde?)

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com

De hardware zit zoals Arco voorstelde..
R1 is 10K, C1=100nF, en R2 is verwijderd.

LVP gebruik ik niet, de PGM hoeft dan niet naar ground, dit is overigens een gebruikte uitgang.

Van storing lijkt de pic geen last te hebben, als deze eenmaal is opgestart kan ik probleemloos een boormachine of tl aanzetten op dezelfde wcd.

De 470uF condensator heb ik ook even verwijderd om te testen of dit effect heeft, dit verhelpt het opstartprobleem ook niet.. Deze heb ik dus weer terug gesoldeerd.

@Roches, De trigger staat ingesteld op 4.8V ;)
De werkelijke spanning op de pic is 5.28V, Dit is echter niet echt duidelijk te zien in het screenshot.

[Bericht gewijzigd door beest820 op 10 september 2017 15:16:55 (13%)]

Op 10 september 2017 15:10:41 schreef beest820:
R2 is verwijderd.

Ik hoop ook doorverbonden ;)
Probeer zoals gezegd een simpel programmaatje met alleen en led of zo. Dan weet je of het in de hardware of firmware zit...

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com

@Arco haha
Ja uiteraard is die ook doorvervonden :P
Ik ben nu ff een test progje aan het maken, 'k download die zo in de pic en laat weten of dit beter gaat..

Ik heb er een nieuw programma in gezet met alleen een knipperledje, programma werkt prima met de pic in hetzelfde circuit.

Hierna heb ik het oude programma er weer in gezet, het probleem komt nu even niet meer voor. Heb een keer of 10 de voeding in- en uitgeschakeld.

Ik vermoed dat de fout in de afhandeling van de FERR en de OERR in de interrupt routine zit.. Hier heb ik eea aangepast:
Na het afhandelen van de FERR, of de OERR, sprong ik terug naar 0x00.
Waarschijnlijk komt dit omdat de HMI die hieraan hangt na initialisatie een 4 byte code zend. (Hier doe ik verder niets mee.)
Waarschijnlijk gaat er iets niet helemaal lekker als de UART recieve interrupt komt terwijl de pic opstart.

pic asm code:

            ;Program interrupt vector
		ORG     0X04                    ;Program interrupt vector
		MOVWF   W_TEMP                  ;save off current W register contents.
	        MOVF    STATUS, W               ;move status register into W register.
	        MOVWF   STATUS_TEMP             ;save off contents of STATUS register.
		MOVF    PCLATH, W               ;move pclath register into W register.
		MOVWF   PCLATH_TEMP             ;save off contents of PCLATH register.
		BANKSEL 0
            
COERR           BTFSS   RCSTA,  OERR
                GOTO    CFERR
                BANKSEL TXSTA
                BCF     TXSTA,  TXEN
                BSF     TXSTA,  TXEN
                BANKSEL 0
                BCF     RCSTA,  CREN
                BSF     RCSTA,  CREN
		MOVLW   RCREG 
                MOVLW   RCREG 
                MOVLW   RCREG 
;                GOTO    0X00
CFERR           
                BTFSS   RCSTA,  FERR
                GOTO    B1
                MOVLW   RCREG 
                MOVLW   RCREG 
                MOVLW   RCREG 
                BANKSEL TXSTA
                BCF     TXSTA,  TXEN
                BSF     TXSTA,  TXEN
                BANKSEL 0
;                GOTO    0X00

Gewoon de error afhandelen en verdergaan, niet naar 0 terugspringen. Als je de errors niet cleart hangt de boel.

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com

Klopt het dan dat de error niet gecleared is na de code van "COERR" of "CFERR"?

Als de error wel was gecleared zou het programma dus probleemloos op moeten starten na een software-matige reset.

Wat zou er verder moeten gebeuren om de error te clearen?
Ik ga er dan van uit dat OERR of FERR niet gecleared is terwijl ik verwacht dat de gepostte code dat wel zou doen..

Een read van RCREG en resetten van de bits zou genoeg moeten zijn.
Een GOTO naar 0 is trouwens geen reset; de staat van alle interne registers zoals die van de UART verandert niets aan...
Wat soms ook helpt bij errors is om het SPEN bit even 0 te maken en dan weer 1.

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com

De code is aangepast..

Ik kijk komende tijd even aan of het probleem nog voorkomt.
Zoals het er nu naar uitziet is het probleem de wereld uit geholpen :)

Allen bedankt!