Hi
Ik ben bezig met een programma in PicBasic.
Die moet het volgende doen:
Ingangen 1IN en 2IN zijn beide hoog.
Het programma moet 'wachten' tot dat er een (lage) puls komt op één van de ingangen (1IN en 2IN).
De puls-tijd op de ingang wordt 'gemeten'.
Als de pulstijd (Puls) op een ingang tussen een bepaalde waarde zit (MinPuls=75ms en MaxPuls=125ms) dan moet er op een uitgang (PulsOut) een puls (laag) komen van 100 ms.
Als de puls (tussen de 75 en 125ms) op ingang 2IN is dan moeten er twee pulsen op de uitgang (PulsUitgang) komen van 100ms (met een pauze van 250ms).
Alarm:
Als beide ingangen 1IN en 2IN tegelijk laag gaan dan is moet een led gaan knipperen (label Alarm1)
Ook wanneer de puls op de ingang te lang (laag) is moet het ledje gaan knipperen (label Alarm2)
In beide gevallen moet het ledje uitgezet worden met een aparte ingang (RST). Zo niet dan moet het programma in het label alarm(1of2) blijven.
Deze code heb ik gebruikt, maar er klopt weer weinig van.
Het is ook niet af, maar tips kan ik altijd gebruiken
Alvast bedankt!
Device 16f628
; de CONFIG moet ik handmatig instellen op de ChipMax Device Programmer
; Interne XTAL wordt gebruikt
ALL_DIGITAL TRUE
Clear
PORTA = %00000000
PORTB = %00000000
TRISA = %00001111
TRISB = %00000000
Symbol IN1= porta.0 ; Input 1 (Puls)
symbol IN2= Porta.1 ; Input 2 (Puls)
symbol ACT= porta.2 ; Activeren ingangen
symbol RST= PORTA.3 ; Reset knop voor het alarm
symbol Uitgang= portb.1 ; Output Puls
SYMBOL LedOut= portb.3 ; Led uitgang voor alarm
Symbol MinPuls= 75 ; Min duur voor geldige puls op ingang in ms
Symbol MaxPuls= 125 ; Max duur voor geldige puls op ingang in ms
Symbol AlarmPuls= 1000 ; Als de puls hoger is dan alarm
dim Puls as word ; Kan tot meer dan 65.000 ms tellen
Clear
While 1=1
; IN1 + IN2 Als beide ingangen tegelijk laag zijn dan Alarm (ledout) tot dat
; er op reset gedrukt wordt
If 1In=0 and 2IN=0 then
goto Alarm1
Endif
; IN1 puls
While IN1= 0 AND ACT= 0
Puls= Pulsin 1in, 1
If Puls >MinPuls And Puls <maxpuls then
pulsout UITgang, 400000, high ; Puls op uitgang PulsUit van 100 mS
Delayms 150
endif
If puls > AlarmPuls then
goto Alarm2
Else break
Endif
Wend
;IN2
While IN2= 0 And ACT= 0
Puls= pulsin 2IN, 1
if Puls >MinPuls And puls <maxpuls then
Pulsout uitgang, 400000, high ; periode checken moet 100ms zijn
delayms 250 ; pauze tussen de twee pulsen
Pulsout uitgang, 400000, high ; periode checken moet 100ms zijn
Else break
Endif
If puls > AlarmPuls then
goto Alarm2
Endif
Wend
Alarm1:
toggle Ledout
delayms 500
Alarm2:
Toggle ledout
delayms 1000
Wend
~Galaxy
In the beginning there was nothing.... and even that exploded...