Sida 1 av 3
PIC: Två saker samtidigt?
Postat: 4 oktober 2004, 10:56:48
av XorXaX
Hej,
någon som har en aning om hur man ska göra för att kunna göra två saker samtidigt på en PIC? Det är en 16f874a det gäller. det jag ska göra är att styra två rc-servon samtidigt, men hur ska jag lyckas med det? Har hört att det ska vara krångligt att göra två saker samtidigt på en PIC...
Tack på förhand!
Postat: 4 oktober 2004, 12:43:05
av erixon
Du kan inte göra två saker samtidigt. dock kan man göra så att det ser ut som man gör två saker samtidigt. Man kan anvädar trådar men efter som pic har hårdvaru stack så är det svårt att göra desutom är det inte så mines effektivt.
Ett annat sätt är att låta en "process" köra i en interupt rutin och den andra i main loopen...
Men vad är det du vill göra? ha två olika processer eller bara styra Två servon.
om du endast vill styra kan du ge pulserna efter varandra

Postat: 4 oktober 2004, 12:57:42
av XorXaX
Jag vill styra två servon samtidigt som jag läser av nya värden på positionerna som de ska till. Problemet är att servorna måste få en signal så att de håller samma position hela tiden, så att de inte kan flyttas utav det de ska styra...
Postat: 4 oktober 2004, 13:18:19
av rickeboy
Konstaterar att du har hårdvaru PWM på PIC:en (16f874a) dvs där är din lösning...
//Rille
Postat: 4 oktober 2004, 14:58:13
av XorXaX
Jag har inte fått servorna att fungera med pwm'en. Har du något PicBasicPro eller ASM exempel på hur jag ska lösa det?
Postat: 4 oktober 2004, 15:20:22
av danei
Hårdvaru PWM:n går inte att få ner i frekvens så långt. MEn du kan lägge ut pullserna efter varandra. Det är så låg pulskvot att det inte är något problem. Det är bara en lösning det finns många sätt.
Postat: 4 oktober 2004, 15:22:54
av matseng
Postat: 6 oktober 2004, 17:21:17
av MadModder
Det kan väl inte vara så krångligt...
Man slår på alla utgångar samtidigt, sen vartefter tiden går stänger man av dem en eller flera i taget beroende på vilken pulslängd det ska vara. När alla är avstängda väntar man 20ms och börjar om.
Postat: 6 oktober 2004, 17:33:24
av $tiff
>> MadModder
Det behöver ju inte ens vara så komplicerat. Det går lika bra att slå på den första signalen, vänta, slå av den, slå på nästa, vänta...
Detdär löser man väl lätt med en timer för att låta µC göra annat så länge...?
Postat: 6 oktober 2004, 17:38:13
av MadModder
Visserligen, men då kan man inte styra mycket mer än 10 servon, eftersom 10x2ms=20ms (max utslag på alla servon), och 20ms är ungefär vad man bör vänta mellan pulserna...
Postat: 7 oktober 2004, 08:31:29
av XorXaX
Ni har inget kod exempel i picbasic som ni skulle vilja dela med er utav. Jag hänger nämligen inte med alls vad ni pratar om

Postat: 7 oktober 2004, 17:39:45
av $tiff
Kod: Markera allt
s1_out var portb.0 'Deklarera I/O
s2_out var portb.1 'Deklarera I/O
low s1_out 'Deklarera som utgång; låg
low s2_out 'Deklarera som utgång; låg
servo1 var word 'På-tid i µs
servo2 var word 'På-tid i µs
loop:
s1_out = 1 'Servo 1 puls hög
pauseus servo1 'Pausa lagom tid (1-2ms)
s1_out = 0 'Servo 1 puls låg
s2_out = 1 'Servo 1 puls hög
pauseus servo2 'Pausa lagom tid (1-2ms)
s2_out = 0 'Servo 1 puls låg
pauseus (20000 - servo1 - servo2) ' Gör om var 20:e ms
goto loop
Pedagogiskt exempel ihopskrapat snabbt och lätt. servo1 och -2 måste erhålla sina värden på annat ställe i programmet. Med nu?

Postat: 7 oktober 2004, 20:31:18
av XorXaX
Tack, jag får prova på söndag om det blir bra. Jag hör säkerligen av mig igen

Postat: 11 oktober 2004, 07:40:39
av XorXaX
Det där fungerar ypperligt bra! Nu ska jag bara se till så att den läser av den seriella signalen i loopen och inte före...
Hur fungerar SERIN egentligen? Står microprocessorn still när den kommer till SERIN och väntar på att det ska komma data eller hoppas den vidare om den ser att det inte kommer något?
Postat: 11 oktober 2004, 08:38:32
av rickeboy
Den står still... du kan dock sätta en timeout... du har inte ngn UART/USART på den PIC:en? Isf går det att lösa väldigt mkt smidigare...
//Rille