Fórum témák
» Több friss téma |
Ott csak assembly-t használtam eddig ( 12-16-os családok ) !
Aham értem. Köszi..
Közben eszembe jutott egy másik dolog. Nézegettem pár áramkört és valahol a VUSB lábat elektrolit valahol pedig kerámia kondival kötik le testre.. Melyiket és milyen értékűt célszerű használnom? (470nF-ot látok legtöbb esetben) Jelenleg egy 18F4550-en dolgozom.. A hozzászólás módosítva: Aug 27, 2014
Az adatlapban benne van az érték, én ahol lehet, ott nem elkót használok ( SMD 100 nF-osokból szoktam berakni, mert az van sok ! ) .
Csak összejött! Köszi mindenkinek a segítséget! Bár még csak egy digitet írattam ki, már látom a lényeget.
Úgy ahogy írod. Csak bemenet lehet. Felhúzod tápra és kikapcsolod a programban a MCLR funkciót ha be van kapcsolva. Működik, semmi baj vele. Én is csináltam már 628A-val.
Nem tudom, hogy mit akartál csinálni, de megszakításban nem szabad várakozni, mert akkor addig leáll minden! A megszakítás elve az, hogy ha bekövetkezik valami esemény, ami gyors kiszolgálást igényel, akkor megszakítjuk a főprogramot, villámgyorsan lekezeljük az eseményt és visszatérünk a főprogramhoz.
Köszönöm a segítséget, rendesen megépített áramkörön probálgatom. A szoftvereim: MicroC for PIC-el írom a kódot, ez fordítja hexre is.A hex filét a jó öreg MPlab irja a PIC-be, egy PICKIT 3 klónnal. "Illetve lehet működőik is a program, csak a megszakításod gyors.." 10s-os várakozási idővel nem veszem észre? Hisz elöször kikapcsolja a kimenetet, majd vâr 10s-et, vagyis 10s-ig sötét a led, nem igy van?Miért kell várni a nyomógomb lenyomásának végéig? Gondolom , hogy ne okozzon ujabb interruptot nem? De, ha az első interrupt jel után nem jut el a program a [code=c]INTCON.RBIF = 0;[ /code] sorig, akkor nem tud az ujabb jel interruptot kiváltani?Tévedek?Kezdek kicsit összezavarodni... Esetleg valami help?
A hozzászólás módosítva: Aug 28, 2014
Pár dolgot másként csinálnék a helyedben.
1. ne ugyan azt a LED-et akard kapcsolni interrupt-ban mert lehet olyan gyorsan lefut, hogy a változás alig vagy egyáltalán nem észrevehető. 2. A másik amit icserny is mondott, hogy az interrupt lényege a gyors kiszolgálás. Oké, hogy ez csak teszt, de akkor úgy csináld, hogy jobban észrevehető legyen. Tehát a megszakításba tegyél egy másik lábat (BIT-et) amelyen egy másik LED van így, ha az felvillan vagy világítani kezd akkor működik a megszakítás. Itt is érdemes ezt használni: (invert)
Így ha újabb megszakítást kérsz akkor mindig az invertet fogja vissza adni eredményként. Tehát, ha nem világít a LED akkor világítani fog és így ordítva.. A while(gomb); sorral megakadályozod, hogy több megszakításod legyen egymás után, más szóval pergésmentesítő. Esetleg debugolni próbáltál már?
Nem tudom a megszakítást miként gondoltad, de ha csak simán az INT/RB0 megszakítást szeretnéd használni, az az INTE/INTF biteken kezelhető, és az OPTION_REG-ben állítható, hogy melyik élre. Ha viszont az IOC jellegűt (RBIF), akkor ott több regisztert is állítani kell (IOCB). Esetleg érdemes végiggondolni a WPUB (felhúzó ellenállások) beállítását, mivel nem látjuk pontosan hogyan is kapja a jelet .
Üdv. Segítséget kérnék. Pic18F46K22 -nél nem tudom a belső oszcillátor beállítást kihámozni a leírásból. Internal 8Mhz osszci kellene PLL 4 szorzóval, azaz 32MHz órajelet szeretnék. És még -más esetben- 16MHz PLL nélkül.
Annyit sikerült, hogy égetésnél a "CONFIG1H" -ba az "Internal oscillator block" legyen választva, de a belső osszcillátor beállítását az "OSCCON" regiszterben nem lehet konfigurálásnál megadni. Ezt menet közben programból kell beírni? De akkor hogyan indul, amíg oda nem ér, hogy program beállítja. Köszönöm a segítséget.
Úgy látom alapértelmezésben 1MHz-en indul. Az átállítást a programból adod meg, ahogy a PLL bekapcsolását is.
Gyorsan összedobtam egy tesztet.
HI-Tech fordítóban és MPLAB-ban. Behelyettesíteni be tudod, utána már finomíthatsz rajta ahol akarsz.
Remélem tudtam segíteni
Megszakításba ne rakjunk már se végtelen ciklust (while) se másodperces nagyságú késleltetést!
Köszönöm szépen mindenkinek a fáradozásait. Mindig tanul az ember valami újat, most pl. a kimenet invertálást. Nézem a programod, és azt fedezem fel, hogy ez nem teljesen azonos az én C nyelvemmel. Ez a Hi-Tech sajátossága? Érthető, mit csinálsz, csak egy kicsit nekem újoncként még gondolkodni kellett rajta. Tudom, az én tudásom a hiányos, de igyekszem minden infót magamba szívni, de sokszor nem egyszerű. Például a progidban miben más a "extern interrupt" , mint az enyémben a void interrupt? Így megadható, hogy külső interruptot szeretnék? Vagy a tied nem MicroC-ben van? Debug... Nagyon szeretném megtanulni, hogy is kellene, de sajnos egyenlőre nem sikerül. Két ok miatt nem:1. MicroC-ben "programozok", viszont a MicroC for PIC nem látja hardveresen a PICKIT3-st. 2.Gondolom lehetne a Mplab-ba is kiolvasni az assambly parancsokat (esetleg debuggolni), de azt meg annyira nem értem(még). Majd ha hazaérek, kipróbálom a két ledes változatot, amit írtál.
ktamas66: Igen, ezen regiszterek lelki világába szerettem volna egy kicsit belemélyülni, de az angollal nem kicsit küzdök.Próbálom tanulmányozni az adatlapot, de kezdő pickesnek, ez a sok regiszter egy kicsit sok. Főleg, hogy az angollal is hadilábon állok. Amit leírtál, annak mindenképp utána nézek, és próbálom megérteni, melyik regiszter melyik bitje mire szolgál. Ha tudsz esetleg egy linket vagy weboldalt, ahonnan ezek megtanulhatók, azt nagyon megköszönném. icserny: Értelek, hogy nem arra használjuk a megszakítást, amire én így a teszt alapján használtam. Jó tudni, hogy mi a "valós" feladata. Csak gondoltam... De rosszul gondoltam... Köszönöm az infót. Mindenkinek köszönöm szépen még egyszer.
Mikroc-ben is van debug opció. Nem tudom hogy működik, mert csak végszükség esetére telepítettem fel, de van benne.
Nos kipróbáltam. A következő kód részlettel működik:
A void interrupt-ban pedig nullázom a INTCON.INTF bitjét.Köszönök mindent.
Sziasztok!
I2C eszköz címzés ügyben szeretnék segítséget kérni. PIC16F887-el most egy 24c16 memóriát használok és remekül működik a dolog. De ha szeretnék egy PCF8583 óra IC-t is használni, akkor hogyan tudom a két eszközt megkülönböztetni? Az adatlapok alapján nekem úgy tűnik, mind a kettőnél b'1010xxxx' az eszköz címe. Vagy valamit félreértek? Kösz, ha tud valaki segíteni. L. A hozzászólás módosítva: Aug 28, 2014
Ha megnézed a lábkiosztást, találsz a lábak között Ax nevű lábat. Ezeket az alapcímet módosítják.
Például a PCF8583 az A0 mellett beállítható a 0xA2 címre is.
Hát, nem igazán értem mire gondolsz.
A 24C16-nál nekem úgy tűnik egyáltalán nem tudom az eszköz címét állítani. Ilyen lábai nincsenek. A címként elküldött első byte 1010AAAR formátumú, ahol, nekem úgy tűnik, a 4 felső biten mindig 1010-t vár az eszköz. Az AAA biteken pedig az írni/olvasni kívánt adat memóriacímének felső 3 bitje van. Végül R jelzi, hogy írásról, vagy olvasásról van-e szó. A PCF8583 cím byte a következő módon néz ki: 101000CR, ahol a felső 4 bit szintén mindig 1010. A C helyén lévő bitet valóban tudom választani azzal, hogy a chip A0 lábát Vdd-re vagy Vss-re kötöm-e, de ennyi. Mivel mind a két eszköznél 1010 a felső négy bit, és mivel 24C16 a következő 3 bitet már memória címzésére használja, nem látom, hogyan tudnám a két eszközt megkülönböztetni. A 24C16-on valóban van három láb, ott azonban az egyes blokkok írásvédettségét tudom kapcsolni. Most úgy látom, hogy ha memóriát és órát is használni szeretnék, akkor a 24C16-ot ki kell cserélnem 24C164-re. Ott három láb nem a blokkok írásvédésére, hanem éppen az eszköz címének beállítására való. (Viszont míg 24C16 kb. 60Ft. 24C164 kb. 400Ft.) Jól gondolom? Vagy van mégis mód valahogy a 24C16 és a PCF8583 egyszerre történő használatára? L. A hozzászólás módosítva: Aug 28, 2014
A 24C16-nak vannak Ax lábai (kivéve a SOT23-5-öt) csak éppen nincsenek bekötve. Mivel a PIC-ednek nincs két I2C modulja, így kellene írj egy szoftveres I2C-t, vagy ha nem akkor pl az EEPROM tápját valahogy lekapcsolnád (a PIC-el) ameddig olvasnád/írnád az óra IC-t, vagy a PIC SDA/SCK lábai után teszel egy multiplexert és akkor az adatvonalakat kapcsolgatod, csak ez kicsit macerásabb (csináltam már ilyent USB-vel és működött is szépen 4 eszközzel)...
Legrosszabb esetben lecseréled az EEPROM-ot egy olyanra aminek más a címe, vagy esetleg SPI-al kommunikál.
Hát igen. Egyetértek. De a szoftveres I2C-t nem igazán vállalnám be, különben is már kész a panel, és be van forrasztva, sok lehetőségem így nincs. Most úgy gondolom az a legjobb, ha 24c16-ot kiszedem, 24c32-re cserélem és a panel alján meg összeforrasztgatom, hogy semmi esetre se 001 legyen a címe. A többi javaslatod is mind működőképesnek tűnik, csak hát azért nem tudom azt sem megtenni, mivel a panel már kész.
Kösz a válaszodat! L.
Ha Microchip gyártmányú a 24LC16: Vedd ki és tegyél a helyére Atmel vagy ST gyártmányút. Ezeknem működik az A2, A1, A1 címbemenet.
Sziasztok!
Azt hogyan lehet megvalósítani, hogy (XC8-ban) létrehozok egy header file-t és *.h tartalmaz függvény prototípusokat és a printf-hez hasonlóan meghívja a doprnt.c file-t aztán a putch.c-t, én is ezt szeretném, hogy *.h-ban megadott függvény prototípushoz *.c file-t rendelni lehetséges ez? Valamit még egy kérdés a printf-el kapcsolatban ha én más néven szeretném elérni a printf függvényt azt, hogyan lehetséges. Én így próbáltam #define LCDprint(x) printf(x), de így csak ez a formátum használható LCDprint("abc"), a másik típusú LCDprint("%s", string) nem ezt meg lehet valahogy oldani, hogy mind két formátumot lehessen használni? Köszönöm!
Az oldal szerint a printf függvény a putch() -t hívjí meg minden kiírandó karakterre. Elegendő azt úgy megírni, hogy az LDC -re írjon.
Tudom csak a formaság kedvéért szerettem volna megcsinálni a printf átdefiniálását.
(a putch()-t LCDchar ként használom puts meg LCDstring ként mert elviegben a printf hely igényes, csak ha mégis használnám)
Uraim,
" - Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)" Ez a mondat pont igaz 18F4550-re is igaz? Nincs rá mód, hogy a RA4-en H szintet tudjak kiadni? Illetve kérdezném, hogy valaki már készített bármilyen gombmátrixot úgy, hogy a sorokat (vagy oszlopait ki, hogyan) shiftregister-rel hajtotta meg? illetve,
Ezt a sort én pergés mentesítésnek használom, eddig jól is működött, de most a shiftregister-es megoldásnál beragad a while(oszlop1); ciklusban ezért azt szeretném kiváltani. Milyen más megoldással tudnám ez a while(oszlop1); ciklusos várakozást kiváltani? Előre is köszi.. A hozzászólás módosítva: Aug 30, 2014
A 4550-nél az RA4 nem nyitott nyelőelektródás, simán használhatod...
Ha beállítom LATA regiszterrel, hogy magas szintre kerüljön akkor a szimulátorban úgy jelenik meg mint ha inputra állítottam volna be.
Valamit be kell állítsak ahhoz, hogy tudjam azt a lábat is használni? (Config registerbe vagy valahol?) |
Bejelentkezés
Hirdetés |