Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   789 / 1210
(#) pajti2 válasza nagym6 hozzászólására (») Máj 9, 2016 /
 
Félre ne értsd, nem hitvitát gondoltam kezdeni, csak jelzem, hogy az mc support mindenestül C, és ha azokat a libeket is használni szeretnéd (márpedig idővel sokkal inkább előre gyártott modulokat akarsz majd használni, mint magad újraírni az egészet), jobb lenne még az elején átszokni basic-ről.
(#) nagym6 válasza Elektro.on hozzászólására (») Máj 9, 2016 /
 
MikroBasic amivel csinálom, ugyanaz a cég készíti aMikroPascal-t is. Akkor ha Pascal-nál a fejlesztőkörnyezet gondoskodik a regiszterekről, szerintem a Basic-nál is ugyanúgy.
Nincs több rutinból ide oda ugrálás, amíg lefut az interrupt (ami nem működik), addig semmi ugrás nincs. Akkor stack túlcsordulás nincs, ha jól gondolom.
(#) nagym6 válasza Hp41C hozzászólására (») Máj 9, 2016 /
 
Mikrobasic.
(#) nagym6 válasza pajti2 hozzászólására (») Máj 9, 2016 /
 
Nem tudom mi az "mc support", talán MikroC-re gondolsz. Egyébként -hozzánemértőként- azt látom, hogy a MikroC és a MikroBasic rettenetesen hasonló, a C -ben záróutasítások helyett -end if, next, stb.- kapcsos zárójelek jelölik az utasítás elejét-végét. Valaki írta itt nemrégen, hogy a MikroBasic, MikroC, és MikroPascal ugyanazt az assembly-t generálja egy azonos feladatra.
(#) Hp41C válasza nagym6 hozzászólására (») Máj 9, 2016 / 1
 
A mikro basic is gondoskodik a regiszterekről, de a programod nyitja a kiskaput.
Idézet:
„Here is a simple example of handling the interrupts from TMR0 (if no other interrupts are allowed):”

  1. sub procedure interrupt
  2.   counter = counter + 1
  3.   TMR0 = 96
  4.   INTCON = $20
  5. end sub

Egy kicsit lejjebb megtalálható a korrekt megoldás:
Idézet:
„In case of multiple interrupts enabled, you need to test which of the interrupts occurred and then proceed with the appropriate code (interrupt handling):

  1. sub procedure interrupt
  2.   if TestBit(INTCON, TMR0IF) = 1 then
  3.     counter = counter + 1
  4.     TMR0 = 96
  5. [b]    ClearBit(INTCON, TMR0IF)[/b]
  6.    ' ClearBit is realised as an inline function,
  7.   ' and may be called from within an interrupt
  8.   else
  9.     if TestBit(INTCON, RBIF) = 1 then
  10.       counter = counter + 1
  11.       TMR0 = 96
  12.       ClearBit(INTCON,RBIF)
  13.     end if
  14.   end if
  15. end sub

A második szernit kell csinálni minden esetben. A ClearBit csak a megadott bitet módosítja (bcf ...).

Ha a megszakítási rutinból az INTCON GIE avagy GIEH és GIEL bitjét 1 -re állítjuk, az engedélyezés a beállító utasítás után azonnal 1 lesz, a megszakításkérés elfogadása megtörténhet mielőtt a regiszterek visszatöltődnének, a visszatérési címet levenné a kontroller a stack -ról. Ha rábízod a megszakítási eljárás kilépésére a dolgot, a retfie utasítás (a fordító gondosan elhelyezi) végrehajtása után lesz csak engedélyezett a megszakítás, amikor a stack -ról levette a visszatérési címet.
(((((((( Mégiscsak kell egy kis assembly ismeret a magasabb szintű nyelvekhez is... ))))))))
De ezt más csak off -ban, ott is 8 zárójelben merem leírni...
A hozzászólás módosítva: Máj 9, 2016
(#) nagym6 válasza Hp41C hozzászólására (») Máj 9, 2016 /
 
Köszi, csak ez már kissé-naggyá magas nekem. Több megszakítás nincs, vagy a Basic csinál többet fordításkor? Hova tegyem az én rutinomat, több megszakítást én nem csinálok a programban. A "counter = counter + 1" helyére kellene gondolom, de kettő is van, melyik helyére.
(#) Hp41C válasza nagym6 hozzászólására (») Máj 9, 2016 / 1
 
Több megszakítás:
- Midrange kontrolleren csak 1 megszakítási rutin lehet, azt jelöli a sub procedure interrupt.
- 18F -eken már két megszakítási rutin lehet: a magas és az alacsony szintő. Nem szoktam basic -ot használni. Meg kell nézni a leírást, hogyan is kell megírni...

Egy megszakítási rutinben is ki lehet szolgálni többféle kérést: Mondjuk egy timer és egy USART adási és vételi megszakítást.
  1. sub procedure interrupt
  2.   if TestBit(INTCON, TMR0IF) = 1 then
  3. ....' Timer 0 megszakítás kiszolgálása
  4.     ClearBit(INTCON, TMR0IF)
  5.   end if
  6.   if TestBit(PIR1, TX1IF) = 1 then
  7. ....' USART adási megszakítás kiszolgálása
  8. ' A TX1IF -et nem kell programból törölni, a TX1REG írása automatikusan törli
  9.   end if
  10.   if TestBit(PIR1, RC1IF) = 1 then
  11. ....' USART vételi megszakítás kiszolgálása
  12. ' A RC1IF -et nem kell programból törölni, a RC1REG olvasása automatikusan törli
  13.   end if
  14. end sub

Mindig csak az a rész, azok a részek futnak le, amelyik kéréshez tartozó jelzőbit 1.

Nem azzal van a probléma, hogyan írtad meg a kiszolgáló funkcióját, hanem azzal, hogy a regiszter tartalmak visszaállítása előtt engedélyezi a megszakítás elfogadását az INTCON = %10100000 utasítás. Ha a végrehajtásakor már aktív kérés van, az utasítás után azonnal a megszakítási rutinra adódik a vezérlés. Ekkor elmenti az általad nem látható bevezető kód a regiszterek értékét ugyan abba a változóba, ahova az előző kérésnél mentette. Lefut a megszakítás, de megint előbb engedélyezi az újabbat, minthogy rendesen visszatérne. Ha megint aktív kérés van, újból a megszakítási rutin következik (de minden belépésnél egy szittel telik a stack), ha nincs aktív kérés, akkor visszatér az INTCON = %10100000 utasítás utánra és visszaállítja a regisztereket, de a mentett értékek már felülíródtak.

Cseréld ki a INTCON = %10100000 utasítást, a ClearBit(INTCON, TMR0IF) utasításra.
A hozzászólás módosítva: Máj 9, 2016
(#) nagym6 válasza Hp41C hozzászólására (») Máj 9, 2016 /
 
Idézet:
„Cseréld ki a INTCON = %10100000 utasítást, a ClearBit(INTCON, TMR0IF) utasításra.”
A kettő nem ugyanaz?
  1. sub procedure interrupt
  2.       counter = counter + 1
  3.       TMR0 = 96
  4.       INTCON = $20
  5.     end sub

Ebben a rutinban cseréljem ki, és a "counter = counter + 1" helyére mehet a kód, ha jó értem. Köszi a segítséget.
(#) Elektro.on válasza nagym6 hozzászólására (») Máj 9, 2016 / 1
 
Erre is figyelni kell! A te variációddal a teljes Intkon regisztert írod, Hp41C variációjával csak a szükséges biteket.
Ilyenekre a többi rebiszternél is figyelni kell, mert olyan paramtert is átírhatsz ami amúgy futás időben valamiért módosult. Én teljes regiszter a program elején, inicializáláskor írok esetleg.
Egyébként Hp41C nek igaza van. Bármilyen nyelven akarok PIC -et programozni, szükségem van a hardware működésének az ismeretére. Igazábol valahol ez már maga az Assebly???
Amúgy valóban a Mikro C - Basic - Pascal ugyan azt fordítja. Egy cég csinálja rengeteg lib -el.
De az említett "mc support" a Microcip saját támogatása (Mplab, és gondoüom vannak újabbak is)
A hozzászólás módosítva: Máj 9, 2016
(#) Hp41C válasza nagym6 hozzászólására (») Máj 9, 2016 / 1
 
  1. sub procedure interrupt
  2.           counter = counter + 1
  3.           TMR0 = 96
  4.           INTCON = $20
  5.         end sub

helyett
  1. sub procedure interrupt
  2.           counter = counter + 1
  3.           TMR0 = 96
  4.           ClearBit(INTCON, TMR0IF)
  5.         end sub
A hozzászólás módosítva: Máj 9, 2016
(#) csaba8702 hozzászólása Máj 9, 2016 /
 
Sziasztok.
Lehet, hogy nem ide vág a téma, ha így van elnézést kérek érte.
Valaki tudna segíteni az usb description megértésében?
MikroC Pro-ban programozok nekem ez valahogy jobban fekszik, de nem jöttem rá hogyan írjak benne usb-com portot (virtuális com port).
A program adott, a lényeg hogy adatokat lehessen fogadni a pic-el és küldeni a gépre.
Az emulálást is a PIC-el szeretném megoldani.
VAn e aki tud segíteni? 18F2550
üdv
(#) cross51 válasza csaba8702 hozzászólására (») Máj 9, 2016 /
 
Lehet nem jól értelmeztem a kérdést, de ha arra gondolsz, hogy egy CDC-s eszközként ismerje fel a gép a 18f2550-et és a gépről egy virtual terminalon keresztül szeretnél adatokat küldeni/fogadni akkor esetleg az MLA de ez XC8-hoz van. Ha te magad akarsz USB Stack-et írni szerintem nem egyszerű, de akár az MLA-ből át tudod emelni a dolgokat.
(#) csaba8702 válasza cross51 hozzászólására (») Máj 9, 2016 /
 
Értem. Tudnál segíteni ebben? Rendkívül fontos lenne a program, mert egy nagyobb projekthez íródna. Ha a soros emulálás megy az már nagyon jó lenne.
Esetleg ha van kész program mla-ban azt hol találom meg?
(#) cross51 válasza csaba8702 hozzászólására (») Máj 9, 2016 /
 
Az Mplab X-el és az XC8-al mennyire vagy képben?
(#) csaba8702 válasza cross51 hozzászólására (») Máj 9, 2016 /
 
MIvel nem ezzel kezdtem így nem vagyok vele képben (jöttem rá később, hogy ezzel kellett volna). 2 napja kezdtem kutakodni az mplab x után így ebben is segítségre van szükségem.
(#) cross51 válasza csaba8702 hozzászólására (») Máj 9, 2016 /
 
Esetleg ezzel lehet egyszerűbb lesz vagy ez de ez C18-as.
És talán a legjobb neked MikroC-s verzió.
(#) pajti2 válasza csaba8702 hozzászólására (») Máj 10, 2016 /
 
Az usb - rs232 nincsen szabványosítva. A COM% file létrehozásához (OS oldalon) külön driver kell. Nem lehetetlen megküzdeni a problémával, de akinek tényleg stabilan kell megoldás a gyakorlatban, és fontos a COM port, végül mindig az ftdi szöcskék közül választ valamit (+1 tok a pic mellé), mert az ftdi csapat driver supportot is ad mellé, és az keményebb része a küzdelemnek.

Ha nem feltétlen muszáj a soros port, és elég csak az usb adatkapcsolat, van "szabványos" usb generic driver ingyen minden OS alá. Ha az is megfelel, ahhoz van MLA support. A MicroC Pro környezetben nem tudom, fordul-e, de a Microchip C18-a elboldogul vele (az az offici support). Itt nézz szét az archív letöltések között.

Írtad, hogy egy nagyobb project-hez kell, és hogy fontos. Ha úgy értetted, hogy üzleti célra lesz, azt privátban kellene rendezni, mert szerintem itt a modi megtépne érte minket, de természetesen tudunk segíteni abban is.
A hozzászólás módosítva: Máj 10, 2016
(#) Hp41C válasza pajti2 hozzászólására (») Máj 10, 2016 / 1
 
Az FTDI mizéria után sokan átálltak a CP210x vagy más gyártó által előállított konverterekre. További lehetőség az MCP2200, ami tulajdonképen egy PIC18 kontroller előre felprogramozva.

A Microchip MAL -jában benne van a 18F2550 CDC példa, de üzleti célra nem hazsnálható. Ha sok példány készül belőle az USB azonosítókat regisztráltatni kell. Microchip USB Sublicense
A hozzászólás módosítva: Máj 10, 2016
(#) pajti2 válasza nagym6 hozzászólására (») Máj 10, 2016 / 1
 
Vannak a Microchip által előre megírt libek a saját pic termékeikhez (dev boardok), amiket át lehet szabni célirányosan más áramköri környezethez is. Nem arról van szó, hogy ugyan arról a forrásról képes-e ugyan azt az asm-et előállítani másik fordító is, hanem hogy van egy halom lib (flash kártya, ethernet, usb, lcd kezelés, stb), amit az offici környezethez éveken át fejlesztettek, és kicsiszoltak normálisra. Ha azokat is használni szeretnéd, C nyelven teheted meg, és az offici fordítókat célszerű választani hozzájuk.
(#) cross51 válasza Hp41C hozzászólására (») Máj 10, 2016 /
 
Én az MCP2200-ről annyi rosszat hallotam, hogy oké, hogy van hozzá driver de problémák szoktak vele adódni. Ez nem tudom, hogy ma már mennyire igaz 2 éve mondta egy egyetemre járó srác.
(#) csaba8702 válasza cross51 hozzászólására (») Máj 10, 2016 /
 
Van e erről valahol leírás?
(#) cross51 válasza csaba8702 hozzászólására (») Máj 10, 2016 /
 
Az MCP2200-ről itt találod a doksit, de lehet egyszerűbb ha rendelsz egy kész konvertert (igaz CP2102 van).
(#) icserny válasza cross51 hozzászólására (») Máj 10, 2016 /
 
Elsősorban a teljesítményével van gond. Sajnos, hardverben gyenge (kevés a RAM), emellett a firmware sem túl hatékony, és a Windows usbser.sys meghajtóra épül - ez három gyenge láncszem. Kisebb segbességeknél (pl. 56 kbps) azért elmegy, főleg ha a LED villogtatást kikapcsolja az ember (Blink LEDs legyen kikapcsolva a konfigurációs beállításnál).
(#) izenahogyishivnak hozzászólása Máj 10, 2016 /
 
A PIC24 és PIC32 család programozása nagyon eltérő? Nehéz egyikről a másikra váltani? Az a baj, hogy két feladatom is lenne és az egyikhez a 24FV jobb, mert abból van 5V változat is, a másik feladathoz viszont jobb a PIC32, sok lebegőpontos számítást kellene elvégezni nagy frekvencián. Eddig csak a PIC18 családot használtam, kicsit erősnek érzem két új családot tanulni egyszerre.
(#) nagym6 hozzászólása Máj 10, 2016 /
 
Köszönöm a segítséget mindenkinek, akik visszább az interrupt témában segítettek.
Működik az interrupt, a hiba a fordítóprogram újratelepítésével szűnt meg. Most jó úgy, ahogy eredetileg csináltam kérdéseim előtt, semmi változtatás nem kellett. Ilyen hibára nem gondoltam, WinXP-n fut a progi, talán ez az ok, vagy nem tudom, mert most XP-n jó.
(#) icserny válasza izenahogyishivnak hozzászólására (») Máj 10, 2016 /
 
C nyelven programozva minden típus "majdnem" egyforma... Ha pedig az adatlapot nézed, akkor kiderül, hogy bizonyos részletekben nagy eltérések vannak egy-egy típuscsaládon belül is (pl. PIC24FJ, HJ, FV). Szóval, a kérdésedre a válasz: az attól függ!
(#) pajti2 válasza csaba8702 hozzászólására (») Máj 10, 2016 /
 
Ha nem áramkörön belüli célirányos környezetben kell kivitelezni, hanem csak legyen egy usb-soros port átalakító, készen lehet venni kábeleket, ahol az áramkör mindenestül belefért a soros porti csatlakozóba, mint itt pld. Az áramkörbe meg egy max232-t vagy bármi kompatibilis cumót felraksz, és azt hozzákötöd a pic usart portjához. Átalakító kábelekből pedig vannak a nagyon olcsó kínai piacos kategóriába sorolható cuccok, akár 1 khuf pénz környékén is.
(#) don_peter hozzászólása Máj 10, 2016 /
 
Srácok kérhetek valakitől egy PICkit3-as programozó programot?
PICkit2-ő van, de gondolom a 3-hoz másmilyen kell.
Rendeltem microchip-től a PIC32MX795F512L és PIC18F97J94 chippeket.
Utóbbit az összehasonlítás miatt, hogy még is is mit lehet belőle kihozni a 32hőz képest.

Előre is köszi..
ui: PICkit3-as programozót is megrendeltem.
A hozzászólás módosítva: Máj 10, 2016
(#) don_peter válasza csaba8702 hozzászólására (») Máj 10, 2016 /
 
Mennyire számít a sebesség?
Gondolok itt a "nagyobb projektben kellene használni" dologra.
Számít vagy is mennyire számít és mekkora adatokat akarsz mozgatni?
ui: PC és PIC közti adatmozgásra gondolok.
A hozzászólás módosítva: Máj 10, 2016
(#) csaba8702 válasza don_peter hozzászólására (») Máj 10, 2016 /
 
Ledek kivillantása és szervó vagy léptetőmotorok mozgatása.
Nem szükséges túl nagy sebesség, mert az e célra szánt szoftver elég ideig küldi az adatot.
Következő: »»   789 / 1210
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem