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 

Je mist een "vangnet" onder je procures, in de vorm van een Goto ...