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