Fórum témák
» Több friss téma |
Köszönöm a válaszod.Reggel megnézem.Remélem igy már jó lesz
Én beforgatom hex-be, kellenének a konfig bit beállítások. Nekem ilyen sort kell beírni, pld.:
@ DEVICE pic16F628A, intOSC_osc_noclkout, WDT_OFF, PWRT_OFF, BOD_OFF, MCLR_ON De nem tudom, hogy a szimulátor ezt értelmezni tudja-e, a fordító ezzel mit csinál, hova teszi. 16F877 -re készült az eredeti program, gondolom ezzel lenne legegyszerűbben.
Itt a HEX. 16F877-ben nincs belső osc, és mclr nem lehet IO bemenet, így ezeket kihagytam.
Az OPTR4 4MHz kvarc, OPTR20 20MHz kvarchoz lett fordítva. A progi 20MHz-órajelre lett írva.
Sziasztok!
A kérdésem az lenne, hogy az MPLAB X - fejlesztő programba be lehet-e integrálni a PICBASIC PRO COMPILERT (v2.60)? Az MPLAB IDE v8.80 - nál ez gond nélkül ment. Tudta PIC16, illetve a PIC18-as tipusokat is. Úgy látom, hogy az MPLAB X inkább a C-programnyelvre van illesztve. Nagyon remélem, hogy tévedek! Kösz: mezjoc
Üdv!
Proton ide programmal 16f877 re írok programot soros port kezeléshez. HSerIn,HSerOut utasításokat használom. Az a bajom, hogy állandóan beugrik a megszakításba a txif flag miatt. Nem tudom megszüntetni a flag jelzést sehogyan sem. Mi erre a megoldás? Esetleg egy programrészlet is jöhet tanulmányozásra ha van valakinek.
Üdv!
A PIE1-ben állítst 0-ra a TXIE-t. Adatlap -> TABLE 10-5: REGISTERS ASSOCIATED WITH ASYNCHRONOUS TRANSMISSION
Ezt már próbáltam nem jó, azonnal ráfut a megszakításra ismét.
Pedig nem szabadna. Ha nem használsz semmilyen megszakítást és máshogy nem megy, akkor a GIE-t ne engedélyezd.
Jellegzetes programszerkesztési hiba. Az xxIF flag-ek akkor is bebillennek az esemény bekövetkezésekor, ha az xxIE flag-ek ki vannak kapcsolva. Viszont ha az interrupt-ban csak az xxIF-eket figyeled, téves riasztásokat kapsz. Én TMR0 hibának neveztem el, mert abba mindig beleszaladtam, ha kellett, ha nem.
Vagyis arról van szó, hogy szép sorban ott állnak az If xxIF_bit then ... sorok az interrupt rutinban, aztán jön egy megszakítás (pl. egy timerről) és a program az első xxIF=1-nél be is ugrik valahova, ahova olykor nem kéne. Át kell dolgozni az interrupt elágazásokat. Pl. így:
Néha a timereknél fontos, hogy ne legyen még egy plusz összehasonlítás, mert pontosan ki lettek számolva, ezért őket várható gyakoriság szerint sorban és a legelejére kell rakni. A perifériás megszakításoknál viszont nagyon ajánlott együtt figyelni az xxIE és xxIF biteket. Nálad az a hiba, hogy valamelyik timer indítja a megszakítást, aztán egy rossz helyen lévő If TXIF=1 miatt belefut a TX-hez írt programrészbe.
A dolog úgy néz ki, hogy interruptban szeretném figyelni ha adat jön be a picre.
Minden megszakítást lekapcsoltam csak a bejövő adatét hagytam meg. Ezután állandóan beesik a megszakítás holott nincs fogadott adat.
Várj, itt egy kicsit belekeveredtünk, én is hülyéket írok. Természetesen vételről beszélünk ugye? Akkor az Rx láb és RCIF.
Van felhúzó ellenállás az Rx lábon? Az Rx modul nem élvezérelt, hanem mintákat vesz a baudrate alapján. Mivel a startbit 0, ha a Rx láb gnd-n (vagy környékén) van, folyamatosan vételnek érzékel mindent és periodikusan veszi is a nullákat. A hozzászólás módosítva: Dec 31, 2014
Szia!
Szerintem NEM! A PBP 3.x telepítésekor kizárólag az MPLAB IDE-re hivatkozik, ill. az ott használt MPASM-ra van szüksége. Egyébként egész jó a PBP által felajánlott alternatív IDE-is. Nem is tudom, hogy örömödet találnád-e az X-es IDE-ben, nálam egyetlen PICkit x sem képes kommunikálni az új Java-ás környezettel. Talán a 4-es PBP kiadása során megoldják ezeket a gondokat. Buék: Karcsi
Üdv Mindenkinek!
Az alábbi programnál megakadtam. Az előzö vevővel működött a program, kapcsolgatta az enable lábat a vevőn a GPIO.4 es láb. Most egy másik típusú vevővel próbálkoztam, ennél az a baj,hogy a program megáll a SERIN parancsnál és csak akkor megy tovább, ha kap egy "jó" jelet az adótól. Hogyan tudnám ki-be kapcsolgatni a vevőt, hogy közben figyelje a bejövő adatokat a SERIN? Segítséget előre is kösz:
A hozzászólás módosítva: Feb 12, 2015
Sziasztok!
Engem is elkapott a PIC szele. Még mielött jönnének az ASM / C ajánló kommentek, közölném, hogy ez a PIC BASIC és nem véletlenül írtam ide és nem az asm -be. elöször a sikerélmény reményében nekem elég lenne BASICben is egy LED villogtató programot/kapcsolást létrehozni. az ilyen kezdőket nem kell egyből azzal zsibbasztani, hogy csak az ASM a jó és semmi mással nem érdemes kezdeni. Na és egy ilyen bevezetető után azt szertném kérdezni, hogy picBASIC oktató anyagot hol találok? (parancsok formátumok, mintapéldák) még a C64 időkben szórakoztam basic programozással, hobby szinten, éppen ezért most is ezt választanám, aztán majd lépek tovább, ha kell, de ne az legyen az elsőválassz, hogy csaaaaaaak az asseembly
Szia. Nem írtad, hogy melyik Basic progival dolgozol. Küldtem mintákat, ez a Melabs Picbasic Pro-hoz van, de a többi is nagyon hasonló. És még itt is van: Bővebben: Link
Nem csak az assembly, basic-ben is komoly dolgok alkothatók, csak ha pontos időzítés kell, akkor asseembly. mert nem ismertek a basic utasítások lépésszámai. De azért ezen is lehet sok esetben segíteni, én digiszkóppal pontosan mérem a szükséges programrészek idejét, és ezzel kalkulálok.
Hali!
Először is keresned kell egy neked tetsző fejlesztőkörnyezetet. Én az Oshonsoft PIC Simulator IDE-t használom (ez egy teljes fejlesztőkörnyezet érthető példákkal és nem csak egy fordító), nekem ez vált be a legjobban és ez hasonlít a legjobban a Visual BASIC nyelvre (VB6). Sajnos ehhez nem nagyon van okosítás, viszont megfizethető otthonra is. Ezen kívűl van a Proton PIC BASIC amit ismerek, ez szerintem nem generál olyan jó kódot, mint az előbbi, de ez is könnyen megérthető a kézikönyve alapján. Viszont ehhez kell egy külső szimulátor program, vagy élesben kell kipróbálnod mindent. Sajnos ASM-hez mindenképp köze van az egésznek, mert az adatlap ezt taglalja és a BASIC is arra épül. Valamilyen szinten ismerni kell azt is.
Udv!
Par napja kezdtem picezni, az Oshonsoft-os szimulatort hasznalom, amivel eleg jol haladok a reszletes peldak es a reszletes sugoja miatt. Abban szeretnek segitseget kerni, hogyan lehetne timerrel 1 masodperces interruptot kesziteni, mivel egy orat szeretnek kesziteni, es pont timerekrol illetve interruptokrol nincs kello leiras a sugoban. Sajnos gondolkodas nelkul vagtam bele, keson jottem ra, hogy az 1 masodperce kesleltetes nem lesz ugy jo, ahogy alapbol terveztem. Ettol eltekintve majdnem teljesen funkcionalis az ora, szamolas/multiplex/beallitas stb szepen megy. Egyebkent a multiplexes reszt egy mintaprogrambol emeltem at, timer0-t mar hasznalja, ha szamit valamit. Szoval roviden az erdekelne, hogy nez ki egy ilyen timer 1 masodperce beallitva. szerk: 16f877a-t hasznalok, 4Mhz clockkal. A hozzászólás módosítva: Jan 19, 2016
1 - 32.768 kHz quartz és 2 darab 22pF kondenzátor a T1 oszcillátor bemenetére, a programból a TMR1H regiszter 7 bitjét 1 -re állítani a megszakítási rutinban.
2 - Timer2 -t felhasználni egy kisebb idejű megszakításra. prescaler = 4, PR2 = 255, postscaler = 1 beállítással 1 ms -onként lehet Timer2 megszakítást előállítani. Csak minden ezdediknél kell lefuttatni az idő számítását.
Koszonom a gyorst valaszt.
Az 1-es jol hangzik, de nem tudom hogy a szimulatorban hogyan lehetne megoldani. Azt meg megkerdezhetem, hogy a masodik lehetoseg nagyjabol hogyan nez ki programba foglalva? Sajnos meg nagyon hianyos a tudasom, meg semmi ilyesmit nem talalok a sugoban. A hozzászólás módosítva: Jan 19, 2016
Üvd!
szeretnék megoldani valamit, de bármit bárhogy próbálok sehogy nem megy, de lehet hogy nem is lehet pedig tök alapnak tűnik Szóval adott egy változó PL: TEST TEST=%00000000 és adott 2 plusz változó LEFT, RIGHT LEFT= 0 tól 4 RIGHT=0 tól 4 na most olyat kellene kreálni, hogy a LEFT a TEST első négy bitjét, tologatja jobra TEST=%00000000 TEST=%10000000 TEST=%11000000 TEST=%11100000 TEST=%11110000 RIGHT a TEST utolsó négy bitjét, tologatja jobbra TEST=%00000000 TEST=%00001000 TEST=%00001100 TEST=%00001110 TEST=%00001111 lehet egyáltalán ilyet csinálni? előre is köszi az infókat (Proton Basic) A hozzászólás módosítva: Jan 20, 2016
Amit felírtál az nem tologatás, hanem pusztán kettő hatványinak hozzáadása illetve kivonása. Tehát pl. az utolsó 23-RIGHT hozzáadása az eredeti TEST értékhez. A másik az meg 27-LEFT hozzáadása. A tologatás kettő hatványaival való szorzás és osztás lenne.
ohh és ez hogy nézne ki gyakorlatban? mármint ez a hatványozás.
Egyik esetben hozzá adod a 128 64 32 16 értékeket vagy elveszed .
Másik esetben 8 4 2 1 értéket adsz hozzá majd kivonod. Erre kel egy függvényt/rutint/eljárást írnod a proton basic adta lehetőségekkel. Bármi lehet a test tartalma ? Mert akkkor lehet hogy bit set/resettel is játszhatsz. AND és OR maszkolással is megoldható lehetne. A hozzászólás módosítva: Jan 20, 2016
Átmeneti változóba teszed a TESTet.
Ellépteted jobbra balra annyival amivel akarod a TEST változót aztán az eredményt OR vagy AND vagy XOR műveletet végzel az eredeti TEST változóval. (OR/AND/XOR attól függ mit szeretnél kapni azokon az alsó/felső biteken amik nem változtak) A hozzászólás módosítva: Jan 20, 2016
Na szóval a lényeg az hogy, ezekkel a módszerekkel már valamit alkottam, csak a bibi az hogy nekem a LEFT-RIGHT 40-40 értékéhez tartozó TEST értékeket amiből 10 van (TEST1-10) 80 sorral oldottam meg ami baromi hosszú, gondoltam hátha van ennek rövidebb módja is.. :/
Lehetne ezt maszkolással is segédváltozókkal.
Zanzásítva így nézne ki. 1. van a változód TEST bitek XXXXXXXX 2. berakni átmenetibe TEST->TEMP_TEST XXXXXXXX 3. elléptetni amerre akarod TEST->step_test xxxxXXXX ("kis x" jelölik az eltolt biteket) Ekkor van 2 változód egyiknek az egyik nibble (fél bájt) el van tolva 4. bit maszkolni az alsó és felső nibble a változókban step_test = step_test AND 00001111 / 11110000 (attól függ merre léptettél el mit szeretnél meg hagyni) xxxxXXXX AND 11110000 -> xxxx0000 5. Aztán a TEMP_TEST változóban is maszkolni az alsó/felső nibble TEMP_TEST = TEMP_TEST AND 00001111 / 11110000 (attól függ merre léptettél el mit szeretnél meg hagyni) XXXXXXXX AND 00001111 -> 0000XXXX 6. Ekkor már lesz 2 db fél eredményed a változókban (alsó/felső nibble).Már csak OR olni kell a 2 fél nibble xxxx0000 , 0000XXXX kimenet = TEMP_TEST OR step_test xxxx0000 OR 0000XXXX => xxxxXXXX Ekkor a 2 fél nibble egymás mellé kerül . Lehet nem kell statikus táblázattal foglalni a memóriát, igaz ekkor processzornál futási idő fog nőni.Nagyon nem mert ezek általában gyors elemi utasítások lesznek , kevés órajelet kérnek.2 3 átmeneti változót kell majd használni de lehet elég egyet .Ez a nyelvi szintaktika függvénye.
nah hát köszi a fáradozást, de nekem ez nem igazán kerek sehogy, nem értem én ezt
Pedig csak egyszerű BIT SET / RESET művelet van jobbra/balra tolással összehozva.
Bit/bájt szintű AND/OR műveletek. A végén pedig a 2 db alsó/felső fél bájt összegét kapod meg. Általános esetet írtam le. AND műveletek esetén ott ahol 1esvan nem változik a bit értéke ahol 0 van ott 0 lesz. Ez a BIT RESET. OR műveletet esetén ahol 1 van akkor ott mindig 1 lesz az eredmény. Ez a BIT SET. Az eltolások mértékét a left/right változóiddal tudod megadni. De a végeredményt így tudod össze rakni fél fél bájtokkal. De ha Te a 00h értékű bájtból indulsz ki és azokat kell feltölteni 1sekkel akkor is alkalmas ez a fél bájt-os módszer maszkolása. A hozzászólás módosítva: Jan 20, 2016
hát ha mondjuk lenne egy rövidke demo program azt sokat segítene.
|
Bejelentkezés
Hirdetés |