interrupt ger upp.nu behövs nya ide och förslag tror jag

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Markus
Inlägg: 105
Blev medlem: 4 november 2005, 02:35:06
Kontakt:

interrupt ger upp.nu behövs nya ide och förslag tror jag

Inlägg av Markus »

Hej sodjan och er alla andra experter på Pic programmering. Nu har jag kört huvudet i sanden totalt. nu kommer jag inte längre med mitt project.

Det är nämerligen att jag behöver en pic processor som ska styra ett rc-servo som sitter på utgången RB0. ingångarna är tre stycken till processorn. nämerligen RA1,RA2,RA3.
Med hjälp av dessa insignaler så ska pwm signalen ut till RC-servot på utgången RB0 få olika signaler.

Om man trycker på RA1 knappen så ska pice:en leverera en utrsignal(RB0) till servot som innebär att servot börjar att roterar motsol. Om man i stället trycker på knappen RA2 så ska servot börja att vandra medsols. Eller det sista allternativet är om man ger en signal på RA3 så ska servot stå stilla.

Nu undrar ni vad den ska göra om alla tre insignaler får en etta. Denna möjligheten har jag eliminerat med tidigare konstruktion. Det kan bara bli en etta på en av ingångarna i taget.


Jag har försökt att bygga med interrupt vectorer som ska kunna bryta varandra. Men efter ett par veckor så inser jag att denna konstruktion kommer inte att fungera. Försköte nämerligen att manipulerar processorn INTCON1,INTCON2,INTCON1 register under interrupt subrutine körs så att låg interrupt kan bryta hög interrupt. med mera.men fungerar inte som tänkt.Så med andra ord lägger jag ner skiten.

Nu kommer min fråga. Det jag undrar om är hur jag ska lösa den funktionbeskrivningen jag har beskrivit ovan med hjälp av en pic. Vet att det finns något som heter PWM som är inbyggd i processorn redan. Kan jag utnytja den funktion till min funktionbeskrivining här ovan för att lösa mitt problem


Skulle gärna vilja se någon färdig lösning på styrning i sådan fall till RC-servo. Har hittat något i databladet i kap 14 men jag fattar i värst mycket hur jag ska andvända detta.därför vore det finns om någon hade en färdig styrning till rc servor med PWM lösningen i pic:en.

börja funder på om jag skulle andvända en ska polling lösning i stället med då blir det en jävla massa föröjningar med kod som man måste ta hänsyn till. Jag vet inget jämnt nu känns som man bara misslyckas jämnt och ständigt. :(

Om någon har några andra bra lösningar med hjälp av en pic. så får ni hjärna komma med förslag.
Hur jag går vidare i nästa steg.


Tack så mycket alla som har hjälp mig tidigare.Första gången jag håller på med interrupt på pic:en men börjar att inse att det går inte att lösa med tre interrupt vectorer. när jag bara har två h8, h18 vector.skulle vija ha flera adresser typ en till i alla fall. Sedan ska alla vectorer kunna bryta varandra.Om det hadde varit möjligt så skulle jag ha varit färdigt med detta project. För sedan har det inte varit något problem. :cry:


Jag kommer aldrig att bli någon bra pic programmerare.
mvh Markus
gvs
EF Sponsor
Inlägg: 1688
Blev medlem: 18 oktober 2003, 14:20:34
Ort: Göteborg
Kontakt:

Inlägg av gvs »

Programmerar du asembler, Basic eller C?

Angående att det tar tid att polla ingångarna så håller jag inte med dig alls. om du väljer att köra i 4MHz så kör du en instruktion per uS. En vanlig tryckning på ett tagentbord är ca 2mS. Du skulle alltså hinne med 2000 instruktioner på den tiden.

Varför inte para kolla ingångarana, starta pwm och sen åter gå till att polla efter ny signal?

EDIT: det blev nog lite otydligt. tiden man har knappen ner tryckt är ca 2mS mellan tryckningarna är det brtydligt längre tid.
Användarvisningsbild
Icecap
Inlägg: 26648
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Pseudokod á la C:

Kod: Markera allt

unsigned char Input, Rotation;
main
  {
  Rotation = Stoppa_Värde;
  while(1)
    {
    Input = RA & 0x07;
    switch(Input)
      {
      case 1: // Brytare 1
        Rotation = Rulla_Ena_Hållet;
      break;
      case 2: // Brytare 2
        Rotation = Rulla_Andra_Hållet;
      break;
      case 4: // Brytare 3
        Rotation = Stoppa_Värde;
      break;
      }
    }
  }

ISR, Timerx, interval=0,5ms
  {
  static char Interval;
  if(RB0)
    {
    Interval++;
    switch(Rotation)
      {
      case Rulla_Ena_Hållet:
        if(Interval >= 0) RB0 = 0; // Pulser på 0,5ms
      break;
      case Rulla_Andra_Hållet:
        if(Interval >= 2) RB0 = 0; // Pulser på 1,5ms
      break;
      case Stoppa_Värde:
        if(Interval >= 1) RB0 = 0; // Pulser på 1,0ms
      break;
      }
    }
  else
    {
    if(++Interval > 100)
      { // Vänta 50ms innan nästa puls kommer
      Interval = 0;
      RB0 = 1;
      }
    }
  }
Edit: förklaring:
main-rutinen kollar porten och sparar senaste knapptryckning i en variabel. Det kan göras tjusigare där den bara hittar nya knapptryckningar och struntar i "gamla" ej släppta men det skiter vi i just nu.

Interrupt-rutinen (ISR) aktiveras av en timer som ger interrupt var 500µs. Vid varje interrupt blir det först kollat om RB0 är '1', om så är fallet räknas det hur många gånger den har varit det och nollas vid rätt värde.
Om den INTE var '1' kommer det att räknas i 50ms (100 st 0,5ms klick) varpå pulsen upprepas. Så enkelt är det, ingen interrupt som stör andra osv, bara enkel polling och lite sparande av värde i en variabel.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Äntligen lite detaljer om vad du försöker göra !
Är detta samma "projekt" som du har mummlat om i 2-3 trådar hittils ?
Varför har du inte sagt något om RC servon och knappar ????
Eller har jag missat det ?

Anyway...

PWM modulen passar *inte* för RC servo drivning, den (pwm modulen) är för "snabb".
Det är ett standard servo med 1-2 ms puls och 20 ms intervall, eller hur ?

Använd en timer för att ge två tider, dels 20 ms för ett det fasta intervallet,
dels ett variabelt intervall på 1-2 ms för servots "position".

Sedan vill du långsamt (?) ändra 1-2 ms intervallet up eller ner beroende
på vilken knapp som trycks, eller hur ? Hur snabbt up/ner ? OCh med
vilken upplösning, d.v.s hur många positioner skall servot kunna inta ?

Skall knapparna "låsa", eller skall servot bara röra sig medans
knappen är nedtryckt ?

Ett ex :

Varje gång 20 ms intervallet tar slut (t.ex via en timer ISR) kollar du om någon knapp är nedtryckt, och justerar värdet för det korta intervallet
med ett lämpligt intervall. Alltså så att du får lagom "fart" på servot.

Varannan gång ställer du timern med fast värdet för det fasta 20 ms
intervallet, och varannan gång med det variabla värdet för 1-2 ms
intervallet. Och ser till att sätta/cleara servo utgågen på lämpliga ställen,
så klart.


Tja, det är väll i princip allt.
Med en timer blir det väldigt enkelt.

Dina problem beror inte på hur PIC'en fungerar eller inte fungerar, utan
på att du från början har missförstått hur de fungerar. Knappast PIC'ens fel... :-)

> Jag kommer aldrig att bli någon bra pic programmerare.

Skitsnack ! Självklart kommer du att bli det !!
Ett sätt är att läsa och bättre ta till sig vad de som försöker
att hjälpa skriver...
Markus
Inlägg: 105
Blev medlem: 4 november 2005, 02:35:06
Kontakt:

Tack så mycket gvs icecap, och sodjan. här kommer era svar

Inlägg av Markus »

Tack så mycket för hjälpen hittils. Det jag förklarade nu är samma sak som jag har gjort tidigare.


svar på sodjans frågor:

>Skall knapparna "låsa", eller skall servot bara röra sig medans
knappen är nedtryckt ?

knapparna ska låsa

>Är detta samma "projekt" som du har mummlat om i 2-3 trådar hittils ?
ja

>Det är ett standard servo med 1-2 ms puls och 20 ms intervall, eller hur ?
ja

>Sedan vill du långsamt (?) ändra 1-2 ms intervallet up eller ner beroende
på vilken knapp som trycks, eller hur ? Ja

>vilken upplösning, d.v.s hur många positioner skall servot kunna inta ?
vet inte faktiskt. hur ställer man in det i programmeringen?

gvs frågor.

Programmerar du asembler, Basic eller C? Är man man så programmerar man i Assembler.det enda rätta.

Frågor från mig till er mina pic vänner

Fråga nr 1
Den kodstrukturen som icecap har gjort med switch sats uppbygnad. Switchsatser går väll inte ha få i assembler programmering. Skulle gärna vilja att du programmerar ett sådan exempel som du har gjort fast i assembler programmering.Jag andvänder PIC18F452 kretsen.

Fråga nr 2
sedan hur bygger man upp kosstrukturen för att skapa en interrupt som påverkas av någon typ av timmer som kommer i intervaller var 50 mikro sekund.

fråga nr 3
denna fråga har inget med pic programmerings problemet jag har. Det jag funderar på när programmet fungerar som det ska är att köpa en pic programmerare.vilken kan ni rekomenderar ni. Har kollat på Wisp628 programmeraren.vad tror ni om den.Har hört att det ska finnas ritiningar till den publicerad så man kan bygga i hop den själv.
Användarvisningsbild
karlstedt
EF Sponsor
Inlägg: 966
Blev medlem: 14 oktober 2003, 16:55:23
Ort: Lund
Kontakt:

Inlägg av karlstedt »

>>vilken upplösning, d.v.s hur många positioner skall servot kunna inta ?
>vet inte faktiskt. hur ställer man in det i programmeringen?

Det ställer du genom att välja hur mycket din "servo-timer" ska ändras vid knapptryckning. Vill du bara ha 3 möjliga lägen så vill du ändra servopulsen från 1ms till 1.5ms till 2ms.
Vill du att servot ska vara lite högre upplöst så måste ändringarna vara mindre vid knapptryckning.

tex om du vill ha 10 lägen ger det en ändring på 100us av servopulsen vid knapptryckning.

>Switchsatser går väll inte ha få i assembler programmering.

Givetvis går det. En C-kompilator gör ju det jobbet.. Eftersom du är en man och programmerar i asm får du göra det jobbet själv ;)
gvs
EF Sponsor
Inlägg: 1688
Blev medlem: 18 oktober 2003, 14:20:34
Ort: Göteborg
Kontakt:

Inlägg av gvs »

Jag har en wisp628, köpt av sodjan, mycket bra programmerare säger jag! klart värt pengarna. Var lite knepigt att få fart på den, var tvungen att ställa ner hastigheten till 9600, men annars perfa!
Markus
Inlägg: 105
Blev medlem: 4 november 2005, 02:35:06
Kontakt:

hej på er

Inlägg av Markus »

någon får gärna svara på frågorna 1 och 2. Skulle sedan gärna se en assembler version av icecap kod avsnitt i C.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Skulle sedan gärna se en assembler version av icecap kod avsnitt i C.

OK, det blir inte speciellt mycket kod för en första lite "rå" version.
En PIC18 är enklare att programmera än en PIC16 dessutom...

Jag får se vad som fammiljen tillåter i kväll... :-)

Sen vill jag bara nämna : http://www.jescab.se/Wisp628.html
ifall du är nyfiken... :-)
Markus
Inlägg: 105
Blev medlem: 4 november 2005, 02:35:06
Kontakt:

ok,tack på förhand sodjan

Inlägg av Markus »

Tänkte annars fråga om du har köpt av jan-erik förut. Tänkt med att det är förskottsbetalning. låter osäkert.tar pengarna och sedan skter att skicka någån programmerare. Finns det någon garanti om man köper programmeraren färdiglödd.Omman gör det själv så har man inga garantier.

Tack på för hand att du skriver icecap version i assembler kod. Så jag har något exempel att utgå i från.

visa gärna interrupt med en timer inställning med hur man skriver en sådan programrader.


MVH Markus

Ds:ha det så trevligt i kväll med familjen vet jag.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: ok,tack på förhand sodjan

Inlägg av vfr »

Markus skrev:Tänkte annars fråga om du har köpt av jan-erik förut.
En hint: "Sodjan", Sod Jan -> Jan-Erik Söderholm.

Du har alltså "pratat" med densamme.

Han har bara bra omdömen från alla jag hört om här på forumet och säljer mycket på tradden också. Blir nog inga problem där. Dessutom kanon suport!
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

He he... :-)
Sorry, jag skulle ha nämnt det, det är inte så lätt att veta !

Självklart tar jag pengarna och springer utav bara f-n !! :-)

Jag har sålt ca 45 st senaste 6 månaderna.
2-4 har haft problem, 2 st har jag haft hos mig och tittat på,
de flesta har gjort någon littet "tabbe" vid monterigen.
Alla fungerar nu, så vitt jag vet.

Just nu väntar jag på en ny omgång med 50 st från Holland, bör
komma om 2-3 dagar...

> Finns det någon garanti om man köper programmeraren
> färdiglödd. Om man gör det själv så har man inga garantier.

Köper du en monterad, så är den också testad och fungerar.
Köper du en sats, så hjälper jag till tills den fungerar...

Men nu måste jag springa, Monty Python på TV2 om 3 minuter !!
Markus
Inlägg: 105
Blev medlem: 4 november 2005, 02:35:06
Kontakt:

En vaker dag knäcker hackerna ps3 med PIc 18f452

Inlägg av Markus »

o fan. så komiskt. Nej jag väntar med att köpa en av dig i sådana fall förän den nya programmeraren med firmware 1.7 kommer in.

Sedan måste jag lösa problemet som jag har diskuterat ovan. Skulle vilja se en assembler version av icecap Rc servo kod. Fattar inte riktigt hur jag ska skapa swtich satser i Mplab.

Men när jag har fått ordning på det sista jag håller på med nu. som jag har berättat ovan ska det bli en fröjd och se om jag får ordning på alien puffran som jag håller på att bygga åt en kompis.Alien 2 om ni har sett den.


Du sodjan du kommer inte att öppna en webshop med så man kan beställa saker i från dig via nätet.

DS:god natt på dig sodjan nu ska jag gå och lägga mig och fundera på om man kan andvända pic:en till reglerteknik med.

Kanske kan bygga en PID regulator med hjälp av en Pic. Däru skullle vara något.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

"firmware 1.7" ? Kan du förtydliga lite ?

> Fattar inte riktigt hur jag ska skapa swtich satser i Mplab.

Man använder de "skip" instruktioner som processorn har.
För att kolla knapparna sannolikt BTFSS/BTFSC.

> Du sodjan du kommer inte att öppna en webshop med så man kan beställa saker i från dig via nätet.

"Nätet" ? Ligger inte Tradera på "nätet". :-)
För övrigt finns det jag har antingen på Tradera eller på mina "Produkter" sidor : http://www.jescab.se/Produkter.htm

> Kanske kan bygga en PID regulator

Visst, det hela beror på vilka reglerkrav man har...
Markus
Inlägg: 105
Blev medlem: 4 november 2005, 02:35:06
Kontakt:

ok sodjan

Inlägg av Markus »

Ok låter enkelt. Du får gärna göra om icecap kod eller visa mig samma sak som han har gjort hur jag ska programmera. Skulle vilja se en sådan kod i assembler form med timer/interrupt funktion. Det skulle vara snällt om någon kunde visa mig det.

ps:tack på förhand.
Skriv svar