@ 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
@ 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
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.
@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)
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.
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
Special Member
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
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
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.
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.
Special Member
Misschien dat picbasic geen haakjes toestaat. (zou uiterst vreemd zijn, maar ik gebruik geen picbasic...)
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
Golden Member
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
Special Member
Het is dan de eerste compiler die ik tegenkom die dit niet ondersteunt...
@diebobo; moet je helaas teleurstellen heb jou idee toegepast maar werkt niet.
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.
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
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é.
waar ik als benieuwd naar ben is voor welke programma u zou kiezen.
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.
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.