Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   860 / 1320
(#) spepe válasza spepe hozzászólására (») Dec 14, 2010 /
 
Hello!

Csak szeretném újra felhozni ezt a kérdést.
(#) watt válasza messer hozzászólására (») Dec 14, 2010 /
 
Karácsonyi ajándék.
A rajz is ott van mellette, de nyák nincs. Nekem most itt működik az asztalon egy 16F628A-ban(627A-ba is belefér, nem kell módosítás a hex-en), igaz sima LED-ekkel, de ez mindegy. Az AUX nem működik, nincs is a rajzon, de igazából nem is jöttem rá mire való...
A gombot, ha röviden nyomod, akkor megáll a fény, ha folyamatosan, akkor kikapcsol(sleep). Visszakapcsolni szintén hosszabb megnyomással lehet.

Én is kérdeznék, milyen RGB LED-ed van, hol vetted?
(#) messer válasza watt hozzászólására (») Dec 14, 2010 /
 
Szia! Kaptam egy volt kollégámtól smd rgb ledeket ezek ambi light tv-ben voltak. A lomexnél van rgb led ha minden igaz.Köszönöm a forrást ez ugyan az a projekt?
(#) icserny válasza spepe hozzászólására (») Dec 14, 2010 /
 
Most boldogabb vagy, ha leírjuk, hogy: NEM?
(#) spepe válasza icserny hozzászólására (») Dec 14, 2010 /
 
Igen, mert így legalább nem várok válaszra. Köszi azért, körbe leskelődök még hátha.
(#) watt válasza messer hozzászólására (») Dec 14, 2010 /
 
Ugyanaz, de módosított, természetesen...
(#) Crea hozzászólása Dec 14, 2010 /
 
Sziasztok!

Egy pic18f2620-ra C-ben szeretnék írni egy programot ami egy bonyolult matematikai függvényt számít ki.
Kérdésem az lenne, hogy hogyan lehetne lemérni a program lefutásának sebsségét, vagyis hányszor számolja ki különböző értékekkel 1 mp alatt a függvény eredményét? gondolom debuggolás alatt pickit2-ből valahogy meglehet oldani. van-e a mirkovezérlőben olyan regiszter ami inkrementálódik vagy változtatja az értékét függetlenül a program futásától órajelfüggően, amit le lehetne kérdezni bizonyos időközönként? tudom kicsit lusta vagyok utána nézni de egy egyszerű rávezetés és megkímél ezernyi dolgom mellett több óra fáradságos görnyedő kutatástól!
A válaszokat előre is köszi!
(#) potyo válasza Crea hozzászólására (») Dec 14, 2010 /
 
Idézet:
„van-e a mirkovezérlőben olyan regiszter ami inkrementálódik vagy változtatja az értékét függetlenül a program futásától órajelfüggően, amit le lehetne kérdezni bizonyos időközönként?”


Timer mond-e valamit?
(#) El_Pinyo válasza Crea hozzászólására (») Dec 15, 2010 /
 
Használhatod az MPLAB beépített szimulátorát is. Teszel egy breakpointot a függvéyed elejére, egyet meg a függvényt követő utasításra. Megnyitod a debugger menupont alatt található stopwatch eszközt, abban az első breakpoint elérése után kinullázod az értéket, nyomsz még egy run-t és amikor eléri a második töréspontot a szimulátor, láthatod is az algoritmus futási idejének hosszát. Megjegyzésként azért ideírnám, hogy a debugger settings- ben előzetesen be kell állítani a kontroller órajelét, hogy pontos adatot kapjál.
(#) icserny válasza Crea hozzászólására (») Dec 15, 2010 /
 
Idézet:
„egy egyszerű rávezetés”
Adatlap.... Mindig ez az elsődleges információforrás. :yes:
(#) trudnai válasza Crea hozzászólására (») Dec 15, 2010 /
 
Csinalsz egy timer interruptot pontosan 1mp-re es a foprogramban szamlalot novelgeted minden alkalommal mikor a szamitasod veget ert. Interruptban meg kiirod a szamot egy LCD-re vagy oda teszel egy break pointot es megnezed a szamot debuggerrel. Csak arra vigyazz, hogy a szamlalo megfeleloen nagy legyen nehogy tul csorduljon ha ne adj isten a szamolo rutin tul gyors lenne...
(#) watt válasza trudnai hozzászólására (») Dec 15, 2010 /
 
Tú is csordulhat, csak akkor azt is számolni kell... De a szimulátor sokkal egyszerűbb és gyorsabb.
(#) erdoszoli hozzászólása Dec 15, 2010 /
 
Sziasztok ujra.
sajnos ugyfest a sorosporti adatkommunikációt mégse tudom elég gyorsan lekezelni mint hogy a gép egy adatcsomagot küld, így nem teljes az adatfeldolgozás. Át kell térnem az interruputos megoldásra, viszont azért is nem használtam eddig mert az elképzelés nincs meg hogy tudnám a folyamatos adatfeldolgozást végrehajtani. Szoval a lényeg hogy a gépről egy adatsorozatot küldök ki az eszköznek és ezeket 8bitenként dolgoznám fel. pl a 2. 8bit az adatfolyam hosszát tartalmazza(hány bájt) és ezalapján lehet tudni hol az adatfolyam vége. nahmost hogy tudnám eltárolni ezeket a bájtokat és menetközben figyelni őket ha interruptosként irom meg a soros porti kommunikációt?
(#) icserny válasza erdoszoli hozzászólására (») Dec 15, 2010 /
 
Nagyon leegyszerűsítve és hibafigyelés nélkül úgy, ahogy a mellékelt fájlban látod. A buffernek létre kell hozni egy tömböt, s két mutató kell hozzá: egy kimeneti és egy bemeneti. Ha a két mutató megegyezik (ugyanoda mutat), akkor a buffer üres, vagy túlcsordult. A mutatókat célszerű az ACCESS Blokkban tárolni. Bővebben: Link

usart.c
    
(#) LAC001 válasza vilmosd hozzászólására (») Dec 15, 2010 /
 
Szia!
Köszönöm akkor Zener kimarad a mókából.
Üdv LAC
(#) trudnai válasza erdoszoli hozzászólására (») Dec 15, 2010 /
 
Harveres handshake-el probalkoztal mar? RTS / CTS jeleket kellene bekotnod es kezelned es akkor mikor epp nem birsz adatot fogadni, akkor a CTS-t alacsonyba teszed... Ha ujra kepes vagy fogadni, akkor megnezed, hogy az RTS magas-e, azaz akarnak-e kuldeni adatot, es ha igen, akkor a CTS-t magasra huzod, amugy alacsonyan hagyod. Ily modon mas dolgokat is csinalhatsz mig periodikusan rakukkantasz az RTS-re... azaz pollozol...

Amig a CTS nem kerul magasra (altalad) addig a masik oldalon az eszkoz varakozik. Tehat nem fog adat elveszni.

Ha az ado oldalt is Te csinalod, akkor pedig az RTS-el jelzed, hogy kuldeni akarsz, es figyeled a CTS-t, ameddig az nem engedelyez, addig nem kuldozgetsz... kb ilyen egyszeru.

Ami a protokollt illeti: Tokeletesre megcsinalni nem egyszeru, de altalaban a legjobb megoldas, ha csinalsz egy fix hosszusagu fejlecet (header), abban van leirva minden, hogy milyen fajta csomagrol van szo, hogy milyen hosszusagu adatot akarsz kozolni, es szokas mind a headerre mind pedig az adatcsomagra egy CRC-t is oda tenni. Elobb ellenorzod, hogy a fejlec hibatlanul atjott-e (CRC alapjan). Ha igen, akkor johetnek az adatok, varsz ameddig X szamu adat byte at nem jott, ellenorzod a CRC-jet. Ha nem jtt meg X szamu byte-, akkor egy idozito segitsegevel eszre kell venned, hogy a kapcsolat megszakadt vagy csonka adatcsomag erkezett (time-out).

Namost, ha egy oldali a kommunikacio, akkor nehez jelezni a masik felenek, hogy minden rendben volt, vagy, hogy ismetelje meg az adast. Ha ketoldalu akkor olyan fajta csomagokat is kell tervezni, hogy ACK (acknoledgement, jelzi minden ok). Aztan NAK (Not ACK...). Nezdd meg az ASCII tablat, ott 1-1 karakterrel oldottak meg ezeket a kodokat, erdemes a csomag fajtahoz is ezeket az ertekeket felhasznalni meg akkor is, ha nem csupan egyetlen byte-ot, hanem egy komplett csomagot kuldesz at.
(#) erdoszoli hozzászólása Dec 15, 2010 /
 
Hát igen az RTS / CTS megoldás jonak tünik de már hardverileg nem tul megoldhato, kész nyákon már csak a program hiányos.
Ez a bufferes megoldás viszont tetszetős. Ha ezt illesztem igy be a progi elejére persze init modositás után, akkor más más alfüggvényekből is elérhető a TX és RX buffer? illetve a buffer mutatót is tudom nullázni máshonnan ? pl ha feldolgozta az adatot, és a tx bufferbe is kiküldött ujabbat, akkor az RX_inp -et nullázni tudom e h ujra elejétől töltse a buffert, és ne keljen ujboli olvasásnál körbe mennem a bufferen ?
(#) erdoszoli hozzászólása Dec 15, 2010 /
 
A hibafigyelés meg elvileg megvan egy CRC16 függvénnyel , viszont eddig ugye nem igazán volt elfogadva minden adat a 'lassu' feldolgozás miatt.. És ha éppen dolgozott mikor még adat jött akkor ugye ki-ki maradtak bájtok .. Ebben a bufferesben viszont bízom nagyon .
(#) icserny válasza erdoszoli hozzászólására (») Dec 15, 2010 /
 
Nem volna egészséges, ha boldog és boldogtalan matatna a bufferekben. A főprogram oldaláról ezt csak az _usart_getc(), _usart_putc() függvényeknek engedd meg! Itt csak a vételt mutatom, azt is leegyszerűsítve:
  1. char _usart_getc(void) {
  2. char c;
  3.   while(RX_inp == RX_outp);
  4.   c =RX_buffer[RX_outp];
  5.   if(RX_outp+1==RX_BUF_SIZE) {
  6.       RX_outp=0;
  7.   } else {RX_outp++; }
  8.   return (c);
  9. }


A mutató léptetése látszólag túl van bonyolítva. Figyelembe kell azonban venni, hogy a mutató módosítása csak "atomi" (azaz az interrupt által nem félbeszakítható módon) végezhető. Ez bonyolultabb előkészítést igényel, annak viszont nem árt az esetleges félbeszakítás. Így megspórolható az interrupt letiltása a kritikus szakaszon.
(#) erdoszoli válasza icserny hozzászólására (») Dec 15, 2010 /
 
Egy kis homály támadt bennem az RX_outp mutatóval kapcsolatban. Az előbb csatolt .c fájlban nem nagyon láttam sehol ezt a mutatot, csak a deklarálásban, ezért nem nagyon világos a 3. sor , majd utána h miért is fogja ez azt a következő adatot visszaadni ami a következő ? Az világos hogy a mutatót növeled egyel majd egyszercsak nullázod, de a 3. sor jelentése kérdőjel.
(#) icserny válasza erdoszoli hozzászólására (») Dec 15, 2010 /
 
Keresd fel a már többször megadott linket követve a honlapomon található PICula projektet, s abban nézd meg az inicializálásokat (elsősorban az init_usart() és InitializeSystem() függvényekre gondolok)!.. Ebben van a hardver inicializálása is, meg a kérdezett hiányzó láncszem, a mutatók inicializálása is:
  1. RX_inp = 0;
  2.   RX_outp = 0;
  3.   TX_inp = 0;
  4.   TX_outp = 0;


Bővebben: Link
Idézet:
„de a 3. sor jelentése kérdőjel.”
Az RX_inp mutatót az interrupt kiszolgálásakor léptetjük, ahogy pakolgatjuk be a karaktereket. Az RX_outp mutatót a főprogramban léptetjük, ahogy szedegetjük ki a karaktereket. Amikor a buffer végére érünk, kezdjük az elejéről (gyűrűs buffer).
(#) erdoszoli válasza icserny hozzászólására (») Dec 15, 2010 /
 
Nem ez volt a kérdés Már felkerestem (nem ma először) , és az érték oké, csak a 3. sor nem volt tiszta, de azóta leesett hogy addig vár amíg a mutatok megegyeznek mert addig nincs benne friss vagy új adat. Hosszú nap volt elnézést a lassú felfogásért Még az is lehet hogy ma átírom és letesztelem , ha mégse akkor holnap írok hogy mire jutottam. Köszönöm mégegyszer a segítséged.
(#) icserny válasza erdoszoli hozzászólására (») Dec 15, 2010 /
 
Az nem illik, hogy megérted, amíg be sem fejeztem a magyarázatot...
(#) erdoszoli válasza icserny hozzászólására (») Dec 15, 2010 /
 
(#) trudnai válasza erdoszoli hozzászólására (») Dec 15, 2010 /
 
Idézet:
„Hát igen az RTS / CTS megoldás jonak tünik de már hardverileg nem tul megoldhato, kész nyákon már csak a program hiányos.”


Ebbol levonhato ket orok tanulsag:

1. A mikrokontrollereknel a Hardver es Szoftver szorosan ossze tartozik, az egyik nem mukodik a masik nelkul

2. Ameddig nincs mukodokepes prototipus addig felesleges nyakot tervezni es gyartani
(#) icserny válasza erdoszoli hozzászólására (») Dec 16, 2010 /
 
Idézet:
„Hát igen az RTS / CTS megoldás jonak tünik de már hardverileg nem tul megoldhato”
Van szoftveres megoldás is: XON/XOFF protokol. De ha jól értettem a problémádat, egyelőre nincs szükséged rá.
(#) erdoszoli válasza icserny hozzászólására (») Dec 16, 2010 /
 
Igen szerintem se kell ez a megoldás. Viszont a program átirás után ide jutottam. Szerintem amit kellett include-oltam , de ezt kapom build-nál.
Advisory[1233] Employing 18F2420 errata work-arounds:
Advisory[1234] * Corrupted fast interrupt shadow registers
Error [499] ; 0. undefined symbol:
_usart_putc(minor_v6.obj)

Ami különbség icserny progijához képest hogy én a HI tech buildert használom nem az mplab C18as forditoját, ezért lehet hogy valami nem izlik neki . Ha minden kötél szakadna akkor a hétvégémet rááldozom hogy a picula projectbe belevésem a meglévő programot csak az elég hosszadalmas lenne
(#) icserny válasza erdoszoli hozzászólására (») Dec 16, 2010 /
 
Idézet:
„én a HI tech buildert használom nem az mplab C18as forditoját”
Ez elég rossz vicc.
(#) erdoszoli válasza icserny hozzászólására (») Dec 16, 2010 /
 
Úristen mi roszat mondtam ? :eek2:
(#) trudnai válasza erdoszoli hozzászólására (») Dec 16, 2010 /
 
Idézet:
„Úristen mi roszat mondtam ?”


Ezen gondolkozz el inkabb:

Idézet:
„Error [499] ; 0. undefined symbol:
_usart_putc(minor_v6.obj)”


Ez nyilvanvaloan azert van, mert:

Idézet:
„különbség icserny progijához képest hogy én a HI tech buildert használom nem az mplab C18as forditoját”


...magyaran neked mas tamogatoi konyvtaraid vannak, igy a soros porti kezelo neve es valosiznuleg hasznalata kulonbozik... Doksi olvasgatast tudnam javasolni.
Következő: »»   860 / 1320
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