Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Milyen PIC-nek van T0CKI lába? Én nem tudok ilyenről. Add meg a PIC típusát!
Egyébként miért nem keresel rá a frekimérőre? Timer1-el működik, sok kapcsolást találsz! Bármilyen számmal lehet szorozni, miféle haladó kérdés ez?
A Vpp testre van húzva a paneleken 10k val?
pl. 16f688 RA2/AN2/T0CKI/INT/C1OUT, Bővebben: Link
Köszönöm
Igazad van, nem tudom miért emlékeztem arra, hogy a TMR1-nek van csak bemenete, gondolom az oszci miatt, mert az csak neki van.
Ettől eltekintve a kész projecteket érdemes megnézned, mert létezik frekimérő, én is egy ilyet használok átalakítva.
PIC18 al szeretnék készíteni (TIMER1 -el) kis jitterű megszakításokat. Olvastam Hp41C kolléga korábbi hozzászólását erről:
Idézet: „Szerimtem működne, pl. .50000 -rel kellene osztani: 0. lépés: Timer regiszterek nullázása 1. lépés CCPRxH:CCPRxL= (1 * .50000) % 65536 = .50000 2. lépés a CCPx megszakításban CCPRxH:CCPRxL = (2 * .50000) % 65536 = .34464 ... n. lépés a CCPx megszakításban CCPRxH:CCPRxL = (n * .50000) % 65536 A CCPRx megszakítások .50000 timer órajelenként jönnének.” Valaki tud segíteni miként lehetne kódra fordítani az ötletet? Nekem jelenleg a javaslat önmagában is kicsit kínaiul hangzik.
Ha jó értem, akkor az interruptokat egy (E)CCP egység szolgáltatná, s ehhez a szabadonfutó Timer1 biztosítaná az időszámlálást. Output Compare módban akkor keletkezik megszakítás, amikor a hozzá rendelt Timer számlálója megegyezik a CCPRxH:CCPRxL regsizerpárban megadott 16 bites értékkel.
Az általad idézett példában 50000 óraütés az ismétlődő megszakítások periódusa. Így első esetben 50 000-et kell írni a CCPRxH:CCPRxL regiszterpárba, a következő alkalommal 100 000-et kellene, de ez már kicsordul a 16 bites regiszterből (ugyanígy Timer1 is körbefordul), tehát csak a modulo 65536-ra vett maradék kell. Mivel Timer1 és egy előjel nélküli 16 bites változó egyszerre fognak túlcsodulni, ezzel nem is kel törődni! 1. lépés: unsigned int counts=50000; TMR1 = 0; CCPR1H = counts>>8; CCPR1L = counts & 0xFF; counts += 50000; 2. és minden további lépés (megszakításkor) CCPR1H = counts>>8; CCPR1L = counts & 0xFF; counts += 50000; Természetesen az üzemmód beállításokat és a megszakítás engedélyezést is el kell végezni, itt ccsak a "timer aritmetikára" szorítkoztam.
Igen, pont erre gondoltam. Sajnos C ben nem olvasok olyan jól kódot, így egy kicsit el kell mélyedjek a példában. (Ezzel még lehet, hogy lesz kérdésem) Egyébként, ha jól sejtem moduló 65536 összeadás annyi, mint két 16 bites szám összege, nemtörődve az átvitellel.
Sajnom most több időm nincs a dologgal foglalkozni, de visszatérnék rá. Idézet: Igen ez a lényeg. A bonyodalom meg csupán annyi, hogy 8-bites vezérlőről lévén szó, mindezt két részletben kell csinálni. „két 16 bites szám összege, nemtörődve az átvitellel.”
Az * Törölve !
Jani@ .. két kérdésem is van ( persze költői ), mi a téma címe és hol látod azt, hogy ez itt msn felület lenne ?
M.héten lett kész. 2db-ot tudok adni.
Sziasztok!
Szeretnék összehozni egy 16f887-et nokia lcd-vel de megakadtam a szintillesztésnél. Google a jóbarátom, de nem találtam olyan ic-t ami forgalomban is van. Tudnátok segíteni?
Helló!
dsPIC-ekkel kapcsolatban lenne egy kérdésem. Ezek ugyebár működhetnek fractional és integer módban is. Össze is lehet szorozni két integer vagy két fractional számot. Viszont, hogy tudok összeszorozni egy fractional-t egy integer-rel, ahogy arra pl. a szűrőknél is rendszerit szükség van. Előre is köszönöm! Idézet: Nem, ezek mindig integer módban működnek. A fractional, float és egyéb perverz számábrázolási formátumokat a programkönyvtárak kezelik és értelmezik. dsPIC esetén, gondolom, a dsPIC Language Tools Libraries.„dsPIC-ekkel kapcsolatban lenne egy kérdésem. Ezek ugyebár működhetnek fractional és integer módban is.” Idézet: Minden bizonnyal az integer értéket is konvertálni kell fractional formába. Bővebben: Link „hogy tudok összeszorozni egy fractional-t egy integer-rel”
Mindenek előtt köszönöm a gyors választ!
Én úgy néztem ,hogy a CORCON-ban át lehet állítani, hogy a DSP-vel kapcsolatos utasításokat egész vagy tört számként értelmezze. Tehát szerintem ez hardverből működik, nem szoftverből. Vagy rosszul látom a helyzetet? Idézet: Ebben neked van igazad, de ez csupán annyit jelent, hogy az IF = 0 esetén a szorzás végeredményét megmanipulálja: eggyel balra lépteti (a legkisebb helyiértéken pedig nulla lesz). Vegyes műveletre nincs lehetőség, s az adatkonverziókkal sem foglalkozik a CPU. „Én úgy néztem ,hogy a CORCON-ban át lehet állítani, hogy a DSP-vel kapcsolatos utasításokat egész vagy tört számként értelmezze.”
Sziasztok!
Van egy furcsa problémám. A napokban kezdtem el egy projektet 18F4620-szal és ENC28J60-nal. A kapcsolást és a NYÁK tervet a mellékletben találjátok. Több gondom is van vele: - a PIC folyamatosan újraindul - csak belső oszcillátorról megy (HS, HSPLL nem működik) - a másodlagos oszcillátor nem működik (Timer1-et kellene hajtania) Ellenőriztem a tápfeszültségeket, +5V és +3.3V megvan, ahol kell. Az MCLR lábon is megvan 4.8 V. A fura az, hogy néha elindul a PIC külső kristályról is, ha itt-ott megfogdosom a NYÁK-ot. Ugyanez a helyzet a másodlagos oszcillátorral is. Mi lehet a baj? Előzőleg kipróbáltam a kapcsolást egy dugdosós panelen, ott az oszcillátorokkal nem volt probléma. Előre is köszönöm a segítséget! Szerk: ha a képek nem akarnak betöltődni rendesen: kapcsolás: Bővebben: Link NYÁK terv: Bővebben: Link
Ez nagyon érintkezési hibának tűnik nekem. Futtasd be végig ónnal a kontroller lábai és a kvarc, valamint a kvarc kondenzátoraihoz menő vezetékeket.
Pedig folytonosság-vizsgálóval megpityegtettem a főbb pontokat és mindent rendben találtam. Már próbáltam azt is, hogy egy másik kristályt beböktem a PIC 2 oszcillátor lábához, de akkor sem volt hajlandó elindulni. Elvileg a PIC-nek oszcillátor kondik nélkül is mennie kellene, dugdosós panelen sem tettem mellé őket.
A rajzon külső oszci van. Azt írod nem arról megy?
Az MCLR körből vedd ki a diódát(természetesen kösd át a helyét). A táplábak közelében nem látok kondit. Tegyél egy SMD-t a két piros átkötésre!
Megpróbáltam az MCLR diódáját átkötni, de semmi változás. Mivel nekem is gyanús volt, ezért előzőleg már kikapcsoltam az MCLR pin-t (MCLRDIS konfigurációs bit), de nem segített. Tettem egy 100 nF-os kerámiát a táplábak mellé, de semmi.
Igen, azt írtam, hogy külső oszcillátorral nem megy, ezért egyelőre a belsővel próbálkoztam.
Próbáld meg a kondikat kicserélni 22..33pF-re.
Persze belső oszcival nem szabadna újraindulgatnia. Valami beterhelhet és a táp összeeshet? BOREN-t használsz? Programban nincs véletlenül stack túlcsordulás?
Watchdog ki van kapcsolva?
Ha irsz egy 'bonyolult' ledet kigyujt, var, ledet kikapcsol es innentol egy onmagaba fordulo vegtelen ciklusba futo (tehat nem az elejere) progit akkor is ujraindul? Ha igen, akkor hardverhiba, ha nem, akkor valami programhiba, ami resethez vezet. Egyebkent biztosan reset ez, nemcsak valahol nincs RET vagy JMP, aztan vegigszalad a memorian es kezdi elolrol?
BOR be van kapcsolva és 2.8 V-ra van állítva, de kikapcsolva is reset-el. STVREN van, de kikapcsolva is reset. Az a helyzet, hogy gyakorlatilag teljesen lecsupaszítottam a programot. Már semmi nincs benne, csak pár init rutin (külső EEPROM, külső SRAM, grafikus LCD és TCP stack init). Ezek rendben lefutnak, utána már csak egy while (1); van a teszt kedvéért. Kikapcsoltam minden interrupt-ot, de még így is csinálja.
Most megpróbálok egy butuska programot rátölteni, amiben tényleg nincs semmi, csak egy UART init és egy while (1). Szerk.: @bbalazs_: a watchdog ki van kapcsolva. |
Bejelentkezés
Hirdetés |