Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Az SFR (Special Function Register) az nem feltetlen RAM, nem feltetlen tarolasra alkalmas regiszter! A PIC mikroknal nincsenek port in/out utasitasok mint mas mikroknal vagy processzoroknal szokas - inkabb hasonlit a motorola nyomvonalhoz az architektura. Ez azt jelenti, hogy a memoria cimzo aramkoron keresztul oldjak meg az IO interface-eket es ennek koszonhetoen az IO portokra ugyanazok az utasitsok alkalmazhatoak, mint a normal RAM elereshez - ellentetben pl az Atmel AVR-hez ahol ez a resz egy picity kesze-kusza...
Milyen hibát ír ki a debug?
Egyébként meg szerintem lehet éppen halott is, mert a debughoz két olyan lábat is használ amit sem az írásnál, sem az olvasásnál nemhasznál. Idézet: „mert a debughoz két olyan lábat is használ amit sem az írásnál, sem az olvasásnál nemhasznál.” És melyik kettő lenne az?
Az ördög a részletekben bújik meg, ezért a részletek ismerete nélkül errenem lehet érdemben válaszolni.
Fordításkor pl. Debug volt állítva (Release helyett)? Config bittel nem lett a debug letiltva, vagy más lábra átirányítva (bár lehet, hogy ilyet csak a 16 bitesek tudnak)? Nincs-e valami olyan a lábakra kötve, zavarja a debug adatforgalmát?
Hű, most hülyén érzem magam, mert a configban le volt tiltva a debug. (Viszont ez mindig is így volt, és ennek ellenére ment a debuggolás.) Bekapcsoltam, és most az a furcsa, hogy teljesem mindegy, be vagy ki van kapcsolva, lefordítja a fájlt, programozza, és el is indul szépen. Meg tudom állítani F5-tel, és tudom F7-tel léptetni a kódot. Látom közben a fájlregisztereket is. Viszont nem áll meg a törésponton. Pedig ha léptetni tudom, akkor a töréspont működik, mert gondolom, a léptetés is azzal megy, nem?
Ezt szokás magyarul "memóriába ágyazott I/O"-nak, vagy angolul "memory mapped I/O"-nak hívni. Az MCS51 architektúrában még ez teljes mértékben jelen volt, az AVR-be már tényleg bekavartak valami köztes megoldással.
Köszönöm a segítséget mégegyszer.
Minden bizonnyal nézek egy olyan kontrollert amiben van 4 PWM, és ezzel tervezem meg a végleges áramkört. A 18F452-t azért használtam mert " az volt kéznél". Azért mindenesetre hasznos volt számomra, hogy feltettem ezt a kérdést, és kaptam rá választ. üdv Idézet: „teljesem mindegy, be vagy ki van kapcsolva, lefordítja a fájlt, programozza, és el is indul szépen.” Ezeket nem befolyásolja a debug bit. Idézet: „Meg tudom állítani F5-tel, és tudom F7-tel léptetni a kódot.” No, ez már meglepő, ha letiltott debug-gal működik! Idézet: „Pedig ha léptetni tudom, akkor a töréspont működik, mert gondolom, a léptetés is azzal megy, nem?” Őszintén szólva: nem tudom. Soha nem néztem még utána.
A CONFIG4L 7. bitjéről beszélünk, ugye? Csak hogy ne legyen félreértés.
Idézet: „A CONFIG4L 7. bitjéről beszélünk, ugye?” Igen.
Valaki használt már nRF24L01-et pic16F/18F el?
Mert nem tudom működésre bírni őket... 16F690-et használok hw-es SPI-vel. Maga az spi rész működik (illetve úgy tűnik...). Az első csatorna a CSN láb, a második az SCK, a harmadik a MISO. Mellékelem a program egy részét.
Ezt nem értem ha nekem * van pickit2 mindhárom csatornájában akkor nem indul el, neked meg megy a másik két csatorna is. Mit kell még állítani, hogy menjen?
Hogy érted, hogy nem indul el? Nekem gyári van, nem állítgattam semmit sem. (minden beállítás leolvasható a képről) Nincs is olyan mód benne, hogy 1 vagy 2 csatornát nézzen. Mindig 3 csatornát néz. Esetleg az lehet a baj, hogy mind a három csatornára beállítottál tigger feltételeket és az sosem teljesül egyszerre.
nem állítottam semmit. Bár nekem ugye akkor hibásan a quartzon volt, de akkor megpróbálom a kimenetre tenni ahol most egy led van, és megnézem úgy is.
Hát most már abszolút jól van minden.
A 3-as csatornát használom csak ahhoz a leírás szerint nem kell +ellenállás. Rádugom a led pozitív lábára az ellenállás és a led közé, triggernek azt állítom hogy a 3-ason ha 1 és miközben bőszen villog a led, ez ott várja hogy 1 legyen, miközben tuti hogy 1 mert villog a led. Idézet: „Rádugom a led pozitív lábára az ellenállás és a led közé” Inkább az ellenállás másik végére dugd, a kontroller lábára közvetlenül. Idézet: Persze, hogy nem indul, mert legalább az egyiken be kell állítani egy triggerelési feltételt. Amint láttad, Braf Ch1-nél negatív élre triggerelt. „Ezt nem értem ha nekem * van pickit2 mindhárom csatornájában akkor nem indul el”
Ez egy kicsit gáz. Kicsit olyan mintha egy szkóp csak akkor kapcsolna be, ha valamelyik bementén jelet észlel. Jó tudom ez nem szkóp, de egy analizátor is tudhatna olyat, hogy ha bármi jön egy csatornán akkor azt mutassa.
Kipróbáltam szimultorrasl (Potyó tanácsaára) ezt a ds182-as dallas hőmérő kommunikációt, és a b2 melett direkt billegtettem a b3-at, és döbbenten vettem észre, hogy míg a b3 szépen adja a négyszöget, addig az output_float (azthiszem így hívják, most egy vékonykliens előtt ülök, gépelni is nehéz, nemhogy az otthoni forrásokhoz hozzáférni) a b2-őn az ég egy adta világon semmit nem csinál, márpedig a kommunikáció indításához le kell húznia a jelet, utána 15-35 us-ig felhlúzni, amit utána a a ds lehúz. (Ha jól értettem a kommunikáció elejét)
Lehet hogy visszatérek az assembly-hez, mert ott legalább tudom mit csinálok, csak sokkal lassab a fejlesztés.
Sziasztok!
Csinaltam PIC-el egy regi leptetomotor szegmentalt magnesebol + 2 Hall szenzorbol inkrementalis jeladot. Azt hiszem, ez a Grey-code, amikor fel fazissal eltolva jon a ket negyszogjel. Ez ket bit informacio. Jelenleg eloszor vizsgalom, hogy volt-e valtozas a jelben, s ha volt, akkor a korabbi erteket shiftelem kettovel balra, hozzadom az uj erteket es ez alapjan egy 16 elemu tablazatbol kivalasztom, hogy 1-et vagy -1 -et adok valamilyen ertekhez. Majd a korabbi erteket feltoltom a jelenlegivel. A tablazatban vannak 0-k is, szoval elvileg a kezdeti vizsgalatot ki is lehetne hagyni, csak idosporolo lepes. A kerdesem az lenne, hogy mivel ez sajat agyalmany volt, van-e erre valami elegansabb megoldas, tehat 'szokasos' algoritmikus eljaras, amit elterjedten hasznalnak.
Én vacakoltam ilyesmivel pár hónapja, egy majdani tekercselőgép számlálóját akarom elektronikusan megoldani. Nálam a jeladó két rés-opto és az azok közé beforgó takarólemez-darab, de ez mindegy is, a programozás oldaláról gyakorlatilag ugyanaz, mint a tied.
Én egy állapotgéppel (state machine) oldottam meg az inkrementálás-dekrementálást, és úgy tűnt, hogy nagyon jól működik. Az állapotgép megvalósítása programozáskor tulajdonképpen egy táblázatból történő olvasgatás, tehát majdhogynem "ész nélkül" meg lehet csinálni a programot. A táblázat felépítésekor kell elgondolkodni azon, hogy milyen működést akarunk. Nagy vonalakban a következő történik: - van egy állapotváltozó, az állapotoknak numerikus értékek felelnek meg; - van két bitnyi input a hall-okról (vagy nálam az opto-król); - a táblázat azt írja le, hogy egy adott állapoton állva az inpuok melyik értékeitől függően melyik új állapotra kell lépni. Ha nem felejtem el, otthon előkotrom majd azt a kódot, amit a számlálóhoz én összeütöttem. Van egy szintén állapotgépre épülő kvarcórám is, az ráadásul C-ben van megírva, így szerintem elég jól látható a működés. Idézet: „egy analizátor is tudhatna olyat, hogy ha bármi jön egy csatornán akkor azt mutassa.” Az analizátornak is igaza van a saját szempontjából, mert számára a három csillag az kb. annyira értelmes feladat, mint a fordítóprogramnak a GOTO SOMEWHERE utasítás. Nem nagy gáz, mert ha valamelyik csatornánál pl. 0-át állítasz be, vagy ha mégsem jön be, akkor 1-et, máris elérted a célodat. Mellesleg ez volt idáig az egyetlen dolog amire a piros gombot használtam: ezzel lehet lelőni az analizátort, ha nem teljesül a trigger feltétel, s ki kell hozni a végtelen várakozásból.
Erre én is kíváncsi lennék, mert másra is fel lehetne használni!
A gond az, hogy a 0-ra azonnal kiszáll, mert a lábon alapban 0 van. Lehet hogy az egyik ellenállásos lábát tüsivel felrakom a +ra úgy, hogy ha hozzáérintem a vezetéket akkor meglegyen az az 1 ami indít.
Egyébként nem értek egyet a goto somewhere-vel én inkább a while(1)-hez hasonlítanám amit viszont rendszeresen használunk is!
Én csak egy dolgot nem értek: ha statikus jeleid vannak, akkor nem az analizátor, hanem a logikai teszter üzemmódot érdemes használnod. Ha pedig valamelyik lábon változik a jel, akkor annak van fel- vagy lefutó éle. Mi tehát a probléma?
Adott egy pic1320 által vezérelt ledes lámpa.
van két gomb kapcsoló ezáltal 4 állapota lehetséges: 0 gomb=100% 'A' gomb=75% 'B' gomb=50% 'A'+'B' egyszerre=25% A megvalósítása, hogy pwm ciklusnak a duty cycle értékét változtatom, ezáltal előállítva a TTL szintű jelet az áramgenerátoroknak. Tehát bekapcsoláskor ellenörzi a kapcsolók állását, majd ennek megfelelő lesz a pwm_duty változó értéke. Felprogramozom a cuccot kipróbálom, de jön a meglepetés, mert egy-két kapcsolásig jól akpcsol utána viszont mindegy mit nyomok mindíg 25%-ot ad. Minden kapcsolásnál gyakorlatilag újra ki és bekapcsolom a pic tápját is, tehát szüzen indul... Mégis csak pár próbáig jó. Azonban, ha újra felprogramozom, akkor azonnal megjavul de szintén csk néhány kapcsolásig, persze kiszámíthatatlan, hogy meddig... Azon filózok, hogy lehetséges, hogy valami a programban átíródik néhány ki-be kapcsolás után? Hogyan lehet ellenőrizni utána, hogy megváltozott-e a tárolt kód az utoljára felprogramozott állapothoz képest?
Ezt nem a PIC - miértek, hogyanok...ban kellett volna írnod?
Idézet: „Hogyan lehet ellenőrizni utána, hogy megváltozott-e a tárolt kód az utoljára felprogramozott állapothoz képest?” Debug-olással. Nincs kizárva, hogy bithibás a PIC EEpromja.
Van az MPLABban a prog, reset stb között egy VERIFY gomb! Próbáld meg azzal! Az kell neked. Bár szerintem valahol máshol kéne a hibát keresni! Esetleg ha látnánk a forrást akkor könnyebb lenne!
Idézet: „Hogyan lehet ellenőrizni utána, hogy megváltozott-e a tárolt kód az utoljára felprogramozott állapothoz képest?” Például PICkit2-vel kiolvasod a programmemóriát, majd exportálod hex-be. Ha ezt friss beégetés után is megcsinálod, meg az "elromlott" állapotban is, akkor egyszerű fájlösszehasonlítással (pl. Notepad+) kibukik a változás. Van persze a Microchipnek is megoldása a futás közbeni öntesztelésre: One New In-Operation Self-Testability Mechanism Designed for SoC Mi...D 1500. |
Bejelentkezés
Hirdetés |