Fórum témák
» Több friss téma |
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... Idézet: É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.„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.” Idézet: 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. „a megszakítás rutinba mindig töltök fel TXREG et, és kiküldök.” 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.
A hozzászólás módosítva: 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ő?
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.
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?
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?
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)
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.
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).
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.
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.
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.
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
Majd kesobb leirom a lenyeget. En C-ben irom a programot, arra tudok peldat mutatni.
Egy folyamatábra skic is elég lenne. Akár szavakban.
A hozzászólás módosítva: Nov 17, 2012
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.
Tökéletes! Köszi szépen.
A hozzászólás módosítva: 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
Egy kapcsolási rajzot és kódrészletet ha tudsz küldeni, nagyon hálás lennék.
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
Idézet: Bocs de meg alszok. Helyesen: Amikor az IT szamlalo kisebb mint a PWM_duty, bekapcsolok egy kimenetet, ha nagyobb, akkor kikapcs. „Amikor a PWM_duty kisebb mint az IT szamlalo, bekapcsolok egy kimenetet, ha nagyobb, akkor kikapcs.”
Pontosan igy. A PWM_duty valtozot a kivant futeshez szamoljuk ki. 0-100 kozott kell valtoznia.
Jo, de ezt mar tenyleg kesobb, mert masik gepen van, es meg nem reggeliztem. Majd reggeli utan felmek a muhelybe.
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
Mert nalm az ora 8:12-t mutat. 7 oraval el vagyok maradva.
Tudom, csak teli hassal jólesik a viccelődés. Itt már lassan megy lefelé a nap.
|
Bejelentkezés
Hirdetés |