Fórum témák
» Több friss téma |
Hi
Olyan kérdésem lenne, hogy amikor elindítom a debug-ot akkor van olyan ablak amiben nyomon lehetne követni a pl a timer0 működését? Tehát hogy az háttérben elkezd számolni? Pl mint a watch ablak
View-> Special Function Registers. Minden regisztert megmutat.
A Watch ablakban is megjelenítheted timer0 belső számlálóját. Sőt, az előszámlálóját is.
Hi Mesterek, megint Én.
Azt szeretném megkérdezni hogy hogy célszerűbb két vagy több megszakítást használni? Mert ugye ha jól tudom mindegyik megszakítás a 8 mem címre ugrik ha magas porításban van. Szóval befut a 8 adik helyre akkor flag alapján megvizsgálni és úgy ugratni, vagy van valami más "elágazási" lehetőség is? Remélem érthető volt a kérdésem.
Szia!
Két lehetőséged van, amit kombinálni is lehet: - Kétszintű megszakítás: Az okok egy részét a magas, a másik részét az alacsony megszakításhoz állítod be. Két ok esetén rendben is van minden. - Mindet a magas/alacson szinthez állítod be. Ha több, mit két okot kell kezelni, akkor a kombinált módszer a járható: - A kiszolgáló rutinban a fontosság szerint megvizsgálod, hogy melyik eszköz kérte a megszakítást, ha kért, kiszolgálod, törlöd a kérést, ha nem, akkor a következő eszközt vizsgálod.
Ninc mas lehetoseg, a PIC-ben nincs vektorizalt megszakitas tabla. Egy trukkot csinalhatsz meg -- mivel sejtesem szerint 18F-rol beszelsz --, letezik ugye a magas prioritasu megszakitas. Azt a megszakitast amit gyorsabban kell lekezelned oda teszed es csak azt teszed oda, es akkor ott nem kell vizsgalat, hogy a lekezeld a megszakitast.
Amugy meg a lekerdezesi fat ugy kell ossze rakni, hogy azoknak a megszakitasok amik sokszor jonnek be minel hamarabb metalalhasd a kelezojet. Idézet: „a PIC-ben nincs vektorizalt megszakitas tabla” Legalább is a 18F-ig nincs, de a 24F után már van...
Sziasztok!
Egy pic 18f4550-el legózok épp, a PWM-mel kapcsolatos dolgokat próbálgatom, de elakadtam. Az megy, hogy USB-n keresztül jön egy karakter és bekapcsol a LED. Egy másik USB-n keresztül érkező üzenetre kikapcsol a LED. Viszont, amikor PWM-el van szabályozva a LED fényereje, akkor nem tudom hogyan lehetne megszakítani a futást. Most úgy zajlik nálam az élet a főprogramban, hogy egy usb_cdc_getc() függvénnyel vár amíg nem jön karakter, utána kiértékeli a karaktert, és mondjuk ha 'c' jött, akkor a LED-et fél fényerőre kapcsolja. Ez nagyvonalakban kb így néz ki: if(c =='8'){ while(1){ mLED_5_Toggle(); Delay100TCYx(120); mLED_5_Toggle(); Delay100TCYx(120); } } Mit lehetne a while után jövő 1 helyére rakni, hogy ha üzenet érkezik az USB-n keresztül akkor kilépjen a ciklusból? Gondolkoztam a usb_cdc_getc() függvényen, de az blokkoló típusú, úgyhogy nem jó Valami ötlet?
Használd az usb_cdc_kbhit() makrót!
Ez a feltétel akkor teljesül, ha van kiolvasatlan karakter az input buffer-ben. Azt viszont nem értem, hogy miért teszel egy if törzsbe végtelen ciklust? Fordítva lenne logikus: a főprogram végtelen ciklusán belül kellene különféle feltételeket vizsgálni és a feltételeknek megfelelő átállításokat végezni. A végén pedig lehetne egy olyan ág, ami a LED villogtató vagy egyéb alaptevékenységet elvégzi. Természetesen ekkor nem lehet 100 ms-okat várakozni, hanem rövidebbre szabott késletetés után a ciklusokat kellene számlálni, s előírt számú ciklus után kapcsolni. A PICCOLO projekt I/O portok c. fejezetében a LED vezérlése nyomógombb al II. nevű mintaprogram végén látható egy példa a visszaszámlálásra. A ~20 ms-os időszeletekből (ami a pergésmentesítéshez alkalmazkodó érték) 25 db-ot számolunk le a LED minden átkapcsolásáig.
A rákövetkező programban hasonlóan, de gyorsabb ütemben végezzük a LED villogtatását, ha a STATE_BLINK állapot aktív:
Az if rész már a végtelen cikluson belül van. Ez a részlet amit kimásoltam már ez:
után jön. Itt megvizsgálom, hogy mennyi a "c" értéke. Fentebb volt, hogy ha mondjuk 8 az értéke, akkor villogtassa a ledet folyamatosan. Azért volt a végtelen ciklus, mert nekem az kéne, hogy _folyamatosan_ villogjon a led, egészen addig, amíg nem jön más karakter. Tulajdonképpen az kéne, hogy a cdc_getc és a led villogtatás parallel fussanak.
Valahogy így képzelem a szervezést:
Az 5000-es értéket csak találomra írtam, mindenesetre ha nincs külön késleltetés, akkor elég nagy szám kell ide. A profi megoldás természetesen a timerek és interruptok használata volna.
Szerintem elbeszélünk most egymás mellett, mert nekem az kéne, hogy a bejövő karakter hatására villogjon a led. Ne csak úgy a vakvilágba általánosan :no:
Ja igen, ami mégfontosabb:
ÉS ha egy másik karakter érkezik USB-ről, akkor ne villogjon tovább a LED.
Na, a moderátorok biztos nem fognak most szeretni, de megoldottam a dolgot. Most már ha 'a' jön az USB-re, akkor bekapcsol a LED, ha 'b' akkor kikapcsol, ha 'c' akkor meg halványan világít.
Yeah!
Sziasztok!
Segitségre lenne szükségem egy 16F675-be irandó program kapcsán. Adott a lenti áramkör amiben tönkrement a PIC. Ha valaki segitene a program megirásában, több 12F675-öt felajánlanék neki szeretettel. A következő dolgot csinálta amig jó volt: - a táp rákapcsolása után kigyújtotta az izzót 20mp-ig, aztán 1nap(24óra) múlva ismét kigyújtotta 20mp-ig és igy tovább a végtelenségig.
Bármelyik LED villogtató program megteszi, csak az időzítéseket kell beállítani úgy, hogy Ton = 20 s, Toff = 86380 s legyen. Az időzítések méretesében segít a PIC Delay Code Generator. Bővebben: Link
Szia!
Nagyon köszönöm! El tudnád nekem küldeni pontosan mit kéne beégetni(forrás), és(.hex) ? Illetve mivel csinálom az .asm-ből a .hex-et? Bocs, csak égetni tudok, programozásban abszolút 0 !!
Bocsanat, hogy kozbe kotyogok, de egy ilyen aramkort jobb lenne megtervezni alacsony fogyasztasura. Az a 7805 mar eleve tul sok energiat fog elmelengetni, azonkivul ha a PIC -nek valoban nincs mas feladata, akkor velemenyem szerint eleg nagy pazarlas aktivan varakozni. Vagy egy ora kaviccsal es timerrel kellene megoldani a kerdest, hogy kozben aludni tudjon a PIC, vagy ha nem baj ha nem teljesen pontos az a napi idozites, akkor a watchdog timerrel ahol szinten tud aludni az ideje nagy reszeben.
Forrás az előző hozzászólásomban van, a Microchip honlapjárólletölthető MPLAB IDE MPASMWIN.EXE programja fordítja.
A HEX állományt is csatolom, ezt kell beégetni. Nem tudom, milyen égetőd van. Ha sipákol a formátum (32 bites címzés) miatt, akkor próbáld meg kitörölni a HEX állomány első sorát!
Nagyon rendes vagy és köszönöm.
Már csak egy szimulátor progi kellene, ahol meg tudnám nézni hogyan villog a LED, és valóban azon a porton megy-e ahová én rajzolam. PIC 5-ös lába! Próbáltam a PIC SIMULATOR IDE-t de nem mutaja hogy villog a led, de a progi fut...
Sziasztok.
Próbáltam írni egy szervó működtető progit. A timer1 megszakítást használva (ahogy Foxi63 javasolta), de van egy kis gondom. Nem tudom, hogy miért nem megy a progi, ha a főprogramban bekapcsolt prot azonos a megszakításban lévő portal. Ha pl. a megszakítás kimeneti portja PORTA,x és a főprogi is PORTA,x akkor nem megy, de ha valamelyik feladat más portra kerül (PORTB,x), akkor minden jó és szépen megy.
Szia!
Töltsd le az egész MpLab programot. Telepítsd. Készíts egy projectet a Project Wizard segítségével. Állítsd be az MPLAB SIM -et debuggernek. A Debugger / Settings ablak Osc fülén állítsd be az órajelet. A View/ Simulator Logic Analyzer menüpont alatt add a listához a kimeneteket, amelyeknek a hullámformáját szeretnéd látni. Fordítsd le a forrást. Indítsd el a szimulációt. Simulator Logic Analyzer ablakában kirajzolja a listára felvett jelek idődiagramjait.
Mi az ami megy es ami nem? Szimulatorban nalam tokeletesen megy -- idoziteseket es a program tobbi reszet nem neztem...
Van esetleg skype-os msn-es elérhetőséged?
Igy levelezve nagyon körülményes..... Köszönöm.
Ha mind a két kimenet (főprog.ki és a szervó) a PORTB-n van nem megy a megszakítás, de ha átrakom a PORTA, PORTC-re ott megy. Vagyis a PORTB-n nem megy a Timer1 megszakítás. Közben nézegetem a 16f882 adatlapot mert valami configurációs probléma van, csak nem tudom, hogy mi.
Ja ertem mar -- a megszakitasod attol meg bejon, csak elfelejtetted az ANSELH-t is kinullazni az inicializalasnal...
Van SkyPe-om, ugyanaz a felhasznaloi nev -- de amugy a forumon azert jobb a kerdest feltenni, mert egyszerre tobben tudnk segiteni, tobb szemszogbol latjak at a problemadat.
Köszönöm. Közben megtaláltam Én is. Még azt szeretném kérdezni, hogy ezt a megszakítást meg lehet csinálni ugyanígy a tmr2 vel is? A tmr1-et szeretném másra használni.
|
Bejelentkezés
Hirdetés |