Fórum témák
» Több friss téma |
Idézet: „Egyes újabb 18F-ek is tartalmaznak beépített felhúzót az MCLR lábon” Jól sejtem hogy a 18F1320-nak nincs beépített felhúzó ellenállása?
Sziasztok!
Most kezdtem foglalkozni assemblyvel, és elakadtam a timer0-nál. Azt nem értem hogy hogyi s megy ez a megszakitási frekvencia. Van pl egy 4MHz kristály és hogy tudom kiszámolni pl. a 1:32-s osztást. Flowcode-al már csináltam picet, de most rászántam magam a hardver közelibre. Elöre is köszönöm
4MHz az órajel, ebből következően a Timer0 bemenete 4MHz/4=1MHz-et kap. A TMR0 regisztert alapesetben ez az 1MHz növeli 256 lépésben, majd amikor túlcsordul, akkor beállítja a T0IF jelzőbitet és számol előlről. A jelzőbit tehát 1MHz/256, vagyis 3906,25Hz frekvenciával, tehát 256us időnként billen be. Ez elé tudod még odatenni az előosztót, hogy további 1:2, 1:4, 1:8, ...., 1:256 arányban ossza le az órajelet, ami a Timer0-t lépteti. Tehát ha pl. 32-re állítod az előosztót, akkor 122,07 Hz frekvenciával fog a T0IF bebillenni, vagyis két bebillenés között 8,192ms telik el.
Jól. Nem csak innen lehet látni egyébként, hanem a Table 1-2-ben az MCLR sorában nem említi a felhúzót. 12F683 ugyanilyen táblázatában írja, hogy "Master Clear with internal pull-up", és a láb blokkrajzán is szerepel ott a felhúzó.
1:32-es osztást pedig úgy tudsz csinálni, hogy a megszakításor annyit adsz a TMR0-hoz, hogy a következő megszakítás 32 programórajel után legyen. Fontos, hogy nem beletölteni kell az értéket, hanem hozzáadni ahhoz, ami már benne van, mert ugye a megszakítás sem azonnal történik meg, közben a TMR0 tovább számol.
Annyit még megjegyeznék, hogy 1:32 osztású megszakítás az eléggé elveszi az időt a fő programszáltól, de van olyan alkalmazás, ami ezt kívánja...
Szia!
Ugye nem 16F84... A 16F628 -ban van timer2, azzal sokkal egyszerűbb a 32 -es osztást megcsinálni...
Köszönöm mindenkinek a segitséget. Igazábol egyenlöre proteusba nézegetem, hogy müködik e a dolog. De 16F676-m van itthon. Arra szeretnék irni majd egy progit. Mert flowcodba már irtam bele amivel megy is, de szeretném böviteni csak sajna betelt. Elvileg assemblybe kevesebb helyet foglal mint ilyen grafikus progikba. De ha nem is legalább jobban megértem a pic müködését.
Sziasztok!
Újabb problémával fordulok hozzátok. Az lcd-m és a keypad-em már működik szépen, hála nektek. Most viszont szeretném üzembe helyezni az USB kommunikációt de sehogy sem akarja felismerni a gép a PIC-et. Próbálkoztam ez alapján a leírás alapján: Link illetve a picollo projekt alapján. Mivel nem használok bootloadert ezért a linker fájlt lecseréltem egy bootload nélkülire. Megnéznétek, hogy mi lehet a hiba? Kerestem már itt a fórumon gyakori hibákra ezzel kapcsolatban de nem találtam semmi rosszat se a kapcsolásban se a kódban. Mellékelem a kapcsolást. Köszi előre is.
Az USB-s cikkeket olvastad itt? Van CDC és HID, ez utóbbit én követtem el. A CDC-vel midig bajom volt, nemrég cseréltem le a házvezérlőmet is HID-re, ezért én ezt ajánlanám jobban.
Olvastam igen. De nem igazán segítettek sajnos.
Most próbálgattam állítgatni az ID-ket hátha ütközik a PicKit2-mel de megnéztem linux alatt a pickit-ét és nem ugyanaz mint a projekt usb-descriptorában megadott. Nem tudom mi lehet a baj mert egyszer már működött a linkben megadott leírás alapján de egyszerűen nem jövök rá, hogy mit állítottam el.
Hát állítsd vissza az eredeti állapotot, ha úgy gondolod, elállítottál valamit!
Sziasztok!
Mplab-ba miért nem tudok a watch ablakba symbolt hozzáadni? Ot vannak azok a változok amiket felvettem, igaz?
Szia!
Sajnos abban sincs timer2. Használhatsz 4.096 MHz -es quart -ot vagy alkalmazhatod ezt az algoritmust.. A lábkompatibilis 16F684-ben van timer2... Idézet: Próbáld ki a PICCOLO projektből a Helló világ programot!„Mivel nem használok bootloadert ezért a linker fájlt lecseréltem egy bootload nélkülire.” Ha nem akarsz bootloadert használni, akkor sem kell lecserélni a linker állományt (nem szegényház ez, mindenre fel van készítve! :smoke: ), hanem az alábbi változtatásokat tedd meg: 1. Tedd kommentbe a piccolo-config.h állomány
sorát, hogy a memória elejére tegye a programodat. 2. A projekt linker opciói közül vedd ki a /uHID_BOOTLOADER-t! (én az .mcp állományt szoktam szerkesztgetni, de az MPLAB Project/Build options/Project menüben is megtalálod az MPLINK fülre kattintva)
Ismét nem értek valamit. Ha itt a TRISC nullázom akkor a PORTC 0,1 bite miért vált magasra? De nem csinálja mindig és proteusba a portc 0. magasan leszz, de pl mplabba meg alacsony.
LIST P=16F676 #INCLUDE "P16F676.INC" __CONFIG _INTRC_OSC_NOCLKOUT&_CP_OFF&_WDT_OFF&_BODEN_OFF ORG 0 MAIN BSF STATUS,RP0 CLRF ANSEL MOVLW 0X00 MOVWF TRISC BCF STATUS,RP0 LOOP GOTO LOOP END
Szia!
A PORT-ot induláskor fel kell tölteni valamilyen értékkel, különben "bármi" lehet benne --> ezért hol nullával, hol eggyel is indulhat ( a szimuláció ki tudja mivel "helyettesíti" !). A TRIS-t mikor átállítod kimenetre, akkor megjelenik az előre nem meghatározott érték ! Steve
Üdv!
Azt szeretném megtudni, hogy ha C nyelvben szeretnék "szaggatást" előállítani akkor az nekem csak "delay" parancsszóval lehetséges vagy mással is? Milyen parancssorral lehetne olyan PWM jelet előállítani amivel pl. egy adott frekvencián a kitöltés módosítható csak, vagy adott kitöltés mellett csak a frekvencia. A delay-el csak késleltetni tudok és így tolódik a jel egyik paraméterével a másik is. Vagy csak a delay megoldás létezik és ehez kell a függvényeket kigondolni? Gondolom csak delay-ekkel és megfelelő fügvényekkel is meg lehet oldani, de azért kíváncsi lennék van-e más lehetőség is. Előre is köszöszöm.
Na kipróbáltam de ez sem müködik
@watt: már én is gondoltam erre és már mindenfélével próbálkoztam ami eszembe jutott de egyszerűen nem akar működni. Próbáltam forrasztgatni a kapcsolást hátha ott romlott el valami, újra raktam az mplabot, akkor a linkert cseréltem, illetve leszedtem régebbi verziójú Michrochip demo gyűjteményt de semmi. Szinte biztos vagyok benne, hogy valami banális hiba van benne de egyszerűen nem találom
Több megoldás is szóba jöhet:
1. Használd a PIC pwm perifériáját. 2. Külön-külön állítsd a jel/szünet arány hosszát, így állandó lesz a freki. Célszerű lenne elmélyedni a timer részben, hogy kikerülhesd a delay-t.
Igen, ebben igazad lehet, mivel kezdő vagyok e téren és időm se sok van mostanság de azért csipp-csupp ahol lehet szeretnék informálódni.
Idézet: „1. Használd a PIC pwm perifériáját.” Ez is számomra új fogalom, mivel nem tudom a "nyelvben" miként nyilvánúl meg ez. Idézet: „2. Külön-külön állítsd a jel/szünet arány hosszát, így állandó lesz a freki” Ez érthető és menne mivel a két delay-re írnék egy fordítottan arányos függvényt így tényleng a frekvencia stabil maradna. Idézet: „Célszerű lenne elmélyedni a timer részben, hogy kikerülhesd a delay-t” Erre meg megint azt tudom mondani mint az elsőre. Mindig meg kell jegyezzem, hogy remélem majd egyszer befejezed az oldaladon a C fejezeted mivel nagyon érthetően közelíted meg a dolgokat Idézet: Ez nem túl informatív megfogalmazása a problémának. Mi az, hogy "nem működik"?„Na kipróbáltam de ez sem müködik” Körbe kell nézni a kapcsolást: a PICCOLO projektben 20 MHz-es kristály az alapértelmezett. Azt használsz? Az USB csatlakozó bekötését könnyen el lehet téveszteni. Ha a +5V és a GND megvan, akkor már egyszerűbb a dolog... A +5V "szomszédja" a D-,a GND-jé pedig a D+. Ha a számítógép észleli, de felismerni nem tudja, és jó a bekötés meg az órajel frekvenciája, akkor előfordulhat, hogy az eszközmeghajtót el kell távolítani és újra össze kell ismertetni a rendszerrel (a kibontott code_examples.zip bootloader/USB CDC Serial Demo/inf könytárában van az, ami ehhez szükséges. Mennie kell! Nekem már VUSB kondenzátor nélkül is működött egyszer!
Idézet: Sehogy nem nyilvánul meg. Minden perifériát úgy kezelhetsz C-ben, hogy a megfelelő regiszterekbe megfelelő értékeket írsz. Ez sima értékadás. A regiszterek neveit a mikrovezérlőhöz tartozó leíró állomány (pl. p18f1220.h) állomány definiálja.„nem tudom a "nyelvben" miként nyilvánul meg ez.” Idézet: Nem fordított arányosság kell, hanem a periódusidőből ki kell vonni az első késleltetési idő értékét, s az legyen a második késleltetési idő.„Ez érthető és menne mivel a két delay-re írnék egy fordítottan arányos függvényt” t2 = T - t1
Köszi a gyors választ.
Csatolom ismét a kapcsolási rajzomat. Szerintem a kapcsolással nincs gond mert amint említettem már egyszer működött. A kristály 20Mhz-es illetve a lábak jól vannak bekötve. Szerintem nem észleli a számítógép mivel nem pittyeg amikor bedugom illetve próbáltam linux alatt is és az lsusb nem jelzi ki. Ezért vagyok már teljesen letörve mivel semmi élet jelet nem akar adni magáról
Igen a másodikat én is így gondoltam, csak nem jól fogalmaztam.
Az első része meg még mindig nem igazán érthető. Esetleg egy példát tudnál küldeni amikor nem delay-el oldódik meg a pwm előállítása hanem perifériákkal, vagy ahogy te írtad? Egy akármilyen kód jó ahol szerepel ez a megoldás. Arra vagyok kíváncsi, hogy kapcsolódik a C nyelv ehez a pwm perifériához a kódban. |
Bejelentkezés
Hirdetés |