PIC: Två saker samtidigt?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
XorXaX
Inlägg: 409
Blev medlem: 27 maj 2004, 09:44:16

PIC: Två saker samtidigt?

Inlägg 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!
Användarvisningsbild
erixon
Inlägg: 380
Blev medlem: 27 augusti 2003, 10:21:58

Inlägg 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 :)
XorXaX
Inlägg: 409
Blev medlem: 27 maj 2004, 09:44:16

Inlägg 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...
Användarvisningsbild
rickeboy
Inlägg: 678
Blev medlem: 13 augusti 2003, 09:12:17
Ort: Göteborg / Karlskrona
Kontakt:

Inlägg av rickeboy »

Konstaterar att du har hårdvaru PWM på PIC:en (16f874a) dvs där är din lösning...

//Rille
XorXaX
Inlägg: 409
Blev medlem: 27 maj 2004, 09:44:16

Inlägg 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?
danei
EF Sponsor
Inlägg: 26423
Blev medlem: 2 juni 2003, 14:21:34
Ort: Östergötland
Kontakt:

Inlägg 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.
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

Kod för att kontrollera 8 st servon från en PIC
http://www.digitalnemesis.com/ash/proje ... servo8.htm
Användarvisningsbild
MadModder
Co Admin
Inlägg: 30018
Blev medlem: 6 september 2003, 13:32:07
Ort: MadLand (Enköping)
Kontakt:

Inlägg 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.
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg 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...?
Användarvisningsbild
MadModder
Co Admin
Inlägg: 30018
Blev medlem: 6 september 2003, 13:32:07
Ort: MadLand (Enköping)
Kontakt:

Inlägg 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...
XorXaX
Inlägg: 409
Blev medlem: 27 maj 2004, 09:44:16

Inlägg 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 :?
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg 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? :wink:
XorXaX
Inlägg: 409
Blev medlem: 27 maj 2004, 09:44:16

Inlägg av XorXaX »

Tack, jag får prova på söndag om det blir bra. Jag hör säkerligen av mig igen :)
XorXaX
Inlägg: 409
Blev medlem: 27 maj 2004, 09:44:16

Inlägg 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?
Användarvisningsbild
rickeboy
Inlägg: 678
Blev medlem: 13 augusti 2003, 09:12:17
Ort: Göteborg / Karlskrona
Kontakt:

Inlägg 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
Skriv svar