Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Szia Kacsavadasz,
Igy elso ranezesre ket oriasi hibat latok a kododban, az elso, hogy interrupt engedelyezve van de nincs interrupt kezelo rutinod, a masik, hogy RETURN-ok hianyzonak a subrutinokbol, pl ZOLD utan ugye meghivod a VAR-t es utana szepen racsorog a PIROS-ra, nem ter vissza... Vagy oda kell tenni RETURN-t, vagy lehet trukkozni, hogy a VAR-t GOTO-val "hivod meg" es annak van RETURN-je tehat onnan fog vissza terni a fo programodba - de ez mar egy haladoknak valo trukk inkabb, es a PIC ismerekedesenel ezt lehetoleg mellozni kell. Osszes rutinnal amit CALL-al hivogatsz inkab figyelj oda legyen ott a RETURN.
Ott a végén az nem clrf TAR akart lenni? Mert a fordító számára így is van értelme, csak nem ugyanazt jelenti.
Egyébként az nem időzítés, hogy a várakozást Timer segítségével oldod meg! Az időzítéshez megszakítást kell használni.
Meg valami Kacsavadasz,
Elkezdted hasznalni a BANKSEL makrot, ami jo, aztan a STATUS,RP0 -t billegteted, ami szinetn jo, de a kettot inkabb ne keverd. Namost ha megnezed a kodod, az OPTION_REG-nel atvaltasz bank1-re RP0 magasra billentesevel, utana elfelejted a PORTB nyulkalas elott ujra vissza kapcsolni bank0-ra, igy a TRISB-t birizgalod a PORTB helyett. Latom ott van a kodban, hogy vissza szeretnel kapcsolni a PORTB bankjera a BANKSEL-el, csak utana hozza biggyesztetted az interruptos, options-os reszt es ezaltal az egesz borult. Meg egy aprosag, a DataSHeet-ben nezd meg hogyan kell a PORTB-t inicializalni, es aszerint csinald inkabb. Itt letoltheted a 16F84 magyar nyelvu adatlapjat
Valamire megkérnélek: ne keverd a nagy és kisbetűs írásmódot. Vagy írd nagybetűkkel a parancsokat, vagy írd kisbetűkkel, de ne keverd! És ha a változókat is nagybetűkkel írod, akkor a kommentben is nagybetűkkel írd!
Felesleges külön ilyen EQU-val definiálnod dolgokat, majd azt használni a MOVLW-nél. Inkább írd oda direktbe a MOVLW-hez a bináris számot, de mellé írd oda kommentbe, hogy az adott helyzetben mit is akar jelenteni. Pl. az OPTION_REG esetére:
A definiálás inkább arra való, hogyha a kódban több helyen kell ugyanazt az értéket megadni és az érték az idő folyamán változhat, akkor célszerűbb definiálni, és csak egy helyen átírni, amikor módosítani kell.
Köszi Kobold!
Erre a rutinra van szükségem nekem is!
Sziasztok!
Az lenne a kérdésem, hogy nulláról kezdve mit kell beszerezni az égetőn kívül PIC programozáshoz? Milyen könyvet vagy dokumentációt tudtok ajánlani hozzá? Milyen típusú PIC programozással kezdjem a gyakorlást? A segítséget előre is köszönöm!
Kezd azzal, hogy elolvasod ezt a témát az elejétől a végéig. Nem te vagy az első kezdő, aki itt megjelent, már néhányszor el lett mondva, hogy mit ajánlunk, ki hogy kezdte, stb.
Ha elolvastad a topicokat(a terminálon is van mit találni), van itt egy csomó cikk is(Topi-tól és másoktól), amiken könnyedén el lehet indulni, azokat is olvasd el!
Közben letöltöd a kiválasztott PIC-ed adatlapját(pl. 18F2550), ami szintén az egyik legfontosabb dokumentum a témában. Nézelődsz a microchip oldalán, milyen PIC-ek vannak és melyik kapható itthon(pl. chipcad). Ha ezzel meg vagy, és van már konkrét kérdésed, akkor itt biztosan kapsz rá választ is.
Eloszor is mit szeretnel vele csinalni?
Masodszor, milyen elokepzettseged van, hajlando vagy-e assemblyben programozni a PIC-et vagy inkabb magasszintuzol, akkor fordito is kell. Az egeto all ugye egy hardverbol es egy szoftverbol. Kezdetnek mindenkeppen 18Fxxxx-eset javaslok, mert tapfeszt adsz neki es mar villog is a led. DIP tokosat celszeru beszerezni elsore. Ha inkabb barkacsolo hajlamu vagy, akkor csinalj neki te magad egy probanyakot, foleg az elvegzendo feladatokra optimalizalva (pl. leendo ledek vagy gombok, inputok, stb helye elore kivezetve tuskesorra) - ha nem, akkor annak a beszerzese is javasolt.
Sziasztok!
Lenne egy amatőr kérdésem! Valahogy meg lehet azt oldani szoftveresen, hogy mondjuk naponta egyszer resetelem a picet? A WDT képes ilyesmire? Köszi!
Ha nem hivogatod a CLRWDT utasitast es a WDT be van allitva akkor a PIC resetalodik - de ez nem azt jelenti a RAM -jat elfelejti, neked kell gondoskodni az inicializalasrol... Majdnem ugyanaz mintha GOTO 0-t kiadnad... Vagy 18F-en van is RESET utasitas...
Amugy a FW-t ugy kell megirni, hogy ilyesmire ne legyen szukseg.
Igyekszem... Csak biztosra akarok menni, hogy "soha" nem fog semmi túlcsordulni és lefagyni.
Lenne még egy kérdésem. A #pragma code pontosan miért kell? Ennek így van értelme? : #pragma code void teszt( void ) { ... } #pragma code Vagy csak akkor csinál valamit, ha meg az ember memória címet?
A tulcsordulast / lefagyast ugy szoktak csinalni, hogy ha pl valamire var ami X ideig tart, akkor a WDT X+Y idore van beallitva. Elmeletileg ha minden jol kezelodik le akkor a varakozas elott CLRWDT-t hivsz, meg utana is, ha kozben ne adj isten beragadna, akkor resetalodik a chip azonnal (lejar a watchdog timer mivel nem nullazgatod). Igazandibol nehez altalanossagban megmondani hogy a legjobb, mivel minden feladatnal mas lehet a keplet.
#pragma code azt mondja meg, hogy a kodreszlet amit irkalsz a 'code' nevu teruletre fog kerulni. Ez a 'code' a liner scriptedben van definialva amit atirkalhatsz, letre hozhatsz sajatokat stb, de egyenlore ezekre meg nincs szukseged.a pragmat egyszer add ki a kodjaid elott, utana meg felejtsd el, hogy letezik.
Köszi szépen! Most sok okos dolgot mondtál!
Szia!
Szerintem az ajánlott 16F84 adatlap magyar változata hibás. csak óvatossan vele. Amit találtam benne hogy a Vss és Vdd meghatározása fordítottan van megadva benne és ha úgy kötöd be akkor az a PIC halálához vezet szinte biztosan. szerintem használd inkább az angol változatott ha lehet. Erre gondoltam Üdv: Torpiken1
Ezen okok miatt szoktam írni, hogy konkrét dolgot csak az adatlapból szabad nézni. Elveket lehet Kónya vagy Madarász könyvből, ilyen-olyan leírásokból nézni, de hogy egy adott regiszter adott bitje mit csinál, azt csak az adatlapnak szabad elhinni.
Egyébként a Vdd-Vss csere nem vezet automatikusan a pic halálához, mert ilyenkor az összes belső mosfet drain-szubsztrát által alkotott pn átmenete kinyit, és cmos chipről lévén szó gyakorlatilag úgy viselkedik, mint két dióda egymás után kötve. Pl. ha egy 7805-re rákötöd fordítva, akkor nem fog tönremenni, mert a 7805 lekorlátozza az áramot.
Az attól függ, milyen a rendszer kialakítása. RS232 csak két eszköz közötti kommunikációt tud, és az mehet mindkét irányba egyidőben, ezzel szemben az RS485 több eszköz csatlakoztatását is lehetővé teszi, de egyidőben csak egyirányú lehet a kommunikáció. Ha több eszköz van, akkor arra minden eszközt fel kell készíteni, és valamilyen címzést is alkalmazni kell, hogy mindig tudják az eszközök, hogy neki vagy nem neki beszélnek.
Szóval a semennyitől a nagyonig elég széles a skála. Azt hiszem létezik MAX485 is, de inkább SN75176-ot szoktunk használni, az jóformán mindenhol van, és olcsó is (olcsóbb mint a MAX232).
Gyorsan raneztem, valoban! Pontosabban az, hogy melyik lab a Vss es melyik a Vdd az jol van ott, csak a magyarazat mellette fel van cserelve. En soha sem vettem volna eszre jo a szemed, torpiken1
Lehet meg kellene editalni azt a file-t, majd neki esek egyszer, mert szerintem azert nem rossz otlet ez a magyaritas. Apropo, volt egy magyar weboldal pic kezdoknek, sehol sem talalom a linkjet, tudja valaki az merre volt fellelheto?
Ha 2 sorsportot szeretnék egyidőben kezelni PIC-el akkor olyat kell választanom amiben 2 hardveres sorosport van vagy esetleg másképp érdemes megoldani ?
Mindkét porton 9600-as sebesség lenne.
Vagy két hardveres soros portot tartalmazó tipust keresel, vagy az egyiket szoftveresen oldod meg. 9600bps nem túl nagy sebesség, simán meg lehet oldani szoftveresen is. Hogy melyik az érdemes az a feladattól függ.
Van 18F452-esem azt mien frekin kell járatni hogy elvigye ezt a dolgot ?
Próbáltam keresni olyan mintaprogramokat amik 2 sorosport kezelésére vonatkoznak , de nem találtam. Ami van mintaprogim az is 16F877 hez van és egy sorosporttal. Már látom hogy nem lesz egyszerű..... Esetleg próbálkozzak C nyelvvel ? ( C18 esetleg ) Vagy ha már valami más nyelvet használok túl sokat lassul a PIC ?
Elsosorban a technika amit almalmazol az szamit. Valoszinuleg C-ben is meg lehet irni ha jol ismered - es itt nem a C nyelv ismerete szamit elsosorban, hanem hogy specialisan az a fordito mit mikor miert csainal es miert ugy csinalja...
ASM-ben talan konyebb kontrollalni, ott mindig tiszta mi tortenik, nem egy forditotol fugg. Ki kell szamolni mekkora az a freki ami mar eleg gyors ahhoz, hogy viszonylag keves hibaval ez megoldhato legyen. Itt nagyjabol arrol van szo, hogy a soros port kezelo modulod magatol lekapkodja a byte-ot, vagy eppenseggel elkuldi, kozben bitbillegtetessel szoftveresen kuldod a masikat vagy a portot olvasgatva veszed le bitenkent a bejovot. Mindent meg lehet oldani interruptosan is, pollozasos modszerrel is, illetve vegyitve is a kettot, csak ertelmesen at kell gondolni mit mikor miert. Ha pl a soros portod interruptos, akkor mondjuk erkezik egy byte kapsz interruptot, de kzben pl billegteted a kimenetet a masiknak akkor az interrupt miatt csuszik minden. Ha az is interruptos, akkor talan kevesbe lesz zavaro ez, mivel a timer megszakitast hasznalva a bitek ideje nagyjabol adott - azert nagyjabol mert amig az egyik interruptot le nem kezelted addi a masik nem tud bejonni. Interruptnak ha jol van megirva van egy valamekkora overheadje, amig a kontextus mentest ill visszaallitast megcsinalja, kitalalja mi okozta az interruptot stb, de ezen felul erdemes minel kevesebbet idozni bent, mondjuk pl kikapni a bejott byte-ot es mar ki is szallni az interruptbol - ill megsem, mivel ha meg kiszallas elott gyorsan rakukkant az ISR hogy kozben tortent-e timer int is, akkor azt meg ott ugyanabban a minutumban le tudja kezelni igy az overhead lecsokkentheto. Most jo zavarosan leirtam, de ez van Vannak tablazatok, hogy milyen orajel mellett mennyire pontos a soros atvitel, ezt is erdemes atnezni, de amugy minel nagyobb a freki annal kevesebb gond lesz ezzel az alkalmazassal. Hogy mekkora az elmeleti mimimum most meg megsaccolni sem mernem, kicsit szamolgatnek elotte de most keso van mar ehhez, majd holnap vagy en vagy valaki mas
Hali
Ugy emlekszem mar leirtam de megegyszer : http://t-es-t.hu/ . Kezdoknek es haladoknak nagyon ajanlott on-line irodalom, ahol kitargyalja a PIC-ek lelkivilagat, felepiteset, mukodeset, trukkoket, mintapeldakat (NEM 16F84 SZINTEN). Ha vki raszan egy kis idot es elkezdi kiertekelni a kezdetektol (NEM eloszor 32 bites PIC-el ELVARAZSOLT compilerrel multitaszkinggal !!! ) lehet hogy sokal tobbre fog jutni. Bocs az eros szavakert da latom itt a kedves fiatal kollegak alapok nelkul megprobalnak mindent csak nem a legkedvezobb es legegyszerubb modon indulnak. Eloszor megprobalnak egy 16F84-be beleirni BASIC-ban egy nuklearis eromu komplett vezerleset (tisztelet a kivetelnek). ugy hogy nem ismerik az alapveto fogalmakat. Gyerekek el kellene kezdeni az alapoktol (amihez a mai vilagban nagyon konnyu hozzajutni) es utana probalkozni a kicsit magasabb szinttel. Bocs ha vkit megsertetem de nezzetek el nekem a morgolodast, csak segiteni szeretnek az ujhus kollegaknak. egy oreg roka Vili
Teljesen igazad van. Túl sokan akarnak "PIC-elni" úgy, hogy azt se tudják mi az az ohm törvénye(azaz egy LED-et sem tudnak ráileszteni helyesen egy lábra!).
De mostanában átléppek ezen, mert aki komolyan gondolja az sok jó kérdést tesz fel, aki csak fellángolásból kezd neki, az meg sok rossz kérdést, majd eltűnik. Mi csak annyit tudunk segíteni, hogy a megfelelő irodalmakra tereljük őket. Természetesen itt a PIC topicban nem merül fel elvileg, hogy aki PIC-el akar foglalkozni, az nem ért az elektronikához, ezért nem az általános iskolai fizika és matematika könyvekhez irányítjuk őket, holott sokszor ott kéne kezdeniük. Reméljük sokan lesznek, akik nem tartoznak a fentebb leírt csoporthoz és jó amatőr szakemberekké válnak, ha szerencsénk van a mi jóvoltunkból!
Van más megoldás is! Mivel egyszerre még a hardveres USART-ok sem tudnak működni(csak úgy látszik) ezért egy USART-al akár több vonalat is meg lehet hajtani, csak szükség van egy vonalkiválasztó IC-re. Ilyen pl. a 74ls125. Nézd meg az IC adatlapját és ha kérdésed akadna tedd fel!
Elvileg egy MAX232-ben két RX-TX vonalnak elegendő meghajtó egység van, így abból elég lehet egy is. Az egyetlen hátrány, hogy a külső eszközök közül csak a kiválasztott tud USART megszakítást generálni, azaz csak master-slave protokoll szerint lehet a forgalmat hatékonyan bonyolítani.
Helló Mindenkinek.
A következő a kérdésem. Csináltam, egy multiplexelős programocskát, melyben a megszakítást, (a léptetést) a TIMER0 végzi. (16F887) KIvételesen még működik is. DE amelyik programba beintegrálnám, az is használja a TIMER0-t. (most néztem át tüzetesebben) Tehát nekem át kellene térnem a TIMER1 vagy a TIMER2-re. Ti melyiket javasolnátok,melyik az egyszerübb (nekem). Köszönettel.
Szerintem mindegy melyiket választod. Azt meg végképp nem tudom, hogy neked melyik az egyszerűbb. Szerintem mindkét Timer egyszerű...
Helló watt.
Megkönnyítetted a választásomat. Ahogy olvasom, a TIMER2 szintén 8 bites, egyből a belső órajelet használja, talán egyszerübb egy magamfajtának. Van elő és utóosztója, ugye a végső osztás az a kettő szorzata? (Vagy mégsem?) Ha engedem végigfutni FF-ig. (Tudod,még egyiket sem használtam sohasem) DE ez csak az első 54 évemre igaz Köszönettel |
Bejelentkezés
Hirdetés |