timing


Lambiek

Special Member

Ik heb het op verschillende manieren geprobeerd, maar de haakje pikt hij op deze manier niet. Dan kan ook liggen aan hoe and en or gebruikt wordt.

Anders doe je het zo.

pic basic code:


LED1 = 0
 
RUN:

   If HAND = 1 Then
    If VOET = 1 Then 
     LED1 = 1
      Else LED1 = 0
    EndIf
   EndIf
   
   If AUTO = 1 Then
    If VOET = 1 Then
     LED1 = 1
      Else LED1 = 0
    EndIf
   EndIf  
GoTo RUN
 
End

Dit vindt ik trouwens ook logies, want nu kun je onderscheid maken tussen hand en automatisch.

Ik weet alleen niet wat je met automatisch wil gaan doen?, want nu gebeurd het zelfde bij hand en auto.

Als je haar maar goed zit, GROETEN LAMBIEK.

8)7 hoe krijg je een beginnende leek gek.:)

@Lambiek, heb jou opzet vertaald naar mijn programma zoals ik het wil maken.

Als de wisselschakelaar in stand hand staat kan het programma alleen werken als het voetpedaal wordt bedient.

Als de wisselschakelaar in stand auto staat werkt het programma continu.

Waar ik nu als leek benieuwd naar ben is welk programma heeft de voorkeur van de specialisten van het forum.

Is dat het programma zoals die hier eerder op het topic is neergezet of uitgewerkte voorbeeld van Lambiek hier onder.

pic basic code:


Device 16F628A                 ; Gebruik een 16F628A type
Config INTRC_OSC_NOCLKOUT,_
                  WDT_OFF,_ 
                  PWRTE_ON,_ 
                  LVP_OFF,_ 
                  MCLRE_OFF
 
All_Digital TRUE              ; Alle ingangen digitaal
Xtal = 4                      ; intern kristal
  
Symbol LED1 = PORTA.0         ; poort A.0 is LED1 (wordt pc817 die buz11 schakeld)
Symbol S1   = PORTA.4         ; poort A.4 is S1
Symbol S2   = PORTA.5         ; poort A.5 is S2
Symbol S3   = PORTB.0         ; poort B.0 is S3
Symbol S4   = PORTB.1         ; poort B.1 is S4 
Symbol S5   = PORTB.2         ; poort B.2 is S5
Symbol S6   = PORTB.3         ; poort B.3 is S6
                              ; S1,S2,S3,S4,S5 en S6 is een 6 standen draaischakelaar                              
Symbol Hand = PORTA.2         ; stand handmatig.
Symbol Auto = PORTA.3         ; stand automatisch.
                              ; hand/auto is wisselschakelaar met nul stand
Symbol Voet = PORTA.1         ; voetpedaal

;        76543210
PORTA = %00000001             ; Zet poort a.0 hoog bij het opstarten (LED1 = 1)
TRISA = %11111110             ; Zet poort a.0, uitgang Led1

PORTB = %11111111             ; Zet poort b hoog
TRISB = %11111111             ; Zet poort b.3, b.2, b.1 en b.0 ingang       

Clear                         ; Wis alle RAM geheugen
 
;Hoofdprogramma.
LED1 = 1

RUN:                          

  If S1 = 1 Then              
   If Auto = 1 Then
    LED1 = 1                  
     DelayMS 250             
    LED1 = 0                     
     DelayMS 250              
  EndIf 
 EndIf
 
 If S1 = 1 Then              
   If Hand = 1 Then
    If Voet = 1 Then
    LED1 = 1                  
     DelayMS 250              
    LED1 = 0                     
     DelayMS 250              
  EndIf 
 EndIf
EndIf 
  
  If S2 = 1 Then              
   If Auto = 1 Then 
    LED1 = 1                  
     DelayMS 500              
    LED1 = 0                  
     DelayMS 500  
  EndIf
 EndIf 
                        
  If S2 = 1 Then
   If Hand = 1 Then
    If Voet = 1 Then
    LED1 = 1                  
     DelayMS 500              
    LED1 = 0                  
     DelayMS 500  
  EndIf
 EndIf
EndIf                                              
 
  If S3 = 1 Then              
   If Auto = 1 Then
    LED1 = 1               
     DelayMS 1000             
    LED1 = 0                   
     DelayMS 1000 
  EndIf
 EndIf
 
 If S3 = 1 Then              
   If Hand = 1 Then
    If Voet = 1 Then
    LED1 = 1                  
     DelayMS 1000             
    LED1 = 0                  
     DelayMS 1000 
  EndIf
 EndIf
EndIf

If S4 = 1 Then                
   If Auto = 1 Then
    LED1 = 1                  
     DelayMS 2000             
    LED1 = 0                   
     DelayMS 2000 
  EndIf
 EndIf
 
 If S4 = 1 Then                
  If Hand = 1 Then
   If Voet = 1 Then
    LED1 = 1                  
     DelayMS 2000             
    LED1 = 0                  
     DelayMS 2000 
  EndIf
 EndIf
EndIf
 
 If S5 = 1 Then               
   If Auto = 1 Then
    LED1 = 1                  
     DelayMS 3000             
    LED1 = 0                   
     DelayMS 3000 
  EndIf
 EndIf
 
 If S5 = 1 Then               
   If Hand = 1 Then
    If Voet = 1 Then
    LED1 = 1                  
     DelayMS 3000             
    LED1 = 0                   
     DelayMS 3000 
  EndIf
 EndIf
EndIf 
 
 If S6 = 1 Then              
  If Auto = 1 Then
     LED1 = 1                 
      Else LED1 = 0                   
     EndIf                       
    EndIf

 If S6 = 1 Then
  If Hand = 1 Then
   If Voet = 1 Then
    LED1 = 1
     Else LED1 = 0
    EndIf
   EndIf 
  EndIf 
 
GoTo RUN
 
End                           ; Einde programma      

Lambiek

Special Member

Werkt het nu?

Is dat het programma zoals die hier eerder op het topic is neergezet of uitgewerkte voorbeeld van Lambiek hier onder.

Er leiden vele wegen naar Rome hé. :)

Als je haar maar goed zit, GROETEN LAMBIEK.

op een paar schoonheidsfoutjes na werkt het.

waar ik als benieuwd naar ben is voor welke programma u zou kiezen.

Lambiek

Special Member

Op 26 juli 2017 23:43:45 schreef zeeman..59:
waar ik als benieuwd naar ben is voor welke programma u zou kiezen.

U is gewoon jij hoor. :)

Het maakt niet zoveel uit welk programma je kiest, het moet werken daar gaat het om toch. En iedereen heeft wel een beetje een eigen manier van programmeren, de één gebruikt dit en de ander dat. Ik gebruik bijv. nooit WHILE en WEND, werk altijd met GOTO en GOSUB. Dat is misschien dom van me, maar dat vindt ik het lekkerste werken. En misschien wordt je code daar iets langer van, maar dat is dan maar zo.

Als je haar maar goed zit, GROETEN LAMBIEK.

Door omstandige heden heeft het project even stilgelegen.
Heb nu weer de gelegenheid om verder te gaan met het project.

@Lambiek, het aanspreken met u is er vroeger ingeramd dus het zal reelmatig voorkomen dat ik nog steeds u zal zeggen.

pic basic code:


Device 16F628A                 ; Gebruik een 16F628A type
Config INTRC_OSC_NOCLKOUT,_
                  WDT_OFF,_ 
                  PWRTE_ON,_ 
                  LVP_OFF,_ 
                  MCLRE_OFF
 
All_Digital TRUE              ; Alle ingangen digitaal
Xtal = 4                      ; intern kristal

Declare LCD_ENPin = PORTA.7   ;De EN aansluiting moet nu aan PORTA.0
Declare LCD_RSPin = PORTA.6   ;De RS aansluiting moet nu aan PORTA.7
  
Symbol LED1 = PORTA.1         ; poort A.1 is LED1 (wordt pc817 die buz11 schakeld)
Symbol LED2 = PORTA.0         ; poort A.0 is LED1 (wordt pc817 die buz11 schakeld)

Symbol S1   = PORTA.2         ; poort A.2 is S1
Symbol S2   = PORTA.3         ; poort A.3 is S2
Symbol S3   = PORTA.4         ; poort A.4 is S3
Symbol S4   = PORTA.5         ; poort A.5 is S4 
Symbol S5   = PORTB.0         ; poort B.0 is S5
                              ; S1,S2,S3,S4 en S5 is een 6 standen draaischakelaar                              
Symbol Hand = PORTB.1         ; stand handmatig.
Symbol Auto = PORTB.2         ; stand automatisch; hand/auto is wisselschakelaar met nul stand
Symbol Voet = PORTB.3         ; voetpedaal

;        76543210
PORTA = %00000000             ; Zet poort a.0,1 hoog bij het opstarten (LED1 = 1)
TRISA = %11111100             ; Zet poort a.0,1 uitgang Led1,2

PORTB = %11111111             ; Zet poort b hoog
TRISB = %11111111             ; Zet poort b.3, b.2, b.1 en b.0 ingang       

Clear                         ; Wis alle RAM geheugen

;Hoofdprogramma.
Cls
Print At 1, 2, "zeeman.59 v.1" 

LED1 = 0

RUN:                          ; Oneindige lus
Print At 2, 2, " auto  250 ms "
  If S1 = 1 Then              ; Als S1 aan is dan...  
   If Auto = 1 Then   
    LED1 = 1                  ; LED1 aan
     DelayMS 250              ; Led1 uit na 0,25 sec
    LED1 = 0                  ; Led1 uit   
     DelayMS 250              ; Led aan na 0,25 sec           
  EndIf 
 EndIf

Print At 2, 2, " hand  250 ms "  
  If S1 = 1 Then              ; Als S1 aan is dan...
   If Hand = 1 Then
    If Voet = 1 Then   
    LED1 = 1                  ; LED1 aan
     DelayMS 250              ; Led1 uit na 0,25 sec
    LED1 = 0                  ; Led1 uit   
     DelayMS 250              ; Led aan na 0,25 sec      
  EndIf 
 EndIf
EndIf 

Print At 2, 2, " auto  500 ms "  
  If S2 = 1 Then              
   If Auto = 1 Then 
    LED1 = 1                  
     DelayMS 500              
    LED1 = 0                  
     DelayMS 500  
  EndIf
 EndIf 

Print At 2, 2, " hand  500 ms "                        
  If S2 = 1 Then
   If Hand = 1 Then
    If Voet = 1 Then
    LED1 = 1                  
     DelayMS 500              
    LED1 = 0                  
     DelayMS 500  
  EndIf
 EndIf
EndIf                                              

Print At 2, 2, " auto  1 sec " 
  If S3 = 1 Then              
   If Auto = 1 Then
    LED1 = 1               
     DelayMS 1000             
    LED1 = 0                   
     DelayMS 1000 
  EndIf
 EndIf

Print At 2, 2, " hand  1 sec " 
 If S3 = 1 Then              
   If Hand = 1 Then
    If Voet = 1 Then
    LED1 = 1                  
     DelayMS 1000             
    LED1 = 0                  
     DelayMS 1000 
  EndIf
 EndIf
EndIf

Print At 2, 2, " auto 2 sec "
If S4 = 1 Then                
   If Auto = 1 Then
    LED1 = 1                  
     DelayMS 2000             
    LED1 = 0                   
     DelayMS 2000 
  EndIf
 EndIf

Print At 2, 2, " hand 2 sec " 
 If S4 = 1 Then                
  If Hand = 1 Then
   If Voet = 1 Then
    LED1 = 1                  
     DelayMS 2000             
    LED1 = 0                  
     DelayMS 2000 
  EndIf
 EndIf
EndIf

Print At 2, 2, " auto 3 sec " 
 If S5 = 1 Then
  If Auto = 1 Then
    LED1 = 1
     DelayMS 3000
     LED1 = 0
    EndIf
   EndIf 

Print At 2, 2, " hand  3 sec "  
 If S5 = 1 Then                
  If Hand = 1 Then
   If Voet = 1 Then
    LED1 = 1                  
    DelayMS 3000             
    LED1 = 0               
  EndIf
 EndIf
EndIf 
 
GoTo RUN
 
End                               

Heb bovenstaand programma uitgebreid met een lcd scherm.
Zodat ik de instelling kan aflezen.
ben al een paar dagen bezig om dit goed te krijgen maar krijg het maar gedeeltelijk aan het werk.

In de stand auto krijg ik alles goed in het display.
Als ik de wisselschakelaar in de nul en/of hand stand zet gaat het display een eigen leven leiden.

Zie ongetwijfeld wat over het hoofd.
Wat doe ik hier niet goed.

Auto in de code is blauw gekleurd . Is waarschijnlijk een gereserveerd dus niet vrij te gebruiken woord. Probeer dat eens te veranderen. gr. Johan

Ook de definieering van de in en uitgangen goed zetten
Trisa =% 1111111 allemaal ingangen
Trisa =% 000000 allemaal uitgangen , zullen niet reageren op aangeboden veranderingen ,
Even corrigeren dus ......gr.Johan

paaltje73

Golden Member

Zet de printopdrachten na de eerste2 of 3 IF opdrachten.

Lambiek

Special Member

Auto mag je niet gebruiken, die is gereserveerd door het programma.

Dit mag dan weer wel AUTO_1, AUTO_2, AUTO_., enz.

En je print opdracht zet je zo neer.

pic basic code:


  If S1 = 1 Then                    ; Als S1 aan is dan...  
   If Auto = 1 Then 
    Print At 2, 2, " auto  250 ms "  
     LED1 = 1                       ; LED1 aan
     DelayMS 250                    ; Led1 uit na 0,25 s
    LED1 = 0                        ; Led1 uit   
   DelayMS 250                      ; Led aan na 0,25 s           
  EndIf 
 EndIf
Als je haar maar goed zit, GROETEN LAMBIEK.
paaltje73

Golden Member

Dat zeg ik, en AUTO kan je gewoon gebruiken.
De juiste, up to date, compiler gebruiken en bij twijfel ff opzoeken bij de protected keywords. Dat is het laatste stukkie van je Help documentatie.

Het werkt.
Maakt niet uit of ik auto of auto_1 gebruik.
Het frustrerende bij het bekijken van mijn aantekeningen blijkt dat ik het voorbeeld van lambiek al een keer heb toegepast maar niet werkt.
Waar dat in zit geen idee.

Lambiek

Special Member

Er hoeft maar iets anders te zijn en het werkt niet, maar wat werkt er nu wel en wat niet?

Als je haar maar goed zit, GROETEN LAMBIEK.

Alles werkt nu zoals ik ingedachte had.
Wat ik nog wil is als de keuze schakelaar in middenstand staat dat er in het display de maak keuze staat.
Dit is gedeeltelijk gelukt.

pic basic code:


Cls
Print At 1, 2, "zeeman.59 v.1"
Print At 2, 4, "maak keuze" 

Als ik de keuze in stand hand of auto zet verschijnt keurig hand of auto in display.
Als ik van hand/auto terug gaat naar middenstand keuze schakelaar blijft hand of auto in display staan.

Hangt af van waar in de code dat staat. Dan zou je de betreffende code moeten posten...

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

ga morgen eerst zelf nog wat uit proberen.

Mijn opmerkingen zijn misschien een kwestie van muggenziften over elegantie, dus negeer ze als je het verwarrend vindt.
Ik schrijf zelf bijna geen picbasic. De meeste programeertalen die ik ken, ondersteunen het volgende wel. Verbeter mij als ik de mist in ga.

De ingangen die je inleest (je schakelaars) zijn booleans. De paar programmeer talen die ik ken kunnen een boolean in een if constructie gebruiken zonder deze te vergelijken met een waarde. Volgende twee stukjes code reageren dan hetzelfde:

pic basic code:


If S1 then
    doe iets
EndIf

pic basic code:


If S1=1 then
    doe iets
EndIf

Voor de context, in het tweede voorbeeld staat iets in de zin van 'if true = true then'. Dat is natuurlijk een beetje een onzinnige vergelijking. Je kan evengoed de eerste true gebruiken om de if-constructie te sturen.
Verder kan je wat regels tekst besparen door ElseIf te gebruiken. Dan krijg je iets zoals het volgende:

pic basic code:


If S1 then
    doe iets als S1 aan is
ElseIf S2 then
    doe iets als S2 aan is
End

(of loop ik je cursus nu te verklappen? Want die constructie heb ik ook van picbasic.nl les 2 gehaald.)

Als je maar genoeg geinteresseerd ben, verwondert heel de wereld.

@Schock6805: Bedank voor de input.
Ik hou het even bij wat ik nu heb.
Programma werkt op klein dingetje na zoal ik wil.

Na twee dagen ploeteren en een slapeloze nacht heb ik mij er bij neergelegd dat het niet gelukt is om het te krijgen zoals ik wil.

Ik laat het voorlopig maar even rusten.(Misschien doe ik in de toekomst nog eens een poging)

Wil iedereen bedanken voor de input.

Lambiek

Special Member

Dat is toch zonde na al die inspanning, stuur me anders even een mailtje.

Als je haar maar goed zit, GROETEN LAMBIEK.
Lambiek

Special Member

Ik denk dat er bij mij of bij jou iets fout gegaan is, want ik heb nog niets ontvangen.

Als je haar maar goed zit, GROETEN LAMBIEK.

heb het verstuurd nar email in uw profiel