timing

@ Henk in het progje van Lambiek wordt gevraagd of s1 hoog is s2 hoog is enz
maar....dat zijn ze al door de pullups
Je moet vragen of laag zijn en dan aktie
Gr Johan

Lambiek

Special Member

Op 18 juli 2017 10:16:52 schreef Johannes..54:
@henk stuur de led aan met het commando high led1 en low led1 ipv led1 = 1 en led1 = 0

Digitale elektronica werkt nu eenmaal met 1 of 0. :)

Op 18 juli 2017 11:39:04 schreef Johannes..54:
@ Henk in het progje van Lambiek wordt gevraagd of s1 hoog is s2 hoog is enz., maar....dat zijn ze al door de pullups Je moet vragen of laag zijn en dan aktie
Gr Johan

Daar heb ik het al een keer over gehad, zelf gebruik ik dat nooit. Vandaar dat het waarschijnlijk niet werkt bij zeeman..59. Ik gebruik altijd externe pull down weerstanden.

Als je haar maar goed zit, GROETEN LAMBIEK.

@Brandon;
had nog niet naar deel 3 gekeken, heb aanpassing toegepast en kwam muziek in de schakeling alleen nog niet zoals ik wil.
Na veel getob ben ik weer begonnen bij nul en is het muntje gevallen.
Waar ik de bietenbrug op ging is met 1 en 0.
Van huis uit ben ik elektro monteur, dus voor mij 1 in en 0 uit hier is de omgekeerde wereld.

@Lambiek
Ook ik gebruik externe pulldown weerstanden.

alles werkt nu zoals het moet.

Hallo Zeeman..59,

In de digitale elektronica is de logische '1' aan en heeft de potentiaal van voedingsspanning. Bij jouw zal dat waarschijnlijk 5 volt zijn. En een logische '0' is over het algemeen 0 volt.

Door het gebruik te maken van pull-up of pull-down weerstand kan je een proces laten trigeren op de logische '0' of '1'. Als de schakelaar bedient wordt wanneer er een pull-down weerstand gebruikt is wordt de ingang van de chip een logische '1'. Aangezien de schakelaar aan de 5 volt hangt. Zie deze link voor wat extra info.

In ieder geval mooi dat het nu werkt.

Brandon

ben weer met de volgend uitdaging aan de gang.

heb onderstaand schema gemaakt, uiteraard met pullup weerstand.

bedoeling is dat ik het programma automatisch als handmatig(voetmatig)ga bedienen.
stand 1 voetmatig en stand 2 automatisch.

allen werkt stand 1 niet goed hier moet iets van pullup moeten gebeuren.
zowel op de connector als voetpedaal.

wil niet echt lukken in stand 1 kan ook weinig hier over vinden.

iemand enig idee.(kan dit überhaupt)

Lambiek

Special Member

Dat gaat niet werken zo, de wisselschakelaar trekt het signaal naar de gnd dus als je een signaal aan de andere kant aanbied gebeurt er niets.

Je moet je voetpedaal op een aparte ingang zetten, en dan kun je met je wisselschakelaar selecteren of je programma in hand of auto modus staat.

Als je haar maar goed zit, GROETEN LAMBIEK.

Na veel getob met automatisch/handmatig en voetpedaal ben ik tot onderstaand programma gekomen.
Om mijn eigen onzekerheid weg te nemen zou ik willen vragen of er iemand een kritische blik op kan werpen.

Het zou allemaal goed moeten werken alleen in stand s4 blijft hij hangen.
Weet niet of het aan het programma ligt of aan de opbouw op steekbord.

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 heeft nu de naam LED1
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         ; voet pedaal

;        76543210
PORTA = %00000001             ; Zet poort a.0 hoog bij het opstarten (LED1 = 1)
TRISA = %11111111             ; Zet poort a.1, a.2, a.3, a.4 en a.5 ingang
TRISB = %11111111             ; Zet poort b.3, b.2, b.1 en b.0 ingang       

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

RUN:                          ; Oneindige lus

  If S1 = 1 Then              ; Als S1 aan is dan...
   If Hand = 1 And Voet = 1 Or 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
 
  If S2 = 1 Then              ; Als S2 aan is dan...
   If Hand = 1 And Voet = 1 Or Auto = 1 Then
    LED1 = 1                  ; LED1 aan
     DelayMS 500              ; Led1 uit na 0,5 sec
    LED1 = 0                  ; Led1 uit
     DelayMS 500  
  EndIf
 EndIf                       
 
  If S3 = 1 Then              ; Als S3 aan is dan...
   If Hand = 1 And Voet = 1 Or Auto = 1 Then
    LED1 = 1                  ; LED1 aan
     DelayMS 1000             ; Led1 na 1 sec uit
    LED1 = 0                  ; Led1 uit 
     DelayMS 1000 
  EndIf
 EndIf

If S4 = 1 Then                ; Als S4 aan is dan...
   If Hand = 1 And Voet = 1 Or Auto = 1 Then
    LED1 = 1                  ; LED1 aan
     DelayMS 2000             ; Led1 na 2 sec uit
    LED1 = 0                  ; Led1 uit 
     DelayMS 2000 
  EndIf
 EndIf
 
 If S5 = 1 Then               ; Als S5 aan is dan...
   If Hand = 1 And Voet = 1 Or Auto = 1 Then
    LED1 = 1                  ; LED1 aan
     DelayMS 3000             ; Led1 na 3 sec uit
    LED1 = 0                  ; Led1 uit 
     DelayMS 3000 
  EndIf
 EndIf
 
  If S6 = 1 Then              ; Als S6 aan is dan...
   If Hand = 1 And Voet = 1 Or Auto = 1 Then
     LED1 = 1                 ; LED1 aan
      Else                    ; anders
     LED1 = 0                 ; Led1 uit
  EndIf                       
 EndIf
 
GoTo RUN
 
End                           ; Einde programma      

Het is meestal wel verstandig om wat haakjes te gebruiken bij vergelijkingen. Dan weet je zeker dat de compiler de boel goed uitlegt.
Is trouwens voor jezelf ook overzichtelijker. Compiler zou dit:

code:


   If Hand = 1 And Voet = 1 Or Auto = 1 Then

uit kunnen leggen als:

code:


   If (Hand = 1 And Voet = 1) Or Auto = 1 Then

maar ook als:

code:


   If Hand = 1 And (Voet = 1 Or Auto = 1) Then
Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Hr Zeeman, alle poorten zijn gedefinieerd als ingangen !

TrisA .........

Auto is waarschijnlijk niet bruikbaar als variabele ,maar een beschermde opdracht ( blijft blauw) in de code.

Gr Johannes

Lambiek

Special Member

Probeer er nu eens wat structuur in te brengen, er staan weer dingen verkeerd.

Je zet bijv. dit neer.

pic basic code:


Symbol LED1 = PORTA.0 
        ;76543210
TRISA = %11111111

Je wilt LED1 als uitgang hebben, en vervolgens definieer je PORTA.0 als ingang.

En waarom zet je wel PORTA, TRISA en TRISB neer, maar je zet niet PORTB neer. Structuur is alles bij programmeren, en daar schort het nog een beetje aan.

En je komt in het begin met een voorbeeld van een hand-auto schakelaar en een voetpedaal, en nu zijn het ineens zes losse schakelaars een voetpedaal, een handschakelaar en een auto schakelaar. Zoals je het nu opgebouwd hebt, heeft het totaal geen zin. Eerst moet je een keuze maken tussen hand en automatisch, en binnen één van die keuzes ga je je ding doen.

Van huis uit ben ik elektro monteur,.........

Dan heb je dus wel eens aan een machine gesleuteld, denk daar eens aan terug hoe dat precies werkte. En dat zet je om in software.

Als je haar maar goed zit, GROETEN LAMBIEK.

pfhh.
Heb aanwijzingen gelezen moet het even laten inwerken.

Om spraakverwarring over, hand/auto en voet te voorkomen voetpedaal kan alleen gebruikt worden als de wisselschakelaar in stand hand staat.(voetpedaal kan ook een drukknop zijn. Beestje moet een naam hebben)

Zo heb ik het gemaakt naar aanleiding van de post van20 jullie.

verilog code:


If (Hand = 1 And Voet = 1) Or Auto = 1 Then

@arco: dat klinkt logisch tussen haakje zetten.
waar kan ik dit terug vinden, als ik dit
tussen haakjes zet gaat het niet werken.
dan geeft compiler fout melding.

Misschien dat picbasic geen haakjes toestaat. (zou uiterst vreemd zijn, maar ik gebruik geen picbasic...)

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

Special Member

Die haakjes werken niet in dit geval, die kun je wel gebruiken als je berekeningen maakt.

Bijv. zo.

pic basic code:


waarde = (var1-243)*1.16
Als je haar maar goed zit, GROETEN LAMBIEK.

Volgens mij werken haakjes wel ( en noodzakelijk ), maar wel met een IF er bij :

pic basic code:

If (Hand = 1 And Voet = 1) Or If Auto = 1 Then

Het is dan de eerste compiler die ik tegenkom die dit niet ondersteunt...

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

@diebobo; moet je helaas teleurstellen heb jou idee toegepast maar werkt niet.

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.