Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Idézet: C18 esetén tudtommal nincs heap, minden a szoftveresen kezelt veremben tárolódik. C30-nál van külön heap, de az teljesen más (GCC) fordító.„Viszont a frame-eknek nem feltetlenul kell a stack-en lennie” Idézet: De igen, sőt, megszakításnál a regisztereket és az esetlegesen elmentésre kijelölt változókat is ide menti. „de gyanitom ha egyetlen bank-on van a stack (merthogy azt kerted), akkor nem a stack-re helyezi a lokalisokat” Idézet: elvileg lehet, ha a mentések után újraengedélyezzük az interruptot - az más kérdés, hogy túl sok értelme nincsen. De a C18 fordító fel van készülve rá, s a User Guide mutat is valami bugyuta mintapéldát rá. „mivel ott nem reentrans a kod (elmeletileg)”
Sziasztok!
PIC12F629 égető kapcsolási rajzát valaki tudna nekem adni? Néztem a google-t de nem találok.Nem baj ha jdm az égető. Köszönöm előre is!
A PICkit2 is tökéletesen égeti, de a Kapcsolások között , vagy
Watt fórumtársunk honlapján egyszerűbb megoldást is találsz. Ezeket a linkeket is érdemes megnézni. Google is mutat hasznos linket
Üdv Mindenkinek!
Próbálok egy univerzális próbapanelt építeni PIC 16F877-hez. Az lenne a kérdésem, hogy ha az RC0/T1OSO/T1CKI és RC1/T1OSI/CCP2 lábak közé beforrasztom a 32,768kHz -es kavicsot, utána adott esetben használhatom ugyan ezeket a lábakat digit I/O portként? Vagyis tönkre teszi-e a kavicsot, vagy a PIC-et, ha a kvarcra pl. kikerül +5V, vagy a GND? Persze Jumperrel le lehet választani, de mi van, ha pl. elfelejtem lehúzni... A válaszokat előre is köszönöm!
Elméletileg nem lesz baja. A kvarc helyettesítő ábrájában a kondenzátorok pF és fF nagyságrendűek, így nem fogja sem a kvarc a lábakat, sem a lábak a kvarcot kinyírni szerintem.
12F629 PIC-ben szeretnék átlépni egyik BANK-ból a másikba, de az MPlab egyáltalán nem akarja.
Ez lenne a kód:
A fordításnál ezeket a hibaüzenetet kapom: Register in operand not in bank 0. Ensure that bank bits are correct.
Ugye meg sem próbáltad beírni a keresőbe az üzenetet?
A Google-ban keresgéltem. Sajnos nem kaptam rá választ.
Szerk.: A fórum keresőjében megtaláltam amit kerestem. Máskot itt keresek először. Bocsánatot kérek! :worship:
Üdv mindenkinek!
Egy 4 csöves nixie órát készítenék, többféle változata van PIC el is, viszont én szeretnék hozzá egy másodpercmutatót is IN-9-es csővel. Sajnos nemértek a PIChez, ezért kérnék segítséget, hogy hogyan lenne egyszerübb illeszteni egy ilyen csövet, az órához. Mindóssze ennyit találtam rolla link. Köszi előre is.
Ez nem tul sok info, de nyilvan Neked kell a hazi feladatot megoldani, fel kell lelned a cso adatlapjat.
A PIC-bol tulajdonkepp TTL jel jon ki, ahhoz kell egy buffert meretezned, hogy az a csonek jo legyen.
A fordításnál ezeket a hibaüzenetet kapom:
Idézet: „Register in operand not in bank 0. Ensure that bank bits are correct” Irtad megtalaltad, de nem irtad mit, igy ket megjegyzes: 1. Ez nem hibauzenet, hanem figyelmeztetes. Tehat ettol a kodod meg akar jo is lehetne, ill. akarmit is csinalsz, az uzenet meg fog jelenni (hacsak ki nem kapcsoltatod a figyelmeztetest, de az meg kicsit olyan, mint mikor a pilota leszallaskor kikapcsolja az alacsony magassagot jelzo pittyegest...) 2. Masik, hogy ne az RP0-at piszkaldd, hanem hasznaldd a BANKSEL makrot.
Át is Írtam erre a megoldásra.
Köszi a segítséget!
Nem szeretek sokat tétlenkedni, úgyhogy 1 napos pihi után elkezdtem a PIC18-as családdal foglalkozni. De motoszkál bennem pár tény, amiben bizonytalan vagyok. Ezekre kérnék megerősítést, vagy javítást ha nem jól gondolom.
1. Van egy olyan teljesítménycsökkentési mód, hogy kikapcsoljuk a CPU órajelét és ekkor a perifériák tovább működnek. Ezt úgy kell értelmezni, hogy ugyanúgy reagál a megszakításokra. A TMR modul ugyanúgy számol.... stb.? 2. A Brown Out Reset működése. Simán csak annyi a lényege hogy a tápfesz. csökkenéskor a Reset folyamat indulásánál. Csak egy resetet csinál? (Mert ha reset közben ismét tápfesz csökk. van, az új resetet jelentene.) Tehát amikor stabil a táp, csak akkor csinál egy resetet? 3. Mit is értsek a Reset alatt? Ebbe a stabil órajelbeállás is beletartozik? Szerintem igen, de nem vagyok benne teljesen biztos.
1. Igen, a PRI_RUN beállításnál ugyanúgy megy minden tovább, csak épp a processzora nem kap órajelet. A SEC_RUN beállításnál viszont a főoszcillátort is kikapcsolja és az órajelet a másodlagos oszcillátorról kapják a perifériák, ami lassúbb, mint a főoszcillátor, ezért más beállítást igényelhetnek.
2. Annyi a lényege, hogy ha a feszültség lecsökken a beállított érték alá, akkor resetbe húzza a kontrollert és ott is tartja, amíg nem emelkedik fel a feszültség a beállított érték fölé. Tehát nem csak egy impulzust ad, hanem folyamatosan resetben tartja, amíg a feszültség nem elég magas. 3. Attól függ, hogy milyen reset volt. Ha olyan reset volt, hogy az oszcillátor előtte nem futott, akkor igen, megvárja a stabil órajelet. De pl. egy RESET utasítás végrehajtásánál ugye már stabil az órajel, tehát akkor nincs semmi várakozás. Vagy pl. menet közben nyomsz neki egy resetet, akkor is azonnal indul a reset elengedése után, mivel az oszcillátor már közben futott.
Idézet: Ha a sleep módra gondolsz, ekkor nem ennyire egyszerű, mert azok a perifériák sem fognak működni, amelyek a CPU órajeléhez vannak kötve (pl. belső órajelre kötött vagy ahhoz szinkronizált timerek). Timer1 viszont a saját oszcillátorával mehet, aszinkron módban. Az interruptok általában fel tudják ébreszteni a CPU-t alvásból.„1. Van egy olyan teljesítménycsökkentési mód, hogy kikapcsoljuk a CPU órajelét és ekkor a perifériák tovább működnek.” Idézet: Mindaddig folyamatosan resetben tartja a CPU-t, amíg a tápfeszültség alacsonyabb a beállított szintnél. Tehát amikor elegendően magas a tápfesz, akkor engedi csak el RESET-ből.„2. A Brown Out Reset működése.” Idézet: Adatlap, PIC18 felhasználói kézikönyv vagy a PICCOLO projekt „3. Mit is értsek a Reset alatt?” pár napja közétett fejezete elmondja.
Köszönöm. Majd ha lesz még kétes dolog, akkor írok.
Lehet rosszul tettem fel a kérdést, mivel nemértek a programozáshoz, ezért örülnék ha valaki segítene illeszteni egy ilyen csövet az Órához
Köszönöm előre is.
Hali
Mivel nem tudjuk neked milyen orad van, igy eleg nehez a konkret megoldast kitalalni. Viszont ha szetnezel a neten sok kapcsolasi rajzot talalhatsz a IN-9, IN-13 kijelzohoz. Ezek altalaban analog megoldasok kivezerlesjelzohoz.IN-9 gugli. Udv Vili
Szerintem neked nem az illesztéssel van a gondod, hanem a program megírásával. Jól gondolom?
A youtube nagyon szep videokat tarol, de ez sem a csoved adatlapjat nem tartalmazza sem pedig a kiindulasi kapcsolasi rajzot, igy nem tudjuk mi a gondod? Nekem sajnos nincs idom most masnak aramkoroket tervezni, ha elakadsz valahol, es tudok segiteni, akkor nagyon szivesen! Csak akkor kerlek irdd meg, hogy eddig mit csinaltal vagy terveztel es miben vannak ketelyeid vagy mi nem mukodik...
16F883-ra C-ben írok programot és olyat szeretnék, hogy ha egy feltétel igaz kb. négy szint mélységben, akkor reseteljen. Hogyan tudom ezt megoldani? Olyannal próbálkoztam, hogy inline assemblybe gotoval a főfüggvénybe ugrottam, de ez nem bizonyult jónak, mert pl. a stack-et nem törli.
Érdekes feladatnak hangzik, de szerintem valami nem stimmel a megvalósításnál, ha a kontrollert bizonyos esetben resetelni kell. Úgy kellene kitalálni, hogy ne kelljen resetelni. Tudsz többet mondani a feladatról?
3 db RS485 hurkot kérdez le egymás után, és beállítható, hogy egy hurkon hány készülék van. Ezt a beállításokból szeretném megváltoztatni. Viszont a beállítások menü a hurkok lekérdezése közben érhető el hosszú gombnyomással. Így ha megváltoztatom a számokat, mindenképpen újra kéne kezdenie az egész program futtatását, hogy az inicializálásokba is bekerüljön a változás. Viszont ha simán folytatom a programot, akkor elképzelhető, hogy olyan helyre futna, ami már nem létezik.
Szia!
Vezess be egy szamafort: A ciklusban szabad-e továbbmenni. A ciklus minden eszköz lekérdésének megkezdése előtt kérdezze le, hogy szabad-e tovább lekérdezni. Ha szabad mehet minden tovább, ha nem kilép a lekérdező rutinból. A beállítás memüpont az érvényesítéskor átállítja a szemafort - nem szabad tovább lekérdezni. A fő program az újraszervezett lekérdezés kezdetén visszaállítja szabadra...
CCS C ben van ilyen:
Ez nem lenne jó...?
HI-TECH PICC fordítót használok, úgy tudom, hogy ebben nincsen ilyen. Még arra gondoltam, hogy alapesetben nem használom a watchdogot, de ha bekapcsolom, és belépek egy végtelen ciklusba, akkor resetelni fog. A lényeg az lenne, hogy legalább 4 mélységből kell visszatérni, ha változtak a beállítások, így gondoltam, hogy legegyszerűbb a reset.
Jó estét Mindenkinek!
USART kommunikációt szeretnék megvalósítani egy 18F4550-es PIC és egy PC között. C18-at használok a programozáshoz. Megírtam hozzá egy inicializáló függvényt és egy másikat, amely bájtonként adatokat küld a PC felé. Sajnos a két eszköz nem érti megy egymást, a PC-n terminál progival (RealTerm) nézem a beérkező adatokat, de csupa értelmetlen karaktersorozatot látok és minden karakter ugyanaz, teljesen mindegy hogy más és más karaktereket akarok küldeni. Amikor egy karaktert küldök, a PC-n kettő jelenik meg vagy több. A küldés közben folyamatosan villog a RealTerm ablakában az Error és a BRAKE visszajelző gombja. Próbáltam különböző Baudrate értékeket beállítani, figyelembe véve hogy a hiba a lehető legkisebb legyen, de semmi javulást nem tapasztaltam, esetleg annyit hogy kevesebbet világított az Error gomb. A PIC mellett egy 20MHz kristályt használok két 15pF kondi társaságában. Próbáltam már azt is, hogy belső 8MHz osszcillátor ketyegjen a cuccban de ez sem oldotta meg a problémát. Elküldöm a két függvényt, a bájtonként beírós egy karakterláncot kap bemenetnek, amelyet karakterenként átküld USART-on.
Nem tudom hol lehet a gond, de valami miatt olyan mintha a küldés beragadna, és nem fejezi be a karakterlánc végén, ezért küldi ismételten azt a millió ugyanolyan karaktert. A másik dolog (illetve összefügg az előzővel) amit észrevettem debug üzemmódban, az az hogy a TX Flag állandóan aktiválódik, még azelőtt hogy mind a 8bitet elküldhetné a hardver. Ha jól tudom, akkor csak a teljes bájt átvitele után kellene beállnia egybe. Ja, és persze minden megszakításrutinba való belépés után törlöm a TXIF-t, tehát nem ezért ugrik vissza. Felrakom az egész projectet tömörítve, de nem véletlenül emeltem ki belőle a lényeges részeket, mert sok mellékes dolog is van benne (ez egy sablonprojectből lett továbbírva, így tele van feltételes fordításokkal, de nagyon sok időt spórolok a használatával, mert nem kell minden projectet a nulláról kezdeni). Remélem valaki tud segíteni! Előre is köszönöm!
Ez így biztosan jó? A TX kimenet az RX bemenet. A másik meg, hogy próbáld meg, hogy megvárod, míg kiküldi a processzor az adott karaktert, és utána küldöd a következőt, mert lehet, hogy teletölti a TX buffert, és megzavarodik. Pl én így csinálnám a szting adást:
Egyrészt a TXREG feltöltése után nem vársz semmit, így lazán egymásra írod a karaktereket, még mielőtt azok szépen kisorjáznának a soros vonalon. Próbálj meg várni a foglaltság elmúlására, például úgy, ahogy miklosch is mutatta, vagy a TXIF figyelésével.
Másrészt ha jól láttam az adatlapban (csak belekukkantottam reggel eljöttömben, most nincs előttem) a TXIF-et nem lehet törölni, hanem az a TXREG mindenkori állapotát tükrözi hardveresen. Azaz ha feltöltöd a TXREG-et, akkor törlődik, majd miután a TXREG kiürült, újra aktív lesz, jelezvén, hogy újabb karaktert írhatsz a TXREG-be. A legelső beírás után valóban tűnhet úgy, hogy azonnal visszavált aktívra, mivel a TXREG-ből azonnal átkerül az adat a kimeneti léptetőregiszterbe. Viszont a második karakter beírása után majd csak akkor válik újra aktívvá, ha a léptetőregiszter kiürül, és a TXREG-ből át tudja tenni a következő karaktert a léptetőregiszterbe. Egyébként ezek mind szépen le vannak írva az adatlapban, még idődiagramokat is láttam. A fentieken kívül persze lehet még baud rate beállítási gond is (a leírt jelenség erre utal is amúgy a sok framing error és értelmetlen karakter miatt), azt nem ellenőriztem az adatlapból, hogy jól számolod-e a baud rate generátor konstansokat. Az adatlapban erre is van egy jópár táblázat, érdemes lenne megdebugolni a kódot, és megnézni, mit ír a baud rate regiszterekbe, majd ezt a táblázatok alapján ellenőrizni. Másik ellenőrzési mód, ha az USART felprogramozása után (8N1 formátum) írsz egy végtelen ciklust, ami 0x55 karaktereket küld ki folyamatosan a soros porton (pl. a miklosch féle ciklus mintájára). A PIC TX lábára egy frekimérőt téve pont a kívánt bitsebesség felét kell, hogy mérd, pl. 9600bps esetén 4800Hz-et. |
Bejelentkezés
Hirdetés |