Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Szervusztok ! Látván a sok tapasztalt emberkét, szeretnék én is kérdezni egyet. Épp egy PIC-en alapuló kütyüt tervezek aminek van két PORTB-n lógó bemenete, amelyeket a végfelhasználó szabadon használhat. (a bemenetek 10K-val VDD-re vannak húzva és normál üzemben valamilyen kapcsolón, vagy kontaktuson keresztül a nullára kapcsolódnak.) Na már most ezeket a bemeneteket kellene megvédeni (értelmes határokon belül) az emberi hülyeségtől és a statikus kisülésektől... A PIC 3.3-voltról jár, azaz ehhez a feszültséghez kell igazodni. Ti milyen védelmeket tartanátok ésszerűnek ilyen esetben ?
Kell-e ESD supressor, vagy elég az a dióda ami a PIC-ben van és csak egy soros ellenállás elég áramkorlátnak ?
Szerintem elég egy soros ellenállás, mondjuk 10k.
Nem egeszen ertem mire jo az, hogy van egy C kornyezeted ahol ezek a dolgok mar reg le vannak implementalva csak hasznalni kellene, ennek ellenere irsz ASM-ben sajatot....
Na mindegy, ket gondolat: 1. A fuggvenyed egy masik asm blokkal kezdoik, ami RETURN-el vissza ter, azaz a 'kesleltet' fuggvenybol vissza tersz meg mielott elerned kerdeses kodot... Namost egy jo C compiler ami a RETURN mogott van ki is vagja a kukaba (dead code elimination). 2. Nem akarjak, hogy ASM betetbol CALL-ozgass, mert az nem arra valo. Akkor szepen ASM-en kivul kellene megoldanod a kerdest vagy kulso ASM modult csinalnod ha ennyire ragaszkodsz a kevert nyelvu fejleszteshez. Tehat pl:
De inkabb javasolnam keresd meg a dokumentacioban a megfelelo konyvtari fuggvenyt. Sok C forditonak pl van valami ilyesmije:
Egyszer már belinkeltem neked a CC5X fordító User's Manual-ját. Nem kellene fellapozni végre? Különös tekintettel a 9. fejezet elejére: (9.1 Delays)
Sziasztok!
Kezdő PIC-es vagyok (16F628+spéci saját JDM+MPLAB), és felmerült néhány kérdés a projektemmel kapcsolatban. Leírom amit eddig kigondoltam: A kész áramkört nyomtatóporton keresztül szeretném összekötni a számítógéppel, a kommunikációhoz 5 lábra lesz szükségem. Nem szeretnék külső tápellátást használni, a kész eszköz egyetlen LED-et fog villogtatni, a nyomtatóport 5 voltja remélem elég erre. Eléggé pontosnak kell lennie az időzítésnek, ezért külső 4MHz-es kristály oscillátort használnék a beépített helyett. Megszakításokat kellene használnom, de az nem világos, hogy ha a nyomtató porton adok egy kb 0.01 másodperces impulzust (ami megszakítást fog eredményezni), akkor lehetséges, hogy többször is lefut a megszakítási rutin? vagy elég ha a rutin végén visszaállítom a megszakítási bitet? (bcf 0x0b,0) Ha kristály oscillátort akarok használni, akkor azok a lábak (RA6 és RA7) automatikusan kapcsolhatatlanná válnak a programból, vagy külön figyelnem kell, nehogy valami véletlen kapcsolja őket? Hogyan tudok 255-nél nagyobb számokkal dolgozni? van erre valami okos és egyszerű megoldás? Előre is köszi a segítségeteket! Idézet: „Nem szeretnék külső tápellátást használni, a kész eszköz egyetlen LED-et fog villogtatni, a nyomtatóport 5 voltja remélem elég erre.” A nyomtatóporton nincs 5V. Ha arra készülsz, hogy az adatvezetékekről akarsz áramot szerezni, akkor az nagyon portfüggő, esetleg extrakisáramú leddel menni fog. Idézet: „Eléggé pontosnak kell lennie az időzítésnek, ezért külső 4MHz-es kristály oscillátort használnék a beépített helyett.” Mihez képest kell pontosnak lennie? A nyomtatóporthoz képest a belső oszcillátor is pontos. Idézet: „Megszakításokat kellene használnom, de az nem világos, hogy ha a nyomtató porton adok egy kb 0.01 másodperces impulzust (ami megszakítást fog eredményezni), akkor lehetséges, hogy többször is lefut a megszakítási rutin?” Ha a felfutó él okozza megszakítást, akkor csak a következő felfutó él okozhat ismét megszakítást, amennyiben a megszakítási rutinban törlöd a megszakítást jelző bitet. Idézet: „vagy elég ha a rutin végén visszaállítom a megszakítási bitet? (bcf 0x0b,0)” Hol láttál úgy programot írni, hogy a regiszter és a bitnevek helyett a regiszterek címét és a bitek sorszámát használják a programban? Most lusta vagyok megnézni, hogy a 0x0b regiszter nulladik bitje micsoda. De ha le lenne írva a regiszterneve, bitneve formában, akkor rögtön tudnám, hogy mit akar ez a sor jelenteni. Idézet: „Hogyan tudok 255-nél nagyobb számokkal dolgozni?” Hasonló módon felbontod a számokat, mint amikor papíron végzel összeadást, kivonást és szorzást (az osztás már kicsit bonyolultabb). Tehát művelettől függően vagy a legmagasabb vagy a legalacsonyabb helyiértékű bájttal kezded és mész sorba. Idézet: „van erre valami okos és egyszerű megoldás?” Vannak a neten leírások, mintaprogramok, algoritmusok, stb., csak keresni kell. Pl. "pic 16bit addition" kulcsszavakra google első találata: Link Idézet: „Ha a felfutó él okozza megszakítást, akkor csak a következő felfutó él okozhat ismét megszakítást, amennyiben a megszakítási rutinban törlöd a megszakítást jelző bitet.” Kicsit pontosítanék. A megszakításjelző bit ismételt bebillenését csak a következő felfutó él okozhatja. Viszont ha ez a bit bebilletve marad a megszakítási rutin lefutása után, akkor ismét lefut a rutin, majd ismét, és így tovább.
En meg annyit fuznek ahhoz amit Potyo mondott, hogy megszakitasbol NEM RETURN-nel terunk vissza, hanem RETFIE-vel!
Amugy mikor a megszakitas meghivodik a GIE automatikusan torlodik es RETFIE automatikusan vissza allitja azt. viszont az IF bitet manualisan kell torolni. Nezd meg pl a PICmicro Mid-Range MCU Family Reference Manual-t
A megszakítási rutinban történő regisztermentéseket és -visszaállításokat sem jól csinálod, azt is nézd meg adatlapban!
Üdv mindenki!
Lenne egy nagyon nagyon nagyon nagy kérésem valakihez! Suliban adtak házifeladatot: 18f452-es PIC-re kellene két programot írni ASM kóddal, szerdára. Volt egy jelentkező, aki elvállalta, de csak húzta-húzta, végül nem lett belőle semmi, a határidő meg a nyakamon van. Nem igazán értek a PIC-hez, sem az assemblyhez. Én C-ben tanultam programozni, de azt sem próbáltam még PIC-re. Kérek valakit, hogy segítsen, mert most nagyon el vagyok keseredve, hogy átvertek ebben az ügyben. Kérem aki vállalja, az jelentkezzen privátban, vagy mailben. Tervezzen és írjon programot PIC18F452-re, amely két regiszter (A_1 és A_2) 8 bites, előjel nélküli tartalmának relációját megállapítja: ha egyenlők, B-be 0-t tölt, ha A_1 nagyobb, akkor 1-et, ha A_2, akkor pedig 2-t! Tervezzen és írjon programot, amely RB0 0→1 átmenetére inkrementálja a SZAMOL regiszter értékét!
Mar meg ne haragudj, de ezzel csak sajat magad verted at! Ha a suliban azt kerik csinaldd meg, akkor csinaldd meg! Ha nem tetszik a suli, akkor valassz masikat vagy menj el valami ertelmeset csinalni! Atbukdacsolod a sulidat, utana lesz egy diplomad a kezedben es kitorolheted vele a seggedet, de ami meg rosszabb, hogy a HR-es nem nezi hogy Te csinaltad-e meg a diplomad, sot mikor majd dolgozni fogsz akkor is majd mindig massal csinaltatod meg a munkad? Ahelyett irogatnal a forumra vedd mar elo a konyvet es nezd meg mennyire egyszeru feladat ez! Vannak nagyon szajbaragos konyvek is, csak fel kellene lapozni. A keres, hogy mas irja meg helyetted a hazi feladatod annyira felhaboritott, hogy meg azt sem irom ide le mi a cime az ingyenesen olvashato konyvnek - keresd meg!
Ui: Remelem senki sem lesz annyira buta, hogy megirja helyetted es utana Te arasd le a baberokat...
Köszönöm szépen a szépen leírt és megfogalmazott segítséget!
Szia!
Ne légy elkeseredve, tedd fel az MPlab-ot, olvasd el ez 18F452 adatlapját. Az első feladat egy subwf utasítással megoldható... (A poén az, hogy a B szimbólum létrehozásával probléma van - Más név kell) A második feladat sem sokkal bonyolultabb. Meg kell várni míg felfut, növelni a számlálót, meg kell várni míg lefut..
Köszönöm szépen!
Lógok neked eggyel! Több mint fél éve kezdtem el AVR-t programozni C-ben, és ez az assembly nagyon durva C-hez képest Köszönöm!
A második nem jó, mert ha az rb0 logikai 1ről indul, akkor egyből incrementál egyet, közben nem volt felfutóél.
Olvassunk a sorok között: A PIC- RB0- INT hármas csoport eléggé összefonódik. És mint tudjuk az INT megszakítástípusnál ki lehet választani a fel vagy lefutó élre állítson flaget. Nem okvetlen szükséges megszakításban lekezelni, pont ezügyben segített Watt kolléga egy pár oldallal ezelött nekem... Ne legyünk lusták visszaolvasni (Sir-Nyetegnek üzenem, Hp41C-nek meg respect, h utat mutat, úgy, hogy a kedves kérdező minimális erőfeszítést se mutat a probléma megoldására! ) Blint
Gratulálok, hogy gyártod a hülyéket az iparnak! Van nálunk is néhány olyan ember, aki csak arra vár, hogy mások csinálják meg helyette a munkát! Nos az is az lesz, aki helyett mások oldják meg a házifeladatot!
Üdv!
Nagyon nem megy nekem ez az A/D konverzió, viszont most találtam egy mintát 16F877-re és ezzel kapcsolatban az volna a kérdésem, hogy a Watch ablakban hogyan kell megadni egy értéket az ADRESL regiszternek, hogy szimuláció alatt ne törlődjön ki. Úgy olvastam a fórumon, hogy erre a hibaüzenetre: ADC-W0008: No stimulus file attached to ADRESL for A/D - ez a megoldás. A programot mellékeltem.
Kérlek használd a keresőt a következő beírásával:
"topic:530" stimulus A hozzászólások között keress(ki kell választani a lenyíló menüből!) Nézd meg a találatokhoz tartozó válaszokat is! Sokat írtunk erről, megvannak a válaszok.
Köszi! Megtaláltam Mpi-c stimulus leírását! Hát őszintén megvallom több idő megy el a környezet beálligatásával, mint a program írásával, meg beállításával, úgyhogy szerintem kihagyom a szoftveres szimulációt!
Nem gondoltam volna, hogy ilyen nehéz lesz 3 poti + 3 motor levezérlő progiját összekaparni...
Egy pár lappal ezelőtt beszéltünk a soros illesztésről 1 master, és több slave esetén. Végülis megfogadom a tanácsaitokat, és RS485 lesz belőle. Annyit bonyolítanék még, hogy PC-t is be kéne kötni a rendszerbe. A mellékelt rajzra gondoltam. Így amit küld a PIC, azt veszi az összes slave és a PC is. Amit pedig a PC ről küldök, azt is megkapja a PIC, ponnt úgy mintha egy slave küldte volna. Így egy terminál emulátorral könnyű lesz fejleszteni, tesztelni a PIC programját. Szerintetek jó lesz így ?
Nézegesd még, nem olyan bonyolult ez, csak kicsit kényelmetlenül oldották meg!
Ha a PC-is slave lesz, akkor nem kezdeményezhet kommunikációt. Ha ez nem gond, akkor működhet az elképzelés.
Sziasztok!
Építettem egy PicKit2 klónt és kiszeretném próbálni, hogy működik-e, de nem tudom, hogy az ICSP melyik lábát a pic melyik lábára kössem rá. A pic adatlapját is néztem, de ott nem találtam semmit. Valaki tudna segíteni a pic neve 16f716 Előre is köszönöm!
Az adatlap valóban nem jelöli az ICSP lábakat. De a gyártó oldalán megtalálható a PIC programozásáról szóló dokumentum. - Íme - (Az első oldalon van az infó ami kell...)
Olvasd el az oldalamon az ICSP-ről írt dolgokat is(ha még nem olvastad)! - ICSP röviden -
Nem tudom elképzelni, hogy az adatlapban nincs benne... (megnéztem, benne van!) Inkább az a baj, hogy nem tudod mit keress, ezért többet kell olvasni: Bővebben: Link
Ui: Ott van az adatlapban is: 2 oldal, TABLA 1 Idézet: „(megnéztem, benne van!)” Igazad van, csak nem a lábkiosztásos rajznál van!
Valami nagyon érdekes fényjáték lett ebből az A/D konverter alkalmazásból!
Amikor tekerem a potit a 16f877 portc-jére kötött 8 led hullámzó fényeket bocsát ki. 5V-ról járatva a 220ohm-os ellennállásal sorba kötött ledek meglepően hálványak. Lehet, hogy a kimeneti jelből már nem is kell PWM jelet előállítanom, mert ez is megteszi..
Köszi a választ. A PicKit2 programjának az egyik adatlapjában írja, hogy a hatodik lábat az AUX-ra kell kötni. Ezt bekell kötni valahova vagy hagyjam szabadon?
Nem kell bekötni.
Szívesen! |
Bejelentkezés
Hirdetés |