Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Rá van írva a panelra és fájl neve is az. Gondolom, jól gondolod, hogy az.
Üdv!
Problémám akadt a PIC16F59 ram kezelésésvel. A bank0-ban beteltek a szabad memóriacímek(0xA-0x1F), viszont sem az FSR regiszter módosításával, sem pedig a pl.: BANKSEL 0x30 utasításra nem történik semmi. Hogyan tudnám kihasználni cblock-ból a felsőbb memóriacímeket? A segítségeket előre is köszönöm.
Szia!
Hasonlóan kell kezelni, mint más 16F kontroller esetén: Direkten és indirekten elérhető bankok: Bank0: 0x00 .. 0x1F Bank1: 0x20 .. 0x3F Bank2: 0x40 .. 0x5F Bank3: 0x60 .. 0x7F Csak indirekten elérhető bankok: Bank4: 0x80 .. 0x9F Bank5: 0xA0 .. 0xBF Bank6: 0xC0 .. 0xDF Bank7: 0xE0 .. 0xFF A bankok alsó 16 regisztere minden Bank beállítás mellett ugyan azokat a regisztereket éri el: 0x00 .. 0x09 a speciális célú regiszterek, a 0x0A..0x0F - közös ram: Ide kell elhelyezni azokat az adatokat, amiket minden Bank kiválasztás mellett el szeretnénk érni... Készíts egy projectet a mellékletben levő programhoz, fordítsd le abszolut módon, állítsd be az MPLAB SIM -et debuggernek, kövesd végig a programot: előbb minden Tempx változót töröl, majd mindbe más adatot ír, pedig a címük alsó 5 bitje megegyezik..
Köszönöm, ezek jó infók voltak.
Bár még úgy nézem a problémám nem oldódott meg. Kicsit bővítettem és ez jön vissza:
Igazából azt nem értem, hogy pl. 0x30-as címen levő változót miért nem tudom a W-be mozgatni mikor abban a bankban vagyok, vagyis miért a 0x10-es címről akarja a változókat beolvasni?
Szia!
Azért veszi elő a 0x30 memóriacím helyett a 0x10 címen levő adatot, mert a 0x30 már a Bank1 -ben van. Ld. mellékelt ábra.
Akkor ezek szerint elég az eltérő bankban tárolt kezelni kívánt változó bankjába ugrani pl. BANKSEL PORTB_4 utasítással, a PORTB_0 és PORTB_4 címét csak a disassembler nem tudja követni.
Ok már sikerült, a szimulációnál minden jó, így már menni fog.
Köszönöm szépen a hasznos információkat és a segítséget!
Szia!
A beépített banksel makro csak 2 bitet kezel a bankváltásra, a 16F59 -ben pedig 3 van (FSR:7..5). Egy kis segítség... Egy kis pontosítás az adatlaphoz: Direkt címzésnél is az FSR 7..5 bitjei választják ki a bank-ot.
És arról van nyákterved beültetéssel amit mondtad, hogy COM portos és te is azt használod?
Sziasztok!
Most kezdtem el pic-el foglalkozni, és lenne pár kérdésem. Sikerült szereznem egy Kónya féle fejlesztő környezetet, és azon programozgatok. Vannak minta programjaim is, meg már írtam 1-2 nagyon egyszerűt. Van egy ledvillogtató mintaprogram is amin pár dolgot nem értem. Mégpedig az időzítés. Azzal hogy EQU 20H, és a párja, hogyan határozom meg az időzítés sebességét, mert ha jól sejtem ez azt csinálja. Ha jól értelmezem a programot, akkor a villogásnál behívom a WAIT szubrutint. Ott a CLRF törli az időzítő értékét nem? Aaztán meg átmegy a DELAY-ra, ott meg a DECFSZ csökkenti az értékét, vagy hogy van ez? Nos, lényegében nem értem. Valaki el tudná magyarázni, lenne olyan szíves? Köszönettel: Gergő
Csak futólag néztem bele a programba, de úgy látom, hogy az EQU direktívákkal azt mondja meg, hogy mely memóriarekeszeket használja változóként (számlálóként).
Ha az időzítés idejét szeretnéd befolyásolni, a Microchip PIC delay Code Generator weblapján nézz körül! Mellesleg az EQU helyett a CBLOCK direktívával valamivel tisztességesebb volna helyet foglalni a változóknak. További hasznos linkek: link1 link2 link3
Hát a pichez programot hogy működik-e a pic az égetőmmel semmi gond.A tiédet építettem meg soros portra még szenvedtünk is egy sort mert rosszak voltak a bc182-ők. talán a v4-es nem tudom pontosan.
Amit én használok, arról is van. Bővebben: Link
Ne haragudj, összekevertelek az előtted szólóval a számok miatt(93, 94)
Arra gondoltam, hogy írni kéne egy egyszerűt. Pl. egy olyat, ami egy LED- et villogtat, vagy egy bemenet változására egy másik kimenetet átvált, amin szintén egy LED az indikátor.
Sziasztok Melyik a legegyszerűbb és legolcsóbb PIC égető? Akarok már valami egyszerű PIC-es cuccot majd csinálni. Nagyon fontos az ára !!!
Sziasztok!
A hozzáértők segítségét szeretném kérni. A feladat az lenne hogy le kellene mérni egy Pic lábán megjelenő feszültség idejét ezredmásodperc vagy legalábbis század pontossággal. Szóval pic lábára feszültség rákapcsol--->Pic elkezd számolni--->feszültség megszűnik--->számláló leáll. Napost ezt az értéket kellene összehasonlítani a Picben eltárolt értékekekkel. Pl 3.245 másodperc--->3 as lábra egy kb 3 másodpercig tartó jel 2.876 másodperc 1 es lábra 3 másodperces jel. Összesen 3 láb lenne. Halmazok lennének azaz hogyha pl 3.123 vagy 2.654 vagy 9.234...stb hosszú a jel akkor a 3 as láb ha pl 8.422 vagy 2.653 vagy 5.987...stb akkor a 2 es láb. stb Nekem konkrétan az időméréssel van bajom és azzal hogy pl ha csak század másodperc pontosságú a mérés akkor kerekítsen. Másrészt olyan bajom is van hogy ha pl 1 másodperc alatti hosszú a jel akkor újraindul a figyelés mert az értelmetlen jel. Lenne valakinek ötlete? Tudna nekem valaki segíteni? A válaszhoz vezető bárminemű segítséget szívesen fogadok.
Üdv!
Ami ér is valamit és ha van LPT portod:Oshon féle égető(Evvel kezdtem és evvel égettem be a PicKit2-höz szükséges PIC-et is.) vagy WLPT, WATT féle égető.
A CCP modul capture módjával lehet két impulzus közötti időt megmérni könnyen. Nézd meg az adatlapban a működését, és ha van kérdésed tedd fel!
Szia!
Szerintem, ha egyszerűt szeretnél, vegyél Microsticket! Nem a legolcsóbb, de kezdésnek nagyon jó. Kapsz hozzá két 16 bites PIC-et is. Minimál kialakítás, de könnyen bővíthető. Ne vacakolj párhuzamos porttal, ha van USB. Btw. a Microstickes sorozatom második része elkészült, íme: http://markogergely.hu/hobbi/pickelunk-01/
A PIC CCP (vagy ECCP) perifériájának Input Capture üzemmódja használható erre. Pl. Timer1 elindul, CCP felfutó élre élesítve. Amikor a bejövő jel felfutó éle megjön, a Timer1 értéke eltárolódik és megszakítás keletkezik. Ekkor az eltárolt timer értéket változóba rakod, s a CCP egységet lefutó él detektálására élesíted. Ha az is megérkezett, akkor az ahhoz tartozó timer érték is kiolvasható. A két timer érték különbsége meg az esetleges Timer1 túlcsordulások száma megadja az időintervallum szélességét. Utána azt csinálsz vele, amit akarsz.
PIC18-hoz Robert B. Reese: "Microprocessors From Assembly Language to C Using the PIC18Fxx2" c. könyve Chap13/swdetov.c mintapéldáját tudom ajánlani. Az előadásvázlatok és a mintaprogramok forráskódja a szerző honlapján elérhető. A könyv pedig sok helyen beszerezhető...
Sziasztok, volna pár alap kérdésem (8 bites mikrovezérlőknél (16F877)):
1. Ha a deklarálok egy regisztert, akkor az mekkora méretű lesz? (8 vagy 16bit.) 2. Az AD konvertere ugyebár 10bites a 16F877-nek. Ha a konverzió után kapott értéket beleteszem egy regiszterbe, akkor mind a 10 bitet beleteszi, vagy csak az alsó 8-at? És ez utóbbi esetben a felső 2 bitet egy másik regiszterbe kell tenni?
Azért egy kezdőnek nem feltétlenül a 16 bites kontrollereket ajánlanám.
Gratulálok, szép munka! A www.reesemicro.com honlapot neked is ajánlom (a PIC24-es tananyag, támogatói programkönyvtár és példaprogramok kapcsán). Sőt, ha nem veszed szerénytelenségnek, magamat is ajánlom (a PIC-kwik projektben PIC24HJ128GP502 mikrovezérlővel foglalkozom).
Ez attól függ miben programozol (Asm, C, etc.). Az Asm- ben az alapegység a 8 bit, de lefoglalhatod ennek a többszörösét is. Magasabb szintű nyelveknél meg a dokumentáció megmondja, hogy az egyes fordítók esetén mennyi az annyi. Az ADC- vel kapcsolatban csak annyit, hogy két regiszterben képződik az eredmény, az hogy milyen formában (jobbra vagy balra shiftelt) az tőlünk függ, hogy a felkonfigurálás során mit állítottunk be. Egyébként az adatlap gyönyörűen leírja ezeket a dolgokat, érdemes lenne kicsit tanulmányozni. Az ADC eredményének feldolgozása is tőlünk függ. Lehet a felső 8 bitet vagy az alsó 8 bitet (itt jön be, hogy balra vagy jobbra zárt eredményt konfigurálunk be), de a teljes 10 bitet is kezelni, természetesen megfelelő méretű változókat kell létrehozni.
Semmi baj. Majd keresek egy villogót mert még csak után építgetek.
Idézet: Ezt hagyjuk meg a gyártónak! Mi csak változókat deklarálunk (pl. C nyelven), vagy memória rekeszeket (Microchip nyelven ez file registers) foglalunk le. Deklarálhatsz akár 64 bites változókat is, gépi szinten akkor is csak bájtonként történik az adatmozgatás. A 8-nál több bites változó csak több bájtban (több memória rekeszben) fér el.„1. Ha a deklarálok egy regisztert” Idézet: Az eredmény az ADDRESH és ADDRESL regiszterpárba kerül (a beállítástól függően jobbra vagy balra igazítva). Onnan bájtonként pakolja át a programod a változóba. „2. Az AD konvertere ugyebár 10bites a 16F877-nek.” Idézet: Igen. „És ez utóbbi esetben a felső 2 bitet egy másik regiszterbe kell tenni?” |
Bejelentkezés
Hirdetés |