hoi
hoe kan ik deze code verkleinen en hoe zorg ik dat iets maar 5 x loopt ?

de code is de volgende :

   include 16c84_10
   include jlib
   port_a_direction = all_output
   port_b_direction = all_output

	forever loop
	if pin_a2 == high then iwan1 end if
	if pin_a3 == high then iwan2 end if
	if pin_a4 == high then iwan3 end if
	end loop

	procedure iwan1 
	pin_a1 = low
	pin_b0 = low
	delay_1ms(10)	
	pin_b0 = high
	pin_b1 = low
	delay_1ms(10)
	pin_b1 = high
	pin_b2 = low
	delay_1ms(10)
	pin_b2 = high
	pin_b3 = low
	delay_1ms(10)
	pin_b3 = high
	pin_b4 = low
	delay_1ms(10)
	pin_b4 = high
	pin_b5 = low
	delay_1ms(10)
	pin_b5 = high
	pin_b6 = low
	delay_1ms(10)
	pin_b6 = high
	pin_b7 = low	
	delay_1ms(10)
	pin_b7 = high
	end procedure
	
	procedure iwan2	
	pin_a0 = low
	pin_b7 = low
	delay_1ms(10)	
	pin_b7 = high
	pin_b6 = low
	delay_1ms(10)
	pin_b6 = high
	pin_b5 = low
	delay_1ms(10)
	pin_b5 = high
	pin_b4 = low
	delay_1ms(10)
	pin_b4 = high
	pin_b3 = low
	delay_1ms(10)
	pin_b3 = high
	pin_b2 = low
	delay_1ms(10)
	pin_b2 = high
	pin_b1 = low
	delay_1ms(10)
	pin_b1 = high
	pin_b0 = low	
	delay_1ms(10)
	pin_b0 = high
	end procedure
	
	procedure iwan3
	pin_b0 = low
	pin_b1 = low
	pin_b2 = low
	pin_b3 = low
	pin_b4 = low
	pin_b5 = low
	pin_b6 = low
	pin_b7 = low
	delay_10ms(2)
	pin_b0 = high
	pin_b1 = high
	pin_b2 = high
	pin_b3 = high
	pin_b4 = high
	pin_b5 = high
	pin_b6 = high
	pin_b7 = high
	end procedure

tnx!!
groetjes , iwan

Bekijk in de JAL doc de instructie: 'For n Loop' eens waarbij n staat voor het aantal keren dat de routine uitgevoerd moet worden.

/edit. Ik had jouw code iets te vluchtig gelezen, dus het is maar een half antwoord.

[Bericht gewijzigd door Prutsertje op ]


	procedure iwan3
	pin_b0 = low
	pin_b1 = low
	pin_b2 = low
	pin_b3 = low
	pin_b4 = low
	pin_b5 = low
	pin_b6 = low
	pin_b7 = low
	delay_10ms(2)
	pin_b0 = high
	pin_b1 = high
	pin_b2 = high
	pin_b3 = high
	pin_b4 = high
	pin_b5 = high
	pin_b6 = high
	pin_b7 = high
	end procedure

Wat bovenstaande code betreft: je kunt de poorten in 1 keer hoog of laag maken ipv pin voor pin.


procedure iwan3
  port_a = 0x00
  delay_10ms(2)
  port_b = 0xFF
end procedure

> hoe kan ik deze code verkleinen

ik zie de structuur niet in wat je allemaal doet op poort_b? misschien kan je vakere meerdere bits in 1 keer zetten. Misschie kan je de bits zo over a en b verdelen dat je altijd maar in 1 poort hoeft te veranderen. Je doet bijna altijd een verandering avn poort_b en dan wat wachten, dus dat zou ik combineren in 1 procedure.

verder zou ik al die iwans voor de main loop plaatsen, zoals het nu staat compileert het niet.

> hoe zorg ik dat iets maar 5 x loopt ?

ik snap je vraag niet

als je iets maar 5 keer wilt doen lopen moet je de for next loop gebruiken

for x=5 x++ (ken jal syntax hiervan niet zoek het op
dan je programma

next

dan gaat hij bij iedere keer dat x nog niet gelijk zijn aan 5 1tje bijtellen en prog uitvoeren tot x=5

edit: moet je wel ergens zetten dat x=0 is eerst

is der niets mogelijk van bv
0b_0000_0001
delay_1s(1)

zoiets op die aard dat ik zeg welke uitgangen hoog en laag zijn maar in 1 regeltje dan maar

Als je iets 5 keer wilt laten loopen doe je:

for 5 loop

code bla bla

end loop

Op 7 maart 2004 11:44:45 schreef terrorfeary:
is der niets mogelijk van bv
0b_0000_0001
delay_1s(1)

zoiets op die aard dat ik zeg welke uitgangen hoog en laag zijn maar in 1 regeltje dan maar

Inderdaad. Als bijvoorbeeld pin b6 en b0 hoog moeten zijn, gebruik je:


port_b = 0b_0100_0001
            |||| ||||
            |||| ||||
        bit 7654 3210

ok dan kan ik mijn code eens gaan herschrijven zo :)


pic microcontroler project 1 : looplicht

   include 16c84_10
   include jlib
   port_a_direction = all_output
   port_b_direction = all_output

	forever loop
	if pin_a2 == high then iwan1 end if
	if pin_a3 == high then iwan2 end if
	if pin_a4 == high then iwan3 end if
	end loop

	procedure iwan1 
	for 5 loop
	port_b = 0b_0000_0001
	delay_1ms(2)
	port_b = 0b_0000_0010
	delay_1ms(2)
	port_b = 0b_0000_0100
	delay_1ms(2)
	port_b = 0b_0000_1000
	delay_1ms(2)
	port_b = 0b_0001_0000
	delay_1ms(2)
	port_b = 0b_0010_0000
	delay_1ms(2)
	port_b = 0b_0100_0000
	delay_1ms(2)
	port_b = 0b_1000_0000
	delay_1ms(2)
	end loop
	end procedure
	
	procedure iwan2	
	for 5 loop
	port_b = 0b_1000_0000
	delay_1ms(2)
	port_b = 0b_0100_0000
	delay_1ms(2)
	port_b = 0b_0010_0000
	delay_1ms(2)
	port_b = 0b_0001_0000
	delay_1ms(2)
	port_b = 0b_0000_1000
	delay_1ms(2)
	port_b = 0b_0000_0100
	delay_1ms(2)
	port_b = 0b_0000_0010
	delay_1ms(2)
	port_b = 0b_0000_0001
	delay_1ms(2)
	end loop
	end procedure
	
	procedure iwan3
	for 5 loop
	port_b = 0b_1111_1111
	delay_1ms(2)
	port_b = 0b_0000_0000
	delay_1ms(2)
	end loop
	end procedure

zo zou het dus ook moete werken ? het hele programma

Inderdaad, maar de delay zal wel wat groter moeten. Met een delay van 2 ms zal dat looplicht bijna niet zichtbaar zijn.

Op 7 maart 2004 16:02:11 schreef terrorfeary:


pic microcontroler project 1 : looplicht

   include 16c84_10
   include jlib
   port_a_direction = all_output
   port_b_direction = all_output

	forever loop
	if pin_a2 == high then iwan1 end if
	if pin_a3 == high then iwan2 end if
	if pin_a4 == high then iwan3 end if
	end loop

	procedure iwan1 
	for 5 loop
	port_b = 0b_0000_0001
	delay_1ms(2)
	port_b = 0b_0000_0010
	delay_1ms(2)
	port_b = 0b_0000_0100
	delay_1ms(2)
	port_b = 0b_0000_1000
	delay_1ms(2)
	port_b = 0b_0001_0000
	delay_1ms(2)
	port_b = 0b_0010_0000
	delay_1ms(2)
	port_b = 0b_0100_0000
	delay_1ms(2)
	port_b = 0b_1000_0000
	delay_1ms(2)
	end loop
	end procedure
	
	procedure iwan2	
	for 5 loop
	port_b = 0b_1000_0000
	delay_1ms(2)
	port_b = 0b_0100_0000
	delay_1ms(2)
	port_b = 0b_0010_0000
	delay_1ms(2)
	port_b = 0b_0001_0000
	delay_1ms(2)
	port_b = 0b_0000_1000
	delay_1ms(2)
	port_b = 0b_0000_0100
	delay_1ms(2)
	port_b = 0b_0000_0010
	delay_1ms(2)
	port_b = 0b_0000_0001
	delay_1ms(2)
	end loop
	end procedure
	
	procedure iwan3
	for 5 loop
	port_b = 0b_1111_1111
	delay_1ms(2)
	port_b = 0b_0000_0000
	delay_1ms(2)
	end loop
	end procedure

zo zou het dus ook moete werken ? het hele programma

Wat zegt Wouter nu?

verder zou ik al die iwans voor de main loop plaatsen, zoals het nu staat compileert het niet.

;)

oepz daar had ik over geleze :)

en wat zei wouter nog meer?

Op 7 maart 2004 07:36:01 schreef Wouter van Ooijen:
> hoe kan ik deze code verkleinen

Je doet bijna altijd een verandering avn poort_b en dan wat wachten, dus dat zou ik combineren in 1 procedure.

http://members.lycos.nl/verlorenzielen/PIC%20schema.JPG

hier staat het schema dat ik aan deze code wil koppelen , kunnen jullie me vertellen als het zal werken of waar de fouten zitten ?

ps de diode's op de tekening moet een diode brug worden maar die stond niet in de componeten bib van eagle

de code :

pic microcontroler project 1 : looplicht

   include 16c84_10
   include jlib
   port_a_direction = all_output
   port_b_direction = all_output


	procedure iwan1 
	for 5 loop
	port_b = 0b_0000_0001
	delay_1ms(2)
	port_b = 0b_0000_0010
	delay_1ms(2)
	port_b = 0b_0000_0100
	delay_1ms(2)
	port_b = 0b_0000_1000
	delay_1ms(2)
	port_b = 0b_0001_0000
	delay_1ms(2)
	port_b = 0b_0010_0000
	delay_1ms(2)
	port_b = 0b_0100_0000
	delay_1ms(2)
	port_b = 0b_1000_0000
	delay_1ms(2)
	end loop
	end procedure
	
	procedure iwan2	
	for 5 loop
	port_b = 0b_1000_0000
	delay_1ms(2)
	port_b = 0b_0100_0000
	delay_1ms(2)
	port_b = 0b_0010_0000
	delay_1ms(2)
	port_b = 0b_0001_0000
	delay_1ms(2)
	port_b = 0b_0000_1000
	delay_1ms(2)
	port_b = 0b_0000_0100
	delay_1ms(2)
	port_b = 0b_0000_0010
	delay_1ms(2)
	port_b = 0b_0000_0001
	delay_1ms(2)
	end loop
	end procedure
	
	procedure iwan3
	for 5 loop
	port_b = 0b_1111_1111
	delay_1ms(2)
	port_b = 0b_0000_0000
	delay_1ms(2)
	end loop
	end procedure

	forever loop
	if pin_a2 == high then iwan1 end if
	if pin_a3 == high then iwan2 end if
	if pin_a4 == high then iwan3 end if
	end loop
           

TNX iig

groetjes , iwan