Fórum témák

» Több friss téma
Fórum » PIC BASIC
 
Témaindító: hinar_, idő: Máj 7, 2008
Témakörök:
Lapozás: OK   20 / 23
(#) joco53 válasza nagym6 hozzászólására (») Szept 17, 2014 /
 
Köszönöm a válaszod.Reggel megnézem.Remélem igy már jó lesz
(#) nagym6 válasza (Felhasználó 15355) hozzászólására (») Szept 17, 2014 / 1
 
É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.
(#) nagym6 válasza (Felhasználó 15355) hozzászólására (») Szept 17, 2014 / 1
 
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.
(#) mezjoc hozzászólása Nov 29, 2014 /
 
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
(#) brato hozzászólása Dec 31, 2014 /
 
Ü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.
(#) eSDi válasza brato hozzászólására (») Dec 31, 2014 /
 
Üdv!

A PIE1-ben állítst 0-ra a TXIE-t.
Adatlap -> TABLE 10-5: REGISTERS ASSOCIATED WITH ASYNCHRONOUS TRANSMISSION
(#) brato válasza eSDi hozzászólására (») Dec 31, 2014 /
 
Ezt már próbáltam nem jó, azonnal ráfut a megszakításra ismét.
(#) eSDi válasza brato hozzászólására (») Dec 31, 2014 /
 
Pedig nem szabadna. Ha nem használsz semmilyen megszakítást és máshogy nem megy, akkor a GIE-t ne engedélyezd.
(#) brato válasza eSDi hozzászólására (») Dec 31, 2014 /
 
Használok más megszakításokat is.
(#) Prendick válasza brato hozzászólására (») Dec 31, 2014 /
 
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:

  1. sub procedure interrupt
  2.     if PIR1.TMR2IF then
  3.        ClearBit(PIR1,TMR2IF)
  4.        ....
  5.     end if
  6.     if (PIR3.TMR4IF and PIE3.TMR4IE) then
  7.        ClearBit(PIR3,TMR4IF)
  8.        ...
  9.     end if
  10.     if (INTCON.INTF and INTCON.INTE) then        
  11.        ClearBit(INTCON,INTF)
  12.        ...
  13.     end if
  14. ...


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.
(#) brato válasza Prendick hozzászólására (») Dec 31, 2014 /
 
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.
(#) Prendick válasza Prendick hozzászólására (») Dec 31, 2014 /
 
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
(#) meszkar válasza mezjoc hozzászólására (») Jan 1, 2015 /
 
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
(#) gabilow hozzászólása Feb 11, 2015 /
 
Ü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:

  1. bekapcs:
  2.    High GPIO.4                  'vevő enable
  3.   SerIn GPIO.5,84, [Dec2 a]
  4.   If a=18  Then kapcsol_1
  5.   If a=32  Then kapcsol_1
  6.   Low GPIO.4                    'vevő disable fél másodpercig
  7.    DelayMS 500                                
  8.    GoTo bekapcs
  9.  
  10.  
  11. kapcsol_1:
  12.     DelayUS 50                            'kivár a zavarok elkerülése végett
  13.    SerIn GPIO.5,84, [Dec2 a]            
  14.    If a=32 Then GoSub kapcsol_2      
  15.    If a=18 Then GoSub kapcsol_2
  16.    GoTo bekapcs
  17.    
  18. kapcsol_2:                                
  19.    DelayUS 50                               'mégegyszer vár (innen már csak a tuti jel megy tovább)
  20.     SerIn GPIO.5,84, [Dec2 a]        
  21.     If a=18 Then GoSub led1      
  22.     If a=32 Then GoSub led2
  23.     GoTo bekapcs    
  24. led1:                           ' A kimenetek magas szinten maradnak az adó gomb
  25.    Toggle GPIO.1               ' újra megnyomásáig
  26.     DelayMS 500  
  27.     Return
  28.     Toggle GPIO.2
  29.     DelayMS 500
  30.     Return
A hozzászólás módosítva: Feb 12, 2015
(#) enginerus hozzászólása Nov 26, 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
(#) nagym6 válasza enginerus hozzászólására (») Nov 26, 2015 /
 
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.
(#) eSDi válasza enginerus hozzászólására (») Nov 26, 2015 /
 
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.
(#) Reznap hozzászólása Jan 19, 2016 /
 
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
(#) Hp41C válasza Reznap hozzászólására (») 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.
(#) Reznap válasza Hp41C hozzászólására (») Jan 19, 2016 /
 
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
(#) BLUER hozzászólása Jan 20, 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
(#) sooty válasza BLUER hozzászólására (») 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.
(#) BLUER válasza sooty hozzászólására (») Jan 20, 2016 /
 
ohh és ez hogy nézne ki gyakorlatban? mármint ez a hatványozás.
(#) Kera_Will válasza BLUER hozzászólására (») Jan 20, 2016 /
 
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
(#) Kera_Will válasza BLUER hozzászólására (») 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
(#) BLUER válasza Kera_Will hozzászólására (») 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.. :/
  1. SHOut dat, clock, 2 [TEST1,TEST2,TEST3,TEST4,TEST5,TEST6,TEST7,TEST8,TEST9,TEST10]
  2.  
  3. TEST1=A1^A2
  4. TEST2=B1^B2
  5. TEST3=C1^C2
  6. TEST4=D1^D2
  7.  
  8. '10-ig
  9.  
  10.  
  11.    If RCH=0 Then A1=0 : B1=0 : C1=0 : D1=0 : E1=0 : F1=0 : G1=0 : H1=0 : I1=0 : J1=0
  12.    If RCH=1 Then A1=1 : B1=0 : C1=0 : D1=0 : E1=0 : F1=0 : G1=0 : H1=0 : I1=0 : J1=0
  13.    If RCH=2 Then A1=3 : B1=0 : C1=0 : D1=0 : E1=0 : F1=0 : G1=0 : H1=0 : I1=0 : J1=0
  14.    If RCH=3 Then A1=7 : B1=0 : C1=0 : D1=0 : E1=0 : F1=0 : G1=0 : H1=0 : I1=0 : J1=0
  15.    If RCH=4 Then A1=15 : B1=0 : C1=0 : D1=0 : E1=0 : F1=0 : G1=0 : H1=0 : I1=0 : J1=0
  16.  
  17. '40 sorig
  18.  
  19.     If LCH=0 Then A2=0 : B2=0 : C2=0 : D2=0 : E2=0 : F2=0 : G2=0 : H2=0 : I2=0 : J2=0
  20.     If LCH=1 Then A2=16 : B2=0 : C2=0 : D2=0 : E2=0 : F2=0 : G2=0 : H2=0 : I2=0 : J2=0
  21.     If LCH=2 Then A2=48 : B2=0 : C2=0 : D2=0 : E2=0 : F2=0 : G2=0 : H2=0 : I2=0 : J2=0
  22.     If LCH=3 Then A2=112 : B2=0 : C2=0 : D2=0 : E2=0 : F2=0 : G2=0 : H2=0 : I2=0 : J2=0
  23.     If LCH=4 Then A2=240 : B2=0 : C2=0 : D2=0 : E2=0 : F2=0 : G2=0 : H2=0 : I2=0 : J2=0
  24.  
  25. '40 sorig
(#) Kera_Will válasza BLUER hozzászólására (») Jan 20, 2016 / 1
 
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.
(#) BLUER válasza Kera_Will hozzászólására (») Jan 20, 2016 /
 
nah hát köszi a fáradozást, de nekem ez nem igazán kerek sehogy, nem értem én ezt
(#) Kera_Will válasza BLUER hozzászólására (») Jan 20, 2016 /
 
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
(#) BLUER válasza Kera_Will hozzászólására (») Jan 20, 2016 /
 
hát ha mondjuk lenne egy rövidke demo program azt sokat segítene.
Következő: »»   20 / 23
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem