Reset microcontroller

In bijgevoegd schema maak ik gebruik van een pic 16F819. De schakeling laat een ruitenwisserotor links/ rechtsom draaien met een bepaalde logica. Nu is het probleem dat zo nu en dan de pic gereset wordt bij het in- en afschakelen van de motor. waardoor het programma opnieuw begint en ongewenste situaties ontstaan.
Om de spanningsdip op te vangen heb ik de elco + diode in de voeding geplaats? dacht ik.

Heeft er iemand suggesties voor dit probleem???

http://www.uploadarchief.net/files/download/severo.jpg

code:
DEVICE 16F819
CONFIG INTRC_IO,WDT_OFF,BODEN_ON,LVP_OFF,MCLRE_ON, PWRTE_ON, CP_OFF
OSCCON = %01110000 ' 8MHz
XTAL = 8

ADIN_RES = 12
ADIN_TAD = FRC
ADIN_STIME = 50

ALL_DIGITAL TRUE ;Alle ingangen digitaal
PORTB_PULLUPS ON ;On-chip pull-up weerstanden actief

PORTA = %00000000
PORTB = %00000000
TRISA = %00000011 ;
TRISB = %00110000
ADCON1 = %11000000

SYMBOL mlinks = PORTB.0 ; motor linksom
SYMBOL mrechts = PORTB.1 ; motor rechtsom
SYMBOL groen = PORTB.2 ; led groen
SYMBOL rood = PORTB.3 ; led rood
SYMBOL cyclus = PORTB.4 ; cyclusschakelaar
SYMBOL deur = PORTB.5 ; deurschakelaar

SYMBOL aan =0
SYMBOL uit =1
SYMBOL open = 1
SYMBOL dicht =0

; dummybit
DIM ddeur AS BIT
DIM dcyclus AS BIT

; delayword

DIM delay AS WORD
DIM delay2 AS WORD

; analoge signalen
DIM stroom AS WORD
DIM accu AS WORD

CLEAR

DELAYMS 500
HIGH groen
DELAYMS 500
LOW groen
DELAYMS 500
IF deur = dicht AND cyclus = 1 THEN HIGH mrechts
WHILE cyclus = 1
WEND
IF cyclus = 0 THEN LOW mrechts
DELAYMS 500

ddeur= 0
dcyclus = 0

GOTO start

overstroom:
WHILE cyclus = 1
LOW mlinks
LOW groen
HIGH rood
FOR delay = 1 TO 100
DELAYMS 15
NEXT
IF cyclus = 1 AND mlinks = 0 THEN HIGH mrechts
WHILE cyclus =1
WEND
IF cyclus = 0 THEN LOW mrechts
IF cyclus = 0 THEN LOW rood
WEND
RETURN

acculaag:

WHILE accu < 700 AND mlinks = 0
accu = ADIN 0
IF accu > 700 THEN groen = 1
HIGH rood
DELAYMS 1000
LOW rood
DELAYMS 1000
WEND
RETURN

; hoofdprogramma
start:

stroom = ADIN 1
accu = ADIN 0

IF accu > 700 THEN groen = 1
IF accu < 612 AND cyclus = 0 THEN groen =0

IF accu < 480 AND mlinks = 1 AND groen = 1 THEN
FOR delay2 = 1 TO 100
DELAYMS 10
NEXT
GOSUB overstroom
ENDIF

IF stroom > 33 THEN GOSUB overstroom
IF deur ! = ddeur THEN
IF deur = dicht THEN
mlinks =1
ENDIF
ENDIF
ddeur = deur

IF cyclus ! = dcyclus THEN
IF cyclus = aan THEN
mlinks = 0
ENDIF
ENDIF
dcyclus = cyclus

IF deur = open THEN
mlinks = 0
ENDIF

IF groen = 0 THEN GOSUB acculaag
DELAYMS 100
GOTO start

END

C2 vlakbij je PIC geplaatst?

If you want to succeed, double your failure rate.

Dit zal eerder een hardwarematige oplossing vereisen dan een softwarematige oplossing.

Mijn eerste idee is dat bij het inschakelen van de motor zich een spanningspuls/spanningsdip of hoe je het ook noemt voordoet op de voedingsspanning waardoor de PIC een reset krijgt.

Heb je geen scope ofzo ? Zodat je dit kan controleren ..

Ja.. ik heb c2 dichtbij de pic zitten.
Ik heb momenteel geen digitale scoop tot mijn beschikking om e.v.t. dipjes of pieken te detecteren. Kan ik een uffer elco plaatsen om het e.e.a. uit te sluiten? en zo ja wat raden jullie aan? alvast bedankt

moet geen digitale scoop zijn hoor, analoog mag je nog steeds meten.

Dus hang je scoop er aan, en meet eens voor de 7805. Heb je daar een dipje bij het inschakelen? Of enkel na de 7805?
Hoe is je schakeling opgebouwd? Ligt de PIC ver van je voeding? Heb je goede C gebruikt?.
Maak mischien een foto van je layout.

pointers don't kill programs, programmers kill programs

C2 staat niet dicht bij de PIC. Het best zou rechtstreeks op de pinnen 5& 14 aan de onderkant zijn.
Is dit printje al gemaakt? indien niet zou ik de PIC dichter tegen de voeding plaatsen & dikkere banen voorzien voor voeding & massa
en anders misschien 2 extra draadjes plaatsen direct tussen PIC & 7805. Je gnd van de pic zit helemaal "achteraan"

[Bericht gewijzigd door sven op vrijdag 14 september 2007 12:34:10 (20%)

pointers don't kill programs, programmers kill programs

Bedankt Sven.. het printje is al gemaakt dus ik ga met bedrading aan de gang..

Arco

Special Member

Er zit geen condensator aan de MCLR pin, dat is vragen om moeilijkheden, zeker in automotive toepassingen...
Je kunt voor de pull-up aan MCLR ook nog 3k3 ~ 4k7 proberen in hardnekkige gevallen...
(Je kunt ook gewoon MCLRE_OFF gebruiken om de pin te disablen)

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

Neem de aanbeveling van Arco ten harte.

Voorts, ik weet niet hoeveen stroom de relais trekken, maar ik zou ze voeden vanuit de ander zijde van de diode, zodat ze de elko niet leeg kunnen trekken en zo een spannings dip op de 5V kan veroorzaken.

Let ook op de aard en voedings aansluiting van de PCB, dat daar niet de hoge stomen van de motor door kunnen lopen.

pointers don't kill programs, programmers kill programs
Shiptronic

Overleden

zet de voeding van de relais , en de voeding naar de ontkoppel diodes , aan de anderekant van d3 na F2

[Bericht gewijzigd door Shiptronic op zondag 16 september 2007 10:36:14 (31%)

Wie de vraag stelt, zal met het antwoord moeten leren leven.

Zo.. terug van weggeweest.. Ik heb onlangs eerst de voeding naar de pic voorzien van dikkere bedrading en een C op het ic voetje gemaakt. Tevens MCLRE_OFF toegepast. Hierna leek het ic wat stabieler... Vervolgens heb ik naar aanleiding van een eerder probleem een unidirectionele supressiondiode over de motor geplaatst. Het probleem lijkt nu te zijn verholpen..
Zouden spikes van het in-en uitschakelen van de ruitenwissermotor dit probleem kunnen hebben veroorzaakt??

Shiptronic

Overleden

en wat dacht je van de spike's die van de relais spoelen af komen?

dit kun je ook goed met 4 Fets doen (H-brug)

Wie de vraag stelt, zal met het antwoord moeten leren leven.

Inderdaad.. ik zal je advies aannemen en kijken wat de mogelijk zijn voor de H brug.

Bedankt