Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Köszi a választ!
Az adatlap szerint BANK1-BANK14 nem elérhető, vagyis ott ugye nincs semmi. Szóval csak akkor lehet probléma, ha véletlenül a BSR-rel a BANK1..BANK14 valamelyikét választom ki? Le akarom már tisztázni ezt a bankos ügyet, eddig nem nagyon törődtem vele, de azthiszem mostmár ez is kezd világossá válni.
Természetesen itt nem kell váltanod. Probléma akkor van, ha váltasz és nem tudod, hogy váltottál. Tehát ne válts! Ez a bank olyan mint a fiókok, azt húzod ki, amelyikben a keresett tartalom van, semmi ördöngősség, csak oda kell figyelni. Nyílván az üres fiókokat is ki lehet húzni, csak nem találsz bennük semmit. Más bajt nem okoz.
Ha már itt tartunk: gondolom 18F2550-nél már más a helyzet, hiszen ott már 2kbyte-os az SRAM, amiből a BANK0..BANK7 a GPR, a BANK15 pedig az SFR. Szóval ha egy változót a 310h helyre rakok, ami a 3. BANK-ban van, akkor direkt címzésnél váltani kell bankot?
Hatalmas problémával küzdök és segítség kell!
TCP/IP Stack-ben a CustomHTTPApp.c-ben a végén átrendeztem a HTTPPrint-eket és kikommenteltem a fölöslegeseket. Ezután a programom két változónak az értékét nem hajlandó elmenteni az SPI EEPROM-ba. Itt a kódom:
és a HTTPPrint-ek:
Amikor weben beírom PingInterval és WaitBeforePing értékeit, akkor nem a valódit menti, hanem 0-t és 11831-et. Kérem, akinek van fogalma hol a hiba, az szóljon!! Köszönöm!
Van ICD2 vagy Pickit2-d? Én tennék egy töréspontot a CustomHTTPApp.c-ben az itt 29-el jelölt sorra, majd onnan soronként léptetném és megvizsgálnám a változókat egyesével, hogy miben nem az van, ami kellene, hogy legyen.
Ok, ráraktam a Pickit2-t. Most fogok először debuggolni, úgyhogy hajrá....
mindjárt irom mi az eredmény
Remek, debuggolok (Debugger - Run) csak azt nem tudom, mit kell csinálni.
A break is ott van a sorban és most egy zöld nyíl is megjelent.
Szimulátort sem használtad még sosem? F7-el léptethetsz soronként, de akkor a függvényhívásoknál bemegy a függvénybe is. F8-al léptetheted úgy, hogy a C forrásban a következő sorra ugorjon (ha közben van függvényhívás, akkor azt végrehajtja). F9-el meg megy a következő töréspontig (ami lehet ugyanaz is, mint a mostani, ha ismételten ráfut).
Van a View->Watch, ott tudod hozzáadni a figyelni kívánt változókat. Add hozzá a TmpWBP-t, és a newAppConfig-ot, akkor az ott majd kibontja a struktúrát és a tömböt. Jobbkattal a változó nevén birod állítani, hogy miként mutassa, hex, bin, dec vagy akár ascii kódban.
Ebben szerintem felesleges castolni, mert a TmpWBP már eleve char * típusú. Hibát nem szabad, hogy okozzon, csak felesleges. Juteszembe, ezért nem kiabál a fordító, hogy a char TmpWBP[4]; sor nem közvetlenül a függvény fejléce alatt van, még mielőbb bármi mást csinálnál?
Szia!
Mekkora tápról jár a rádiós modul? Elég nagy a jelszint a PICKit2 -nek? A buffer kártyát már ajánlottam...Segítségével már többször sikerült nyitott kollektoros vonalakon is használnom a PICKit2 alanizátorát.
Szia!
Gombbelemről, azaz kb 3V-ról meg az RTFQ1. Hogy elég-e PICkit2-nek a jelszintje azt nem tudom.
Szia!
A mérést elindítod, hogy a CH3 le- vagy felfutó éle a trigger. A mérés magától nem áll le, de a gomb megnyomására leáll. Ekkor a PICKit2 nem érzékeli rendesen a szinteket (szerintem a magas szintet). A gomb megnyomása után nézd meg a kapott regisztrátumot: ha minden jel alacsony szinten van, akkor kellene a buffer. Ne kösd össze a Vdd -t a panellal, hanem kapcsold be a PICKit2 -n a mérés előtt, így a buffer tápja a PICKit2 Vdd értékével állítható lesz. A buffert a Logic Tool elindítása után csatlakoztasd fel, és a belőle való kilépés előtt csatlakoztasd le.
Jó napot!
A tapskapcsolós lámpám fényerőszabályzást megoldottam PWM-nélkül. Csak a TMR0- használatával. Így teljesen jó 0-255-ig szabályozható a fényerő. A probléma csak az hogy teljesen lefoglalja a picet. Amit kérdezni akarok a hozzávaló távirányítóm problematikája. Egy 10f200 előállítja a 38Khz vivő frekit, amit egy másik 10f200 fogad és ebből állítom elő a szinte tetszőleges bitsorozatot illetve szüneteket. A 10f200-ak belső oszcillátorról mennek plafonon, ami elvileg 4MHz. Ezt hivatott lenne venni egy 16f628a , ami szintén belső 4Mhz-en megy. Közben építettem egy frekvenciamérőt, Vicsys kolléga tárházából. Kérdezném, hogyan lehet ha lehet lemérni ezen picek belső működési frekvenciáját. És hogyan tudnám a vevő 16f628a-ban ezeket a 10f200 által küldött infra jeleket valahogyan befogni, ahol az időzítés nem súlyosan kritikus. A szegény ember szkópján nézve örülök, hogy kedvemre variálhatom a küldött csomagokat, de még jobban tetszene ha csak az én távirányítómra működne. Mert jelenleg a 10f200-ban egy bit 0xff hosszúságú. A szünet meg 10x 0xff. Ezeket hosszúságokat a 16f628a-ban is alkalmazom. De valahogy csak bizonyos idő után kapcsol, és ami rosszabb, ezt megteszi egy másik távirányítóra is, bármilyenre. Mivel a cél csak 2 különb funkció, az sem baj ha 4 bites, és mondjuk 100 csomag után fogadom el. Valószínűleg az időzítsek a rosszak, de a belső frekit is jó lenne tudni. Protokollokat nem alkalmazom, csak az érdekelne, hogyan lehet a legegyszerűbben nyomon követni a mechanizmusokat, mert így kicsit vakond vagyok.
Van valami különösebb ok arra, hogy sok assembly programban a változókat az adatmemória 0x20-as címétől helyezik el?
Szia!
- Ok: A kiválasztott típus memória szervezése. 16F sorozat tagjainál általában 0x20 címtől általános célú memória terület található. - Különbségek: 16C83, 16C84, 16F83(A), 16F84(A) típusoknál ez a terület a 0x0C címtól kezdődik, a 16F54 -en 0x07 -töl, a 16F57 -nél 0x10 től, stb... A kezdőcímet a felhasznált kontroller memória kiosztása alapján kell megválasztani.
Köszi!
Tényleg, most nézem, 0x20 előtt SFR-ek vannak. Aztán vannak az általános regiszterek, aztán megint egy kis SFR, aztán megint GPR... +1 pont a 18F-es szériának.
Amugy a programod szemszogebol miert zavaro, ha 0x20 cimrol kezdodnek az adataid?
Ha már van rá lehetőség, hogy a 0x00 címtől kezdődjenek az adatok, miért ne?
Egyébként Indirekt címzésnél ne kelljen hozzáadni a címhez mindig 0x20-at.
C program eseteben egy 0-as cim akar zavaro is lehet mivel a NULL ertek 0-as cimmel van lekodolva.
Szép napot!
Van egy Pickit2-m. Az infra jeleket úgygondolom a TMR0-val fogom mérni, mondjuk a lefutó éleket, és mentem egy regiszterbe. A kijelzés lehetetlensége okán, hogyan lehetne mondjuk mplaban vagy valahogy a segédregiszter értékét a művelet után kiolvasni?
A kijelzés sem lehetetlen, ha a PICkit2-t Uart Tool módban használod, s a mikrovezérlőd az USART/EUSART porton kommunikál.
A másik lehetőség az, hogy a PICkit2 hardveres nyomkövető módjában kiolvasod a megfelelő regiszter/változó tartalmát (ehhez természetesen egy töréspontot el kell helyezni a program egy alkalmas pontján).
Akkor erre jó lesz odafigyelni. De még egy ideig ASM-ben programozok.
Indirekt címzésnél is valahonnan jön az FSR-be írandó érték, nem? Pl. a 0x30 címen levő ABC nevű változóba akarsz indirekt címzéssel írni valamit, akkor birod így csinálni:
Vagy ha az ABC egy tömb, akkor meg pl. az ötödik elemének a címét úgy számítod ki, ha a W-ben már ott van az öt, hogy
INT megszakításnál van valami minimális idő ameddig mondjuk H szintűnek kell maradnia a bemenetnek ahhoz hogy megszakítás-generálódjon?
PIC18F14K22-nek az INT2 bemenetére H szintet kapcsolok két vezeték összeérintésével. A megszakítás felfutó élre van beállítva, és az INT2 lábra párhuzamosan rá van kötve egy LED is. Az INT2 megszakításának lekezelésében egy teljesen másik lábra kötött LED-et gyújtok ki aztán goto$. Ha összeérintem a két vezetéket akkor a direktbe rákötött LED felvillan és a másik LED pedig kigyúl (a megszakítás felkapcsolja). De néha sikerül elérnem azt hogy nagyon rövid időre érintem össze csak a két vezetéket, ekkor a direktbe rákötött LED felvillan egy pillanatra, de a másik LED sötét marad (a PIC nem lép be a megszakításba mert nem érzékeli a felfutó élt). Ez azért gond mert egy másik PIC adna neki egy jelet (start bit lesz majd ha egyszer hajlandó lesz működni) és onnantól indulna meg egy jelátvitel. De egyszerűen nem érzékeli a "vevő" PIC. Az "adó" PIC által kiadott impulzus 1ms-os. Szerk.: 25ns lenne? Hát annál az 1ms bőven több...
Szia!
Attila a kézi érintésnél Te biztos nem adsz 1ms-nál rövidebb jelet ( az tuti elég, de a konkrét min.értéket nem tudom! ), ott valami más a hiba ... ! Steve Idézet: „INT megszakításnál van valami minimális idő ameddig mondjuk H szintűnek kell maradnia a bemenetnek ahhoz hogy megszakítás-generálódjon?” Adatlapban benne kellene lennie: TINP "INTx pin High or Low Time" 25ns jó lehet...
Itt látom konkrétan, jó volt MPi-c kolléga meglátása... !
Steve
Igazatok volt, nem az idő volt túl kevés hanem a jelszint túl alacsony.
Hp41C! Belinkelnéd azt a buffert amit említettél? Rákerestem de nem találom... |
Bejelentkezés
Hirdetés |