We moeten op school als project een robot bouwen. Deze willen we laten rijden met 2 servo's en aantsturen met een pic18f452. We willen het programma schrijven in JAL. Maar nu wil ik graag weten hoe ik deze het beste kan aansturen. Op de manier zoals hieronder te zien is gaat het niet omdat dan beide servo's vooruit draaien. En een servo heeft een puls nodig die korter is dan 1,5 ms om achteruit te rijden. Iemand enig idee hoe dit te realiseren is in JAL?

include f452_20
include jlib
include jdelay
port_a_direction = all_output
forever loop

pin_a0 = on
delay_10mS
pin_a1 = on
delay_100uS
pin_a0 = off
delay_10mS
pin_a1 = off
delay_100uS

end loop

niemand die enig idee heeft? Of zou dit met PWM moeten?

Ik neem aan dat het gehackte servo's zijn, dan is de resolutie niet zo belangrijk, dan red je het wel met delays. Maak het jezelf niet te moeilijk, stuur eerst een puls naar de ene servo en dan een puls naar de andere.

Als je echt een servo (naukeurig) wilt aansturen zou ik assembler (kan inline) of (beter) de PWM hardware gebruiken.

kijk even op de yahoo jallist, daar komen net ene paar posts langs over servo code in Jal.

het zijn idd gehackte servo's.
Maar het probleem is vooral dat beide servo's tegelijk moeten lopen om de robot vooruit te laten rijden. En daarvoor moet dus 1 servo achteruit en 1 servo vooruit lopen. (Beide servo's drijven apart een wiel aan) Ik heb dit getest met delays maar krijg steeds problemen met de delaytijd die nodig is om achteruit te rijden(kleiner dan 1.5mS).

Op 26 oktober 2005 11:45:51 schreef Wouter van Ooijen:
delays. Maak het jezelf niet te moeilijk, stuur eerst een puls naar de ene servo en dan een puls naar de andere.

Dit lijkt me dus onmogelijk om de robot vooruit te laten rijden. Hij zou dan continu rondjes gaan draaien.

Op 26 oktober 2005 13:01:20 schreef Manvsmachine:
[...]
Dit lijkt me dus onmogelijk om de robot vooruit te laten rijden. Hij zou dan continu rondjes gaan draaien.

Een servo regeert op de puls lengte, en die reactie blijft totaan de volgende puls (binnen 20 ms ofzo).

Ik snap het probleem voor < 1.5ms niet. Je neemt dan toch gewoon delay_100us( n )?

Heb je al op de jallist gekeken?

Op 26 oktober 2005 13:05:22 schreef Wouter van Ooijen:
[...]

Een servo regeert op de puls lengte, en die reactie blijft totaan de volgende puls (binnen 20 ms ofzo).

Ik snap het probleem voor < 1.5ms niet. Je neemt dan toch gewoon delay_100us( n )?

Heb je al op de jallist gekeken?

heb het getest met delay_100uS
en ook al op de jallist gekeken
maar ik snap het alleen niet helemaal hoe jij het dan bedoelt?

Op 26 oktober 2005 12:41:07 schreef Wouter van Ooijen:
kijk even op de yahoo jallist, daar komen net ene paar posts langs over servo code in Jal.

btw waren dat waarschijnlijk mijn eigen posts :D

Op 26 oktober 2005 13:13:50 schreef Manvsmachine:
[...]
btw waren dat waarschijnlijk mijn eigen posts :D

ook de antwoorden?

Op 26 oktober 2005 13:08:17 schreef Manvsmachine:
[...]
maar ik snap het alleen niet helemaal hoe jij het dan bedoelt?

gewoon een puls naar de ene servo, en dan een puls naar de andere servo. Beide pulsen natuurlijk met de lengte die jij wilt.

include f452_20
include jlib
include jdelay
port_a_direction = all_output

forever loop
pin_a0 = on
delay_10mS
pin_a0 = off
delay_10mS
pin_a1 = on
delay_100uS
pin_a1 = off
delay_100uS
end loop

Deze is het geworden en het werkt. voor achteruit moet ik het nog aanpassen

En dit is de code voor achteruit. Nu vraag ik me alleen af of het mogelijk is deze in een procedure te zetten?

include f452_20
include jlib
include jdelay
port_a_direction = all_output

forever loop

pin_a0 = on
delay_100uS
pin_a0 = off
delay_100uS
pin_a1 = on
delay_10mS
pin_a1 = off
delay_10ms

end loop

Op 27 oktober 2005 09:11:39 schreef Manvsmachine:
Nu vraag ik me alleen af of het mogelijk is deze in een procedure te zetten?

waarom zou dat niet kunnen?

Op 27 oktober 2005 09:15:49 schreef Wouter van Ooijen:
[...]

waarom zou dat niet kunnen?

Omdat ik dan errors kreeg bij het compilen?

Op 27 oktober 2005 09:16:49 schreef Manvsmachine:
[...]
Omdat ik dan errors kreeg bij het compilen?

Je kan geen error*s* kirjgen, Jal geeft altijd maar 1 error. En zou het dan niet handig zijn als je je code + de error die je krijgt post in plaats van zo'n vage vraag?

Op 27 oktober 2005 09:18:44 schreef Wouter van Ooijen:
[...]

Je kan geen error*s* kirjgen, Jal geeft altijd maar 1 error. En zou het dan niet handig zijn als je je code + de error die je krijgt post in plaats van zo'n vage vraag?

Zal hem ff erbij zetten zometeen

dit is de code
include f452_20
include jlib
include jdelay
port_a_direction = all_output

procedure vooruit
pin_a0 = on
delay_100uS
pin_a0 = off
delay_100uS
pin_a1 = on
delay_10mS
pin_a1 = off
delay_10ms
end

forever loop
vooruit
end loop

En de fout is:
jal 00.04-50 (djgpp)
[Error] (PROCED~1.JAL) [line 7 char 1] expected 'is' but found 'pin_a0'

(docent mode aan)

En wat zegt die foutmelding nu precies?

Op 27 oktober 2005 09:46:35 schreef Wouter van Ooijen:
(docent mode aan)

En wat zegt die foutmelding nu precies?

Simpelweg dat de compiler er IS verwacht in plaats van een pin nummer :D

Op 27 oktober 2005 09:51:46 schreef Manvsmachine:
[...]
Simpelweg dat de compiler er IS verwacht in plaats van een pin nummer :D

juist. dus wat is dan een verstandige actie van jouw?

Op 27 oktober 2005 09:53:28 schreef Wouter van Ooijen:
[...]

juist. dus wat is dan een verstandige actie van jouw?

Daar een wijziging aan te brengen lijkt me. Maar het gaat me er vooral om dat ik niet weet hoe ik het dan zou moeten opbouwen?
En docenten zie ik al genoeg:S

include f452_20
include jlib
include jdelay
port_a_direction = all_output

procedure vooruit
is
pin_a0 = on
delay_100uS
pin_a0 = off
delay_100uS
pin_a1 = on
delay_10mS
pin_a1 = off
delay_10ms
end procedure

forever loop
vooruit
end loop

de bovenstaande code was dus alles:(

Op 27 oktober 2005 10:03:51 schreef Manvsmachine:
de bovenstaande code was dus alles:(

Verbaast dat je? De compiler klaagt dat er een 'is' moet staan, dan lijkt de meest aannemelijke actie me om die 'is' dna maar te plaatsen.

Maar je kunt natuurlijk ook de manual lezen....