Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Tehat akkor csak a stack a ludas. Probald meg egyszerusiteni a programodat pl osszevonni tobb osszetartozo szubrutint, es amit emlitettem IT-s delayt. Esetleg meg lehet valami keresztbeugralas is, pl meghivsz egy szubrutint, es goto-val kiugrasz belole. Ez tud erdekes es rapszodikus hibakat okozni.
Valószínűleg ez lehet a gond mert most a szimulátorban látom ahogyan pakolja szépen egymás alá a 0006FE címeket. Egyenlőre nem jöttem rá hogy mi okozza, nem is tudom még pontosan hogy hogyan kellene kideríteni.
Idézet: Vagy legalábbis működőképes. Csak egy kicsit ágyúval verébre... „ez a jó megoldás” A formátum értelmezgetésével a printf, sprintf sok erőforrást felzabál.
Beraksz Break-et a megfelelo helyekre es ott megallitod a szimulaciot. Biztos valami ilyen lehet, hogy meghivsz egy szubrutin es kiugrasz belole, majd meg megismetled egy parszor. A STKPTR pedi csak no"l de nem csokken soha. Igy hamar megtelik es mar ott is a baj.
Első körben nézd meg, hogy mi van a 06FE címen, és mi szakítja meg ott a futást!
Szia!
Van még néhány lehetőség a stack hiba előállítására, a call / return hibán kívűl is, amit nehéz észrevenni: - Olyan változót használsz egy bankban, aminek a címe az ACCESS bankban megegyezik a STKPTR címével, és nem BANKED elérést fordítottál (az ACCESS a default). - Indirekt elérés pont a STKPTR -be ír. - A BSR a 15 lapra mutat és ezen a lapon végzel BANKED műveletet a STKPTR címére. - Elfogyott a stack: Az első hívás lemegy, mert véletlenül nem volt megszakítás a futása alatt, de a három késleltető rutin ideje alatt biztosan bejön a kérés. Lehet, hogy a megszakítási cím még belefér, de a rutin további subrutinokat hív... A magas megszakítási szinthez tartozó rutin megszakíthatja az alacsonyét, további stack felhasználást jelent. - push ill pop utasítások használatában hiba.
Megvan! A TMR3 túlcsordulás-jelző flag bitjét nem töröltem a megszakításból való kilépéskor.
Szia!
A tmr3 megszakítás törlése csak tüneti megoldás lesz... A stack hiba a törléstől nem szünt meg, csak ritkult. A programot érdemes átnézni, mert a hiba a legváratlanabb helyzetben újra elő fog jönni... View / Hardware Stack megmutatja a stack tartalmát, és azt is hogy mennyi hely van még benne.
Szia!
Ez nem csak tüneti megoldás. A GIE bit 1-be állítása után jön a retfie parancs amivel a megszakításból visszalépne a PIC. De mivel a jelzőbitet nem töröltem, ezért a
sorról azonnal a megszakításvektorra ugrik, úgy hogy ki sem lép belőle.
Szia!
Nem kételkedtem benne... A megszatítás engedélyezése okozza a problémát. A megszakítás beérkezésekor a szinthez tartozó engedélyezés bit (nem prioritásos módban a GIE / prioritásos módban a GIEH vagy GIEL a prioritástól függően) törlődik, a kilépéskor a RETFIE állítja vissza automatikusan. A sok egymásutáni megszakítás így nem növeli a stack -et. (Más kontollerekben a megszakítás engedélyezésének érvényre jutását késleltetik egy utasítás végrehajtásával.)
Hello,
Hogyan lehet PIC32-ben egyszerre több, szám szerint 4 motórt kontrollálni PWM->HBridge-el?
A karakteres LCD-kijelzőknek van valami általánosan elterjedt lábkiosztása? Vagy össze-vissza mindegyiknek egész más?
Hali! Bővebben: Link
Én eddig csak ilyen lábkiosztással találkoztam.
Szia!
A háttérvilágítással lehet még bővíteni, de a megoldás már nem egységes. Van olyan típus, ahol a csatlakozó egyik és olyan is, ahol a másik végére toldották be a két kivezetést. Sok típushoz külön beépíthető háttérvilágítás is kapható - a polaritás is változhat...
Lehet hogy szerencsém volt akkor, mert én már találkoztam néhány régebbi bontottal is, és azokhoz is passzolt a linken található lábkiosztás, még a háttérvilágítás is. Olyannal már én is találkoztam, ahol az LCD kijelző egyik végén ott volt a háttérvilágítás, de azt általában megtaláltam a többi csatlakozó között is.
Én találkoztam egy-két elfajzott példánnyal, ahol az első három láb (Vss, Vdd és Vlcd) sorrendje volt kicsit megkavarva. Ha van rá mód, érdemes az adott típus adatlapjában megnézni a bekötést, mert a tápfeszültségek csere-beréje akár károsodást is okozhat a kijelzőben.
Már régóta feláll a szőr a hátamon, ma nem bírtam tovább:
Ezeket rövid magánhanzóval írják: akkór mikór motórt Ezeket pedig hosszú magánhangzóval: müködik bohockodjak irni egyszerüen itéli öket Az adatapon ezt olvasom: Technikum egyetemre jarok... Kérlek, legalább ezeket írd ezután helyesen. (Talán akkor többen fognak válaszoni a kérdéseidre...)
Köszönöm, működik és szépen szimulálja a progimat.
Lenne még egy kérdésem, hogy a PIC24HJ64GP206A esetén belső oszcillátort (FOSCSEL) 80MHz-et használva mennyire stabil az órajel? Nekem nem fontos, hogy pontosan 80MHz legyen, viszont az már igen, hogy az egymást követő 5db 30mS-os időtarmban ugyanaz legyen az órajel (max +/- 2 impulzus eltérés).
Sziasztok!
Kezdő PIC-es vagyok, és lenne egy kérdésem (inkább kettő). Jól sejtem, hogy a PIC-ek bemenetein van pergésmentesítő ák. ? Mert írtam ezt a kis programocskát, ami elvileg egy futófényt valósít meg. Az RB0/INT lábra kötött nyomógomb megnyomásakor (mely GND-re van húzva 2,2k-val, és megnyomásra Vdd-re kapcsol) a futófény megáll, majd újboli megnyomásra a másik irányba elindul. A LED-ek 330ohm-al GND felé. Az a probléma, hogy a gomb megnyomására néha csak irányt vált, mintha a megállást átugorná, máskor meg megáll, de nem vált irányt. Néha meg a tervezettnek megfelelően működik. Azt szeretném kérni, nézzétek meg a programot, hogy szoftveresen van-e benne bibi, vagy a hardwer lehet hibás? MPLAB szimulátoron a sw.-t én tesztelgettem, ott szerintem hibátlan. Két napja kezdtem, úgyhogy a forráskód lehet, hogy kusza, de azért nagyjából működik. Előre is köszönöm!
Szia!
Sajnos nincs, a programba kell beletenni...
A watch ablakban miért azt írja mindenhez hogy "Out of Scope"?
Idézet: Semennyire. Százalék vagy tizedszázalék? Az adatlap jobban tudja.„belső oszcillátort (FOSCSEL) 80MHz-et használva mennyire stabil az órajel?” Idézet: Kvarcoszcillátorral sem könnyű ilyet csinálni, pláne, hogy PLL is van az oszcillátorban. „az egymást követő 5db 30mS-os időtarmban ugyanaz legyen az órajel (max +/- 2 impulzus eltérés).”
Sok PIC-nek van schmitt triggeres bemenete -- azzal egy egyszeru alulatereszto szurovel lehet hardveres perges mentesitest csinalni.
Idézet: Schmitt-triggeres bemenet van, de ez önmagában kevés a pergésmentesítéshez. Hardveresen rá lehet segíteni egy R-C körrel. Erről részletesebben olvashatsz ezen az oldalon. Szívesen ajánlanám a saját oldalamat is (PIC-kwik I/O portok fejezet), de technikai okokból (optikai újrakábelezés) most vasárnap estig nem elérhető. „Jól sejtem, hogy a PIC-ek bemenetein van pergésmentesítő ák. ?”
Arról lenne szó, hogy egy bejövő impulzus kb néhány utasításidő késleltetéssel elindít egy TIMER-t, majd a 3. megállítja és "visszafelé " kezd el számolni és kb 4-8 utasításidővel az 5. impulzus beérkezése elött kiad egy impulzust.
A szimuláció szerint tökéletesen működik. A gyakorlatban magasíbb frekiken (kb 700hz felett) is tökéletesen működik, de alatta, ahogy csökkentem a frekit időnként újtra indul a szinkronizálás (nem PIC RESET-ről van szó), Ez csak úgy lehet, ha az 5. impulzus elöbb beérkezik. Sajnos tárolós szkópot még nem sikerült szereznem Tehát akkor felejtsem el a belső oszcillátort. Lehet, hogy kvarcoszcillátorral sem biztos hogy működni fog?
Azok a változók, amik csak egy rutinon belül léteznek, azok csak akkor látszanak, ha éppen a rutinban állítod meg a szimulációt. Ez leginkább C-ben tapasztalható. Ezért érdekes, hogy ASM-ban is ezt tapasztalod(bár nem írod milyen nyelvben tapasztalod ezt). Kód nélkül nem nagyon lehet mit mondani.
A belso orajel erosen fog fuggeni a tapodtol -- ha az nem stabil, akkor nem lesz az ora sem stabil.
Amugy a jelenseg amit leirtal inkabb arra enged kovetkeztetni, hogy a szamogatasoknal tulcsordulasod van es mikor eppan a tulcsordulast kezeled le, akkor jonne az az iimpulzus amit le kellene kezelned, de lekesel rola. Ez persze akkor lenne igaz, ha pollozassal kezeled le a bemeneteket nem pedig interrupttal.
Lehet olyan, hogy a szimolácó szerint OK ez és a gyakorlatban nem?
2db 16 bites TIMER van összefogva 32 bitessé. Ha mgetörtént a megszakítás, akkor a progiban meg van adva, hogy álljon meg a számláló. a szimuláció szerint ez meg is történik. Hol lehet akkor túlcsordulás? |
Bejelentkezés
Hirdetés |