Hallo
Het probleem is een spoor baan
er zijn twee bezet melders S1 en S2
een bezet detect
een vrijgave uitgang
met bezet detect word gekeken of het baan vak vrij is door de vrijgave van de volgende schakeling te bekijken.
Wat ik nu zou willen berijken is
een trein komt op S1 en dan word de PWM gestart (geen probleem dat heb ik software matig in de hand).
dan moet de PWM schakeling langzaam van 100% terug lopen naar 10 %
zolang de trein rijd word hij langzamer tot aan S2
dan moet de PWM terug naar 100% omdat de trein dan eigenlijk uit het baanvak is en als hij stil blijft staan voor een signaal moeten de lampjes voluit branden.
optrekken gaat hetzelfde maar dan vanuit een PWM die van 10% vertrekt naar 100% tot weer S2 bedient word.
de PWM moet eigenlijk niet heel stabiel verlopen zoals bij een servo omdat hij een motor aan stuurt .dus de inwendige Xtal is vrij voldoende .
hierbij het reeds geprogrameerde stukje
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
Symbol OFF = 0 ;UIT
Symbol On = 1 ;AAN
Dim tijd as byte
Dim a as byte
Tijd = 10
S1=PORTB.0
S2=PORTB.1
Symbol trein = PORTB.3 ;Poort B.3 heeft nu de naam trein ,uitgang pwm van de processor
Symbol LEDrood = PORTA.1 ;Poort A.1 heeft nu de naam LEDrood
Symbol LEDgroen = PORTA.3 ;Poort A.3 heeft nu de naam LEDgroen
Symbol bezetmelder = PORTA.4 ;Poort A.4 heeft nu de naam bezetmelder
Symbol bezetdetect = PORTB.2 ;Poort B.2 heeft nu de naam bezetdetect
; 76543210
PORTA = %11100000
TRISA = %11100000 ;Alleen PORTA.0 - porta.4 als uitgang portA.5 word een bezetdetect porta.6 vrijgave
TRISB = %11101111 ;Dit zijn nu allemaal ingangen behalve poort B.3
PortB_Pullups On ;On-chip pull-up weerstanden actief
Clear ;Wis alle RAM geheugen
Trein = on
Init:
While 1 = 1 ;Oneindige lus
IF S1 = off and S2=off then ledgroen =on ELSE ledgroen =off
If S1=on OR S2 = on then bezetmelder =on ELSE bezetmelder =off
If S1=on and S2 = on then wend
If S1=on Then goto pwmstart
wend
pwmstart:
WHILE 1=1
bezetmelder= on
ledrood =on and ledgroen = off
for a = a -tijd
if pulson = 10 then a=10
pulson =100 -a
if pulson> 10 then trein = on
trein =on
pause pulson
pulsoff =(100 -pulson )
trein = off
pause pulsoff
next b
IF S2=on then goto init
Wend
End:
Trein = on
Goto init
hier heb ik een pwm proberen te maken met wat ik wel ken van vroeger nog.
Iemand een idee en eventueel een helpend handje
Dit heb ik aan basic vroeger nooit gehad want toen bestond deze instructie nog niet .
Hallo
Ik denk reeds een oplossing gevonden te hebben
Wie zoekt die vind en wie orde en netheid heeft is te lui om te zoeken en lui ben ik zeker niet
hier de oplossing
pic basic code:
Device 16F628A ;Gebruik een 16F628A type
;als een trein binnen komt en S1 hoog maakt dan start het aftellen van de pwm tot 15%
;als de trein S2 raakt word pwm meteen terug 255 en de loop start terug opnieuw
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
All_Digital TRUE ;Alle ingangen digitaal
Dim duty As Word
Symbol S1 = PORTB.0 ;Poort B.0 heeft nu de naam S1
Symbol S2 = PORTB.1 ;Poort B.1 heeft nu de naam S2
PORTA = %11100000
TRISA = %11100000 ;Alleen PORTA.0 - porta.4 als uitgang portA.5 word een bezetdetect porta.6 vrijgave
TRISB = %11111011 ;Dit zijn nu allemaal ingangen behalve poort 2B.2
PortB_Pullups On ;On-chip pull-up weerstanden actief
Clear ;Wis alle RAM geheugen
begin:
While 1 = 1 ;Oneindige lus
PWM PORTB.2 , 255 , 5000
if S1=0 then goto verder
if s1 =1 and s2 =1 then goto begin
if s1 =1 then goto pwmsignaal
wend
verder:
PWM PORTB.2 , 255 , 7 ; ²het pwm signaal blijft op volle sterkte dus de trein rijd volluit
goto begin
pwmsignaal:
For duty = 255 To 15 Step -1
PWM PORTB.2 , duty , 7
Next
GoTo begin
Kan ik nu ook eventueel poort A.0 gebruiken ????
Ik wil dit doen daar ik dan geen verschillende printjes moet laten maken .
Of anders moet ik de software in de andere pic's ook aan passen zodat ik een uniforme programmatie heb .
Gr Raf
[Bericht gewijzigd door Henry S. op dinsdag 21 januari 2014 00:58:53 (23%)