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   329 / 1210
(#) Hp41C válasza promax hozzászólására (») Nov 16, 2012 / 1
 
Szia!
Tételezzük fel, hogy már régen volt adás vagy egyáltalán nem is volt. Ha az adót engedélyezed egyből megszakítást fog kérni, hiszen üres a TXREG. Ebben az állapotban a TXIF = 1. Idézet egy adatlapból (18F2550):
[quote]TXIF: (E)USART Transmit Interrupt Flag bit
1 = The (E)USART transmit buffer, TXREG, is empty (cleared when TXREG is written)/quote]
Az hogy lesz-e belőle megszakítás a TXIE ls a GIE és PEIE avagy a GIEH vagy GIEL bitektől függ. Ha engedélyezett, akkor az adási megszakítás kiszolgáló rutinra kerül a vezérlés. Ez a rutin megnézi, hogy van-e valami a adó fifo -ban, ha van, akkor kiveszi onnan, beírja a TXREG -be (és törlődik a TXIF azaz a megszakítási ok) és ha nincs további adat, letiltja az adási megszaítás kérést.

Ha a főprogramnak adni talál kedve, az adatot behelyezi az adási fifo -ba és engedélyezi az adási megszakítást. Mivel már régen nem volt adás ill. sohasem volt, az adó kész az új adat fogadására, megszakítás kérés lesz abban a pillanatban, amikor a TXIF 1 értéket kap. A megszakítás kiveszi az első adatot, beírja a TXREG -be, majd letiltja a saját megszakítás kérését (hiszen nincs több adat a fifo -ban). Visszatér....
Ekkor két eset lehetséges:
- A főprogramnak van még adata, amit sorban beletesz az adási fifo -ba (ld. feljebb) és minden karakternél engedélyezi az adási megszakítást. Egyszercsak kifogy az adatból, nem küld többet...
- A főprogram kifogyott az adatból, nem tesz újabbat a fifo-ba és nem bántja az adási megszakítás engedélyezését.

Amíg van mit adni, megszakításkérés keletkezik mindig, rögtön, ha az adó kész a köveztező adat fogadására - ez jelentheti azt is, hogy még a stop bitet adja. A kiszolgáló rutin a TXREG -be beírja (beírhatja, mivel a fogadásra már kész az adó) a következő adatot. Ekkor is két eset lehetséges:
-- Ha van még adat, egy szerűen visszatér.
-- Ha ez az adat volt az utolsó, akkor letiltja az adási megszakítás kérést. Ameddig a főprogramnak nincs mit adnia, az adó megszakítása tiltva lesz...
(#) icserny válasza promax hozzászólására (») Nov 16, 2012 / 1
 
Idézet:
„A pufferben gyűlhet az adat egészen a mértéig, de hiába engedélyezek TX megszakítást attól még nem történik semmi. Ahhoz hogy legyen írnom kell a TXREG et.”
Érdekes volna, ha így lenne, de az adatlap mást mond (PIC18F4520, ezt használom a PICula projektben). Ha a buffer nem foglalt, a TXIF '1'-ben van, s szoftveresen nem is törölhető, csak letiltható. Ez azt jelenti, hogy alaphelyzetben le is kell, hogy legyen tiltva, s csak akkor engedélyezzük, amikor írunk a szoftveres bufferbe.
Idézet:
„a megszakítás rutinba mindig töltök fel TXREG et, és kiküldök.”
A megszakításban csak TXREG-be kell tenni az adatot, s léptetjük a kivételi mutatót. A karakter kiküldését a hardver végzi, ezzel már nem kell időt töltenünk.
(#) Hp41C válasza promax hozzászólására (») Nov 16, 2012 / 1
 
Idézet:
„A pufferben gyűlhet az adat egészen a mértéig, de hiába engedélyezek TX megszakítást attól még nem történik semmi. Ahhoz hogy legyen írnom kell a TXREG et.”


Az adó nem úgy működik mint a vevő, nem akkor jelez ha van vett karakter, hanem akkor jelez, ha lehet már adatot tölteni az adó regiszterbe.

Próbáld már ki a szimulátorban. Amint engedélyezed a UART adást (TXEN = 1), a TXIF máris 1 és ha még a TXIE is 1, máris jön a megszakítás.

  1. INT_UART_RX:                                            ; Received character available
  2.                 movf    RCSTA,w,A                       ; Check for error
  3.                 andlw   (1 << FERR) | (1 << OERR)
  4.                 bnz             UART_ERR                        ; If error not to read char
  5.  
  6.                 lfsr    FSR2,UartRxChar
  7.                 movf    UartRxChWp,w,BANKED     ; Get pointer to buffer
  8.                 movff   RCREG,PLUSW2            ; Read character, write it to buffer, clear interrupt request
  9.                 incf    UartRxChWp,f,BANKED     ; Move pointer in circular way
  10.                 bcf             UartRxChWp,7,BANKED
  11.                 incf    UartRxChNum,f,BANKED; Sign one more char in buffer
  12.                 bra             INT_UART_TX
  13.  
  14. UART_ERR:                                                       ; Receive error, reenable receive
  15.                 bcf             RCSTA,CREN,A            ; Turn off receiver
  16.                 movf    RCREG,w,A                       ; Clear receive interrupt flag, drop character
  17.                 bsf             RCSTA,CREN,A            ; Turn on  receiver
  18.  
  19. INT_UART_RX_EX:
  20.  
  21. INT_UART_TX:                                            ; Transmitter data request
  22.                 btfsc   PIE1,TXIE,A                     ; If transmit interrupt enabled
  23.                 btfss   PIR1,TXIF,A                     ; Is it a transmit interrupt
  24.                 bra             INT_UART_TX_EX
  25.  
  26.                 movf    UartTxChNum,f,BANKED; Get next char from buffer if there is one
  27.                 bz              INT_TX_NOCHAR           ; No more chars in buffer
  28.                 lfsr    FSR2,UartTxChar
  29.                 movf    UartTxChRp,w,BANKED     ; Get pointer to buffer
  30.                 movff   PLUSW2,TXREG            ; Get character from buffer, send it, clear interrupt request
  31.                 incf    UartTxChRp,f,BANKED     ; Move pointer in circular way
  32.                 bcf             UartTxChRp,7,BANKED
  33.                 dcfsnz  UartTxChNum,f,BANKED; Sign one char read from buffer
  34. INT_TX_NOCHAR:                                          ; No more chars to transmit
  35.                 bcf             PIE1,TXIE,A                     ; Disable transmit interrupt, clear interrupt request
  36.  
  37. INT_UART_TX_EX:

A hozzászólás módosítva: Nov 16, 2012
(#) djadji hozzászólása Nov 16, 2012 /
 
Két órája keresgélek, de nem találok olyan PICet ami nekem kellene.
Kellene 3 ADC, és 2 PWM csatorna. ÉS ha lehet a legolcsóbb IC persze.
De hiába búlom azt a linket amit kaptam (Ami egyébként tök jó, bár nem minden világos a használatával) amit ott feldob nekem, azt egyiket sem találom meg itthon (HESTORE-t nézegetm és a RET-et).
Ti hogy szoktatok PICet keresni egy feladatra? Ti ezzel szoktátok és elmegy vele egy csomó idő?
(#) potyo válasza djadji hozzászólására (») Nov 16, 2012 /
 
chipcad-nél keresd a kiszemelt picet.
(#) djadji válasza potyo hozzászólására (») Nov 16, 2012 /
 
Valóban, köszi. Most a 16f1512-t kerestem, náluk van . Viszont nem találok semmi olyan infót, hogy postáznak e, mennyiért szállítanak.. ilyesmi.

Mellesleg erre a PICre is véletlen bukkantam rá. Csak úgy random nézegettem őket kínomban.
(#) Hp41C válasza djadji hozzászólására (») Nov 16, 2012 /
 
Szia!

A Microchip honnlapján: Microchip Advanced Part Selector
(#) promax válasza Hp41C hozzászólására (») Nov 16, 2012 /
 
Közeben megnéztem a FIFO témát, köszönöm előre is mindkettőtök részletes válaszát.
Ahogy én megértette a következő:
Főprogram rakja a FIFO ba az adatokat, és minden adatbeírás után adási megszakítást is kér (TXEN). Ettől TXIF=1 lesz feltéve, ha TXREG üres, és írható. Ha igen, megy a megszakásra, ahol a rutin kiveszi a küldendő értéket, és elküldi. Ezzel törlődik is a megszakítás Flag (TXIF). Mielőtt a megszakítást elhagynánk a megszakítás kérést töröljük (TXEN). Megszakításban nem használjuk a TRMT flaget.
A küldés hosszú ideje alatt lehetőség van kihasználni a processzoridőt egyéb feladatokra.

Ha a bufferben másik adat is van, az hogy kerül kiküldésre?
Idézet:
„A főprogramnak van még adata, amit sorban beletesz az adási fifo -ba, és minden karakternél engedélyezi az adási megszakítást. Egyszercsak kifogy az adatból, nem küld többet...”

A FIFO ban ott a következő karakter, mikor belettük adási megszakítást is kértünk. Aztán sorsára hagytuk. Az interrupt a megszakításrutint törölt megszakításkéréssel hagyja el.
Honann lesza TXEN magas ujból?
(#) djadji válasza Hp41C hozzászólására (») Nov 17, 2012 /
 
Köszönöm ezt megtaláltam (bár bevallom nem könnyen)
De most sem értem mi az a From, és Thru oszlop.
És ami PIC-eket kidob, hogy jók a feltételeknek, azokat nem találom meg megvehető formában (itthon)
Mi a véleményetek a következő ötletről:
Csinálnák egy forró levegős pákát egy 2000 Ftos 220Vos pákából (FP 60/VDE), és egy autó pumpáló mini kompresszorból. A pákának kiszedem a hegyét, és keresztül fújom rajta a levegőt. PWMmel (vagy LM317tel) szabályoznám a levegő mennyiségét, a páka végére meg raknék egy PT106051-t. Ezek alapján szabályozná a hőfokot a PIC (ugyanaz a PIC szabályozná a normál HAKKO páka fűtését, szintén egy PWM-mel, a hőérzékelő már benne van a pákában).
Ezért kellene 3 ADC és két PWM.
Szerintetek?
(#) mps válasza djadji hozzászólására (») Nov 17, 2012 /
 
Szia!
From thru = tól ig.
(#) djadji válasza mps hozzászólására (») Nov 17, 2012 /
 
Köszi
Azt értem, hogy tól-ig csak magát a keresés elvét nem egészen értem.
Furcsa nekem az a megközelítés, hogy "olyan PICet keresek, amiben 2,3,4 vagy 5 analóg csatorna van... " Ha már keresek, akkor tudom, hogy PONT 3 kell. De ez az én bajom persze...
16f1512-s tetszik, az kellene nekem. Most be kellene szerezni valahol. Chipcad-nél van, de 2 ICt rendelni nem volna nagyon hatékony (ha lehet egyáltalán)
(#) pjg válasza djadji hozzászólására (») Nov 17, 2012 /
 
Lehet hogy pont 3-as nincs, de 3-tól 4-ig keresve találsz amiben 4 van. Tehát neked az jó. Amelyikben 2 van, az nem jó. Ezért nem 2-től 4-ig keresel.
(#) icserny válasza promax hozzászólására (») Nov 17, 2012 /
 
Nem TXEN, hanem TXIE. A TXEN bitet inicializáláskor kell '1'-be állítani, és úgy is marad. Amikor van adat a bufferben, akkor TXIE=1 engedélyezi a megszakítást. A TXIF pedig mindig akkor magas, amikor kiürült a buffer (gyakorlatilag kéri az újabb adatot...). Ha nincs adat, akkor a TXIE=0 "rácsukja az ajtót" (ne kéregessen, ha nincs mit adni neki).
(#) vilmosd válasza djadji hozzászólására (») Nov 17, 2012 /
 
A 16F1512 a jovo zeneje, egyenlore nem gyartjak. A 16F1516 mar gyartasban van es kaphato a CHPCD-nal. Probald meg ertelmezni a CHPCD oldalan a jeloleseket. Amelyik alkatresznel a sor vegen egy kis kocka van, az kaphato.
De... Ezt a feladatot egy 16F876A, vagy 16F886 el tudja latni. Sot ha jol megnezzuk egy 16F690 is eleg lehet. Felesleges peldaul az AD csatornak szamara keresni, mivel altalaban 10-20 csatornasak a PIC-ek, es annyit hasznalsz fel amennyi szukseges. A PWM pedig megoldhato maskent is. A meglevo HW PWM csatornaval tudod a motort szabalyozni, mig a paka futeset egy SW PWM csatornaval meg lehet oldani. En ugy csinalom a futesszabalyzast (nem paka,de halozati futotest) hogy a TMR0 IT-t hasznalom fel egy lassu ( 1 sec periodusideju) PWM szabalyzasra. Mivel a paka hotehetetlensege nagy, igy nem jelent kulonosebb problemat a lassu PWM hasznalata, sot TRIAC-os vezerlesnel kimondott elonyt jelen, mert nem fazishasitast hasznalok, hanem szinusz csomagokat kapcsolok a futesre, igy nem csinal zavart.
(#) Hp41C válasza djadji hozzászólására (») Nov 17, 2012 /
 
Szia!
- 16F690 -nel van feltöltve cikk a pákaszabályzóról. Inkább 16F1829 -et tennék bele: Nagyobb program (8k) és adat (1k) memóirával rendelkezik, olcsóbb és kapható...
- A 18 lábú 16F1826, 16F1827, 16F1847 is jó lehet, azok kaphatók a ChipCad -nál. Nézd meg az árlistájukat és a web boltjukat. Az LCD kezelhető 4 bitesen is.
- A 16F1513 (4k program és 256 byte adat memória) kapható és ugyan annyiba kerül, mint a 16F1512 (2k program és 128 byte adat memória). Ez nem lenne jó?
- A 16F1xxx család tagjai programozhatók PICKit2 -vel, de nyomkövetéshez PICKit3 kell.
- Valahogy minig a család legnagyobb tagját tartják raktáron...
- A kiválasztó oldalon azt a minimumot állítsd be, ami a feladathoz kell, a maximumot ne korlátozd le. A találati listán pedig más szempomtból (tokozás, elérhetőség, ár, programozhatóság, nyomkövetéshez szükséges eszköz, stb) válogass.
(#) Hp41C válasza promax hozzászólására (») Nov 17, 2012 /
 
Különbséget kellene tenni a megszakítás kérés és a megszakítás engedélyezés között:
Az uart adó példájánál maradva:
Megszaítás kérés akkor aktivizálódik, ha a periféria elkészül. Az uart adó képes a következő adat fogadására. Ezt az állapotot a TXIF jelzi. Akkor is jelez, ha a periféria megszakítás engedélyezése le van tiltva. Az uart adó esetén a TXIE bit 0.
Megszaítás engedélyezés A perifária egy beállító (controll) jelzőbitje. A program a belső állapotától függően dönthet, hogy egy periféria megszakításait kezelni kell, vagy sem.

Az uart adó esetén amennyiben nincs adni való adat, az adó előbb-utóbb elkészül és a TXIF jelzőbit 1 -re áll. Ha a TXIE beállító bit is 1, akkor megszakítás kérés keletkezne, de nincs adat, azaz nem írjuk a TXREG -et, azaz nem töröljük a megszakítás kérés okát. Ha ilyen állapotban visszatérne a megszakítási rutin, a retfie utasítás után ismét a megszakítás kiszolgáló rutin futna le. Ez ismétlődne minduntalan, a főprogram nem tudna futni - illetve megszakítás kiszolgálásonként 1 utasítás sebességgel futna... Próbáld ki szimulátorban.
A megszakítást kiváltó okot a visszatérés előtt törölni kell. Ha nem tudjuk a TXIF -et törölni, mert nincs adat, akkor a TXIE -t kell törölnünk.

Idézet:
„Mielőtt a megszakítást elhagynánk a megszakítás kérést töröljük (TXEN).”

Ez így nem jó! Pontosabban:
Mielőtt a megszakítást elhagynánk és nincs az adási fifo -ban adat, akkor a megszakítás engedélyezését (TXEN) töröljük.

Idézet:
„A FIFO ban ott a következő karakter, mikor belettük adási megszakítást is kértünk.”

Ez sem pontos:
A FIFO ban ott a következő karakter, mikor belettük adási megszakítást engedélyeztük. Így amikor az adó elkészül az épen adott karakter adásával a megszakítás kérése érvényre jut, azaz lefut a kiszolgáló rutinja, kiveszi az (otolsó) adatot és beírja a TXREG -be. Eztán mivel nincs több adat tiltja az adó megszakítás kérését. Hiába készül el az adó ennek az adatnak az adásával (TXIF = 1), nem kér megszakítást mivel a TXIE = 0.
(#) pjg válasza vilmosd hozzászólására (») Nov 17, 2012 /
 
Ez érdekelne. Tudsz róla példát mutatni?

"lassu PWM hasznalata, sot TRIAC-os vezerles"
A hozzászólás módosítva: Nov 17, 2012
(#) vilmosd válasza pjg hozzászólására (») Nov 17, 2012 /
 
Majd kesobb leirom a lenyeget. En C-ben irom a programot, arra tudok peldat mutatni.
(#) pjg válasza vilmosd hozzászólására (») Nov 17, 2012 /
 
Egy folyamatábra skic is elég lenne. Akár szavakban.
A hozzászólás módosítva: Nov 17, 2012
(#) vilmosd válasza pjg hozzászólására (») Nov 17, 2012 / 3
 
Folyamatabra nincs. A lenyege, hogy van egy PWM_duty valtozom, ami 0-100 kozott valtozik. A TMR0 beallitasa olyan hogy minden 10 mS utan ker IT-t. Van egy szamlalom ami szamolja az IT-ket 100ig. Amikor a Amikor a PWM_duty kisebb mint az IT szamlalo, bekapcsolok egy kimenetet, ha nagyobb, akkor kikapcs. Az IT szamlalo a 100 eleresekor nullazodik, es kezdodik elolrol a jatek. A HW resze all egy MOC3062 optobol es egy TRIAC-bol. Mivel az opto nullatmenet erzekelos, csak egesz szinuszt fog kapcsolni a vezerles megjelenese utan. Igy az egesz rendszer a PWM_duty fuggvenyeben szinusz csomagokat fog a futesre kapcsolni, es nincs fazisszog vezerles. Ezzel elerjuk, hogy nem csinal elektroszmogot a szabalyzo, viszont a futotestek hotehetetlensege miatt a szabalyzas folyamatosnak tunik.
(#) pjg válasza vilmosd hozzászólására (») Nov 17, 2012 /
 
Tökéletes! Köszi szépen.
A hozzászólás módosítva: Nov 17, 2012
(#) pjg válasza vilmosd hozzászólására (») Nov 17, 2012 /
 
A PWM_duty változóba én rakok be egy értéket 0-100 -ig. Ez lesz a PWM arány. Jól értelmezem?
A hozzászólás módosítva: Nov 17, 2012
(#) vicsys válasza vilmosd hozzászólására (») Nov 17, 2012 /
 
Egy kapcsolási rajzot és kódrészletet ha tudsz küldeni, nagyon hálás lennék.
(#) pjg válasza vilmosd hozzászólására (») Nov 17, 2012 /
 
Erre gondoltam. A MOC az 1-es lábán lévőellenállással kapcsolódik a PICre.
MOC
A hozzászólás módosítva: Nov 17, 2012
(#) vilmosd válasza vilmosd hozzászólására (») Nov 17, 2012 / 2
 
Idézet:
„Amikor a PWM_duty kisebb mint az IT szamlalo, bekapcsolok egy kimenetet, ha nagyobb, akkor kikapcs.”
Bocs de meg alszok. Helyesen: Amikor az IT szamlalo kisebb mint a PWM_duty, bekapcsolok egy kimenetet, ha nagyobb, akkor kikapcs.
(#) vilmosd válasza pjg hozzászólására (») Nov 17, 2012 /
 
Pontosan igy. A PWM_duty valtozot a kivant futeshez szamoljuk ki. 0-100 kozott kell valtoznia.
(#) vilmosd válasza vicsys hozzászólására (») Nov 17, 2012 /
 
Jo, de ezt mar tenyleg kesobb, mert masik gepen van, es meg nem reggeliztem. Majd reggeli utan felmek a muhelybe.
(#) pjg válasza vilmosd hozzászólására (») Nov 17, 2012 /
 
Még csak reggeli? Isteni pörit ettem tarhonyával. Az imént, ebédre.
A hozzászólás módosítva: Nov 17, 2012
(#) vilmosd válasza pjg hozzászólására (») Nov 17, 2012 /
 
Mert nalm az ora 8:12-t mutat. 7 oraval el vagyok maradva.
(#) pjg válasza vilmosd hozzászólására (») Nov 17, 2012 /
 
Tudom, csak teli hassal jólesik a viccelődés. Itt már lassan megy lefelé a nap.
Következő: »»   329 / 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