Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1027 / 1320
(#) Attila86 válasza Attila86 hozzászólására (») Szept 27, 2011 /
 
Ezek az anomáliák a mikrovezérlő típusából erednek, vagy az MPLAB nem kezeli le normálisan? Mondjuk erre rá lehetne jönni ha nem szimulálnám hanem beégetném a PIC-be és felkapcsoltatnék vele egy LED-et a megszakításban.

Az is érdekes, hogy egy másik áramkörömben, a forrasztóállomás III-ban ugyan így van megoldva 10ms-os megszakítás (CCP3+TMR1), és ott eddig működött. A mikrovezérlő is majdnem ugyan az; PIC18F26K80. Bár most elővettem azt hogy megnézzem, beleégettem ugyan azt a progit amit eddig és most meghülyült, egy jó nagy nem kívánt végtelen ciklusban futkorászik...
(#) Hp41C válasza Attila86 hozzászólására (») Szept 27, 2011 /
 
A RD16 csak a kiolvasási / beírási módot állítja: RD16 = 1, akkor a TMR1H egy bufferen keresztül kezelhető (TMR1L olvasása átmásolja a TMR1H értékét a bufferbe, TMR1L írásakor a buffer tartalma íródik a TMR1H -ba). Lehet, hogy a szimulátor / debugger ezt a módot nem kezeli jól.
(#) Attila86 válasza Hp41C hozzászólására (») Szept 27, 2011 /
 
És ilyenkor mi a teendő? Várni míg kiadnak egy újabb MPLAB verziót amiben ezt kijavítják?
(#) potyo válasza Attila86 hozzászólására (») Szept 27, 2011 /
 
Nem árt, ha jelented is nekik a problémát, és csatolsz hozzá egy apró mintakódot, ami szemlélteti a problémát.

Hogy ne álljon le a fejlesztésed, a hardverben feltételezed, hogy jól működik a dolog és ennyi. Ha a kódod működésében nem vagy biztos, akkor esetleg kipróbálod másik CCP csatornán, másik Timerrel, vagy esetleg másik típuson. Szóval fel kell találni magadat.
(#) watt válasza Attila86 hozzászólására (») Szept 27, 2011 /
 
Idézet:
„Miért nem okoz a CCP3 modul megszakítást?”

Aztán:
Idézet:
„És azt is írtam hogy nem a megszakítással van a gond”

Akkor most mit is írtál?

Mellesleg, ha prioritásos programot írsz, akkor illik ezt beállítani, még akkor is, ha szerencséd van jelen esetben, hogy a hagyományos megszakítási vektor beleesik a tartományba! Arról nem is beszélve, hogy nem tudod mi van a memóriában a 0x04h-n! 3FFF mi is, nem ADDLW? Szóval szerintem itt is gond lehet.

Azt is említettem, hogy a szimulátor nem jó...
(#) Hp41C válasza Attila86 hozzászólására (») Szept 27, 2011 /
 
A RD16 hibáról már tudnak:
Idézet:
„SIM-477 | SIM18 does not behave properly when using RD16 bit in T1CON/T3CON registers in Timers 1 and 3 | PIC18F4450, PIC18F2450, PIC18F family”
(#) Attila86 válasza watt hozzászólására (») Szept 27, 2011 /
 
A #1070570-as hozzászólásomban írtam a most szóban forgó problémáról először. Ennek első mondatában kérdeztem valóban, hogy miért nem okoz a CCP3 modul megszakítást. Időrendi sorrendben szoktam írni a dolgokat, tehát a legelső amit tapasztaltam hogy nem lép be a megszakításba. Utána próbáltam kideríteni hogy mi lehet az oka ezért belekukkantottam a Watch ablakba, ahol láttam hogy a TMR1 nem számlál. Ettől a kijelentéstől kezdve az első kérdés tulajdonképpen okafogyottá vált. Nekem legalábbis ez volt a gondolatmenetem.

Idézet:
„Mellesleg, ha prioritásos programot írsz, akkor illik ezt beállítani, még akkor is, ha szerencséd van jelen esetben, hogy a hagyományos megszakítási vektor beleesik a tartományba! Arról nem is beszélve, hogy nem tudod mi van a memóriában a 0x04h-n! 3FFF mi is, nem ADDLW? Szóval szerintem itt is gond lehet.”

Ezt pedig nem értem.
(#) Attila86 válasza potyo hozzászólására (») Szept 27, 2011 /
 
Idézet:
„Szóval fel kell találni magadat.”

Persze ezzel nincs gond, ezért is vettem elő a forrasztóállomás programját mert ott ugyan ez ugyan így működik, aztán a következő lépés hogy átállítom már mikrovezérlőre.
(#) Attila86 hozzászólása Szept 27, 2011 /
 
Na, a megszakítással is gond van. GIE, PEIE, CCP3IE bitek 1-ek a Watch ablak szerint, a CCP3IF-et pedig manuálisan a 1-re állítottam, de nem lép be a megszakításba.
(#) watt válasza Attila86 hozzászólására (») Szept 27, 2011 /
 
Idézet:
„Ezt pedig nem értem.”

Ha az IPEN=0 (alapból az), akkor a hagyományos megszakítás van kiválasztva azaz a megszakítás belépési vektor a 0x04h. Ha te a vektort 0x08h-ra állítod, akkor a 0x04-től a 0x07-ig nem tudod mi van a memóriában, ugyanis oda nem írtál semmit, az marad ami volt, vagy alapból FFFF. Megnéztem, az csak szerencse, hogy az 1111-el kezdődő kódok NOP-ot jelentenek, mert a 16F-eknél nem így volt, ezért írtam, hogy akár egy hibás utasításként is veheti a végrehajtó. Ha netán beragad oda valami, akkor az most is így fog történni.

Tehát, ha prioritásos megszakítást akarsz használni, akkor azt rendesen állítsd be, ha nem, akkor 0x04h-n kezd a megszakítás lekezelését, ahogy az a 16F-eknél szokás!
(#) Ideiglenes válasza MPi-c hozzászólására (») Szept 27, 2011 /
 
A szerintem-mel kezdődő mondatokat nem érdemes leírni. Ezt valaki előttem írta és teljesen igaza van. Előbb nézz utána, hogy mit javasolsz. Az MPASM leírásában sehol nem szerepel, hogy a banksel után nem kell megmondani az utasításban, hogy BANKED, vagy ACCESS a címzés. A banksel mindösszesen a megfelelő bankot választja ki ahhoz a cimkéhez, amit operandusként mögötte megadunk. PIC18-as mikrovezérlők esetén egy movlb utasítás kerül be. Semmi többről nem ír a felhasználói útmutató.

"4.7

banksel – GENERATE BANK SELECTING CODE
4.7.1
Syntax
banksel label
4.7.2
Description
This directive is an instruction to the assembler and linker to generate bank selecting
code to set the bank to the bank containing the designated label. Only one label
should be specified. No operations can be performed on label. This label must have
been previously defined.
The linker will generate the appropriate bank selecting code. For 12-bit instruction
width (PIC10F, some PIC12/PIC16) devices, the appropriate bit set/clear instructions
on the FSR will be generated. For 14-bit instruction width (most PIC12/PIC16) devices,
bit set/clear instructions on the STATUS register will be generated. For PIC18 devices,
a movlb will be generated. If the device contains only one bank of RAM, no instructions
will be generated.
"
(#) icserny válasza Ideiglenes hozzászólására (») Szept 27, 2011 /
 
Amit MPi fórumtársunk írt, annak nincs köze a banksel makróhoz. Arról van szó, hogy a PIC18 mikrovezérlők esetén a MOVF f,d,a utasításnál is használt címzéseknél van alapértelmezett értéke d-nek és a-nak. Jelen esetben az a jelző (access bit) a szóbanforgás tárgya.

Az access bit alapértelmezett értéke

Ha az a módosítót elhagyjuk az utasításból (nem adjuk meg), akkor a alapértelmezett értéke az alábbi szabályok szerint alakul:

- Ha f a 0x00-0x5F vagy a 0xF60-0xFFF tartományba esik, akkor a=0 (ACCESS) az alapértelmezett érték.

- Ha pedig f a 0x060-0xF5F tartományba esik, akkor a=1 (BANKED) az alapértelmezett érték.

(a fentieket a PICCOLO projektben írtam, ahol olyan mikrovezérlőket használok, amelyeknél nem 0x7f hanem 0x5F az ACCESS BANK határa).
(#) Attila86 válasza watt hozzászólására (») Szept 27, 2011 /
 
Ja értem! Nem tudtam hogy a hagyományos és a "nem hagyományos" megszakítások közt különbség van a megszakítás-vektor címei közt. Így már mindjárt világos amit írtál, köszönöm.
(#) Hp41C válasza watt hozzászólására (») Szept 27, 2011 /
 
Szia!

Ahogy nagyjaink mondani szokták: "Ez így, ebben a formában nem igaz..."

- A DS39977C 106. oldalán levő figure 6-2 "Hard vector for PIC18F66K80 family devices" ábra nem tesz említést a 0x0000, 0x0008, 0x0018 címeken kívüli vektorról. Ez így szerepel már a 18C (18C242... 18C452 - DS39026B), és a korai 18F -ek adatlapján is (18F242... 18F452 - DS39564C).
- A DS39977C 154. oldalán látható ábra alapján a nem prioritásos rendszer (RCON.IPEN = 0) a 0x0008, a (RCON.IPEN = 1) prioritásos a 0x0008 (magas prioritás) és a 0x0018 (alacsony prioritás) vektort használja. (Mivel a 18F, 18C szériában egy alap utasítás két byte, így a nem prioritásos megszakítás tényleg a 4. utasításnál kezdődik, de a 18F byte-osan címez...)
(#) trudnai válasza watt hozzászólására (») Szept 27, 2011 /
 
Idézet:
„Ha az IPEN=0 (alapból az), akkor a hagyományos megszakítás van kiválasztva azaz a megszakítás belépési vektor a 0x04h.”


Bocsanat, hogy kozbe szolok, de az en olvasatom szerint attol meg, hogy a prioritasos megszakitas vezerlot letiltjuk (azaz nem engedelyezzuk a prioritasokat, mas neven compatibilis modban hasznaljuk a megszakitas vezerlot), attol meg nem ugrik a 0004h cimre, hanem csak annyit csinal, hogy a 0008h cimre ugrik minden megszakitasnal fuggetlenul a prioritasi szintjetol (no meg gondolom nem szakit bele az ISR-be sem).

Idezet az adatlapbol: (hatha valamit felre ertelmeztem)

Idézet:
„When the IPEN bit is cleared (default state), the
interrupt priority feature is disabled and interrupts are
compatible with PICŸ mid-range devices. In
Compatibility mode, the interrupt priority bits for each
source have no effect. INTCON<6> is the PEIE bit that
enables/disables all peripheral interrupt sources.
INTCON<7> is the GIE bit that enables/disables all
interrupt sources. All interrupts branch to address
0008h in Compatibility mode.”
(#) watt válasza Hp41C hozzászólására (») Szept 27, 2011 /
 
Igazatok van, engem ez tévesztett meg, de erősen!
  1. bit 7 IPEN: Interrupt Priority Enable bit
  2. 1 =  Enable priority levels on interrupts
  3. 0 =  Disable priority levels on interrupts (PIC16CXXX Compatibility mode)

Nem is értem, miért érdekes az, hogy 16Cxxx kompatibilis, vagy sem, főleg, hogy így nem is igaz az állítás.

Attila86 tőled is elnézést kérek, kicsit félrevezettelek!
Ettől függetlenül azért állítsd be a prioritásokat, nehogy e miatt nem fusson megszakításra!
(#) MPi-c válasza Ideiglenes hozzászólására (») Szept 27, 2011 /
 
Idézet:
„A szerintem-mel kezdődő mondatokat nem érdemes leírni.”

Ez a te mondataidra bizonyosan igaz!
Természetesen a hozzászólásom előtt utánanéztem mit javasolok. Most is megtettem, és megállapítottam, hogy a te tudásod a hiányos!
Igen, ahogy icserny írta, nem a banksel használatáról, hanem az „access” vagy „banked” bit odabiggyesztéséről volt szó, mert Attila86 a kódjában a banksel-t alkalmazta, te viszont a fenti bitet hiányoltad.
Azt, hogy a movwf - és a többi - utasítás szintaxisa hogy néz ki, milyen operandusokat kell megadni, vagy lehet elhagyni, nem a MPASM/MPLINK leírásából – abból is talán a legfrissebbet kellett volna előcitálnod, bár a lényegen nem változtat – hanem bármely PIC18 adatlapjából olvashatod ki, nagyon egyszerűen: az opcionális argumentumok kapcsos zárójelben ( „{}” ) szerepelnek.
(#) Hp41C válasza MPi-c hozzászólására (») Szept 27, 2011 /
 
Az MpAsm program a deklarációkból, a címekből általában tudja, hogy access vagy banked módot fordítson. Ugyanígy a rendeltetés default értékét sem kötelező kiírni. Ezek a megadások a program olvasójának, továbbfejlasztőjének szólnak, akinek majd évekkel később kell arra emlékeznie, hogy egy rég nem használt, elavult kontrollerben a CCPR1L eléréséhez a fordító az access bankot, míg a CCPR3L -hez a banked elérést fordítja. Lehet, hogy öreg, bogaras vagyok, de én inkább kiírom, mert szeretem pontosan tudni, mi is történik.
(#) PetAd hozzászólása Szept 27, 2011 /
 
Sziasztok
Próbálok életre kelteni egy DS18B20-as hőmérőt, de valamiért nem akar működni. Arra gyanakszom hogy maga az ic a rossz. A netről több példaprogit is összevadásztam, beállítottam a megfelelő lábat, bekötöttem úgy ahogy az adatlapon van, de semmi.
Kiíratok az LCDre egy szöveget, majd jön a beolvasás és utána megint egy másik szöveg, de itt a kettő között elakad.
Valakinek van egy biztosan működő programja amivel le tudnám tesztelni az ICt? Tele a net nem működő progikkal és nem lehet eldönteni hogy melyik a rossz.
(#) Ideiglenes válasza icserny hozzászólására (») Szept 27, 2011 /
 
Én azért ezt egy kicsit másképpen látom, mit is írt a fórumtársunk:
Idézet:
„Szerintem a fordító a banksel után automatikusan beállítja a BANKED bitet”


Hogy hogyan is indult a mai napom nem mesélem el, de hajnalban korán kivetett az ágy. A munka később kezdődik, gondoltam olvasgatok a neten. Itt bukkantam rá Attila kérdésére, s mint fejtörőt próbáltam megfejteni. Mivel alapos böngészgetés után sem találtam különösebb kivetnivalót a kódjában, ezért fókuszáltam a velem is gyakran előforduló bankváltás problémájára. A forráskódban említett vezérlőtípust a google-be bepötyögve a microchip oldalára kerültem, ahonnan a legfrissebb adatlapot sikerült letöltenem. Ebben a 115-ös oldalon megleltem az általam kifogásolt CCP3CON regisztert a speciális regiszterek között. Memóriacíme: F4Dh. ( Ez a cím nincs benne a 0xF60-0xFFF tartományban, tehát elvileg a fordító a 1-s BANKED módot fordítaná. ) A lap alján is szerepel megjegyzésként (5), amiért korábban írtam, hogy BANKED módot kell választani ( 1-est kiírni az utasítás végén ), hogy az így jelölt regiszterek nincsenek leképezve az ACCESS BANK területre.

Idézet:

Addresses, E41h through F5Fh, are also used by the SFRs, but are not part of the Access RAM. To access these registers, users must always load the proper BSR value.

Az E41h címtől az F5Fh címig szintén SFR regiszterek vannak, de azok nem részei az Access RAM-nak. A hozzáférés érdekében a felhasználónak MINDIG be kell töltenie a megfelelő BSR értéket.

És ezúton kérek elnézést a korábban általam kifogásolt hozzászólások miatt.
(#) potyo válasza PetAd hozzászólására (») Szept 27, 2011 /
 
A DS18B20 adatlapjában benne van, hogy hogyan kell vele kommunikálni. Az időzítéseket be kell tartani, ha egy kód pl. 4MHz-es órajelű kontrollerhez van írva, akkor nem fog helyesen működni 8MHz-ről futtatott kontrollerrel.

Nekem van itt egy kódom: Link
(#) n_yálastrubadúr hozzászólása Szept 28, 2011 /
 
Szép napot. Egy tasztatúra pic-hez illesztésén gondolkodtam. Csatoltam egy elképzelést, miszerint a fenti ág változtatja a kimeneti logikáját ez az oldal kimenetként működik. Még a másik pedig ehhez képest vizsgálja az 1-3-ig a bementeket. Vélemény?
(#) PetAd válasza potyo hozzászólására (») Szept 28, 2011 /
 
Azt elfelejtettem megemlíteni, hogy CCS-ben fogom programozni nem asm-ben, ezért elvileg az időzítésekkel nem lehet gond, viszont én a belső RC oszcit használom, remélem az nem kavar be.
16F690re kötöttem rá az A4 lábra, nem használom a parazita táplálást, 4,7K felhúzó ellenállás is bent van.
Mikor a program vár a DS18B20 válaszára akkor kifagy, mert nem válaszol a cucc. Sajnos más 1wire eszközöm nincs így nem tudom tesztelni, hogy működik-e a program.
Ha kikommentezem a várakozást akkor továbbmegy a program de nem olvas ki semmit és a változó értéke 0 marad.
Sajnos ahova ez kell, oda más hőmérő nem jó, mert nincs elég vezeték, analóg se a vezeték hossza miatt.

3.rar
    
(#) potyo válasza PetAd hozzászólására (») Szept 28, 2011 /
 
Na azért, mert CCS, attól még nem árt leellenőrizni az időzítések pontosságát. Beteszel egy ilyet, hogy delay_us(2), aztán könnyen lesz belőle 4us, mivel az ugróutasítások kapásból elvisznek 2-2 utasításciklust.

Viszont a belső oszcillátor a 16F690-en alapból 4MHz-en indul, és nem látom a kódban, hogy te ezt átállítanád 8MHz-re, amit a use delay-ben megadsz.

  1. output_bit(ONE_WIRE_PIN, shift_right(&data,1,0)); // set output bit on 1-wire

Ez biztosan azt csinálja, amit szeretnél? Nem mondom, hogy nem, de én nem szeretem ezeket a CCS féle cuccokat... Meg eleve nem kellene a portlábat magasra húzni, hanem vagy alacsony, vagy nagyimpedanciás állapotba rakni. Illetve ez a függvényhívás is idő, ki tudja, mikorra rendezi le a dolgát, már simán túl is csúszhatsz az időzítéssel...
(#) watt válasza n_yálastrubadúr hozzászólására (») Szept 28, 2011 /
 
Miért nem nézel utána hogyan kell ezt csinálni? Az oldalamon is van példaprogram és kapcsolás is. Az nem számít, hogy 18F-re, ugyanaz... (esetleg javasolhatom a kezdők topicot?)
(#) PetAd válasza potyo hozzászólására (») Szept 28, 2011 /
 
Eddig mindig működött így a program, nem is gondoltam hogy nem 8Mhzen megy a cucc, utánanéztem az adatlapon és elvileg 4mhzen fut alapból.
A setup_oscillator(OSC_8MHZ); sor meg nem működik, hiányol egy változót a végéről, még akkor is ha egy ,0 -t odarakok ami az oszci kalibrációs értéke. A neten másoknak működik így, ezzel a PIC-el.

Közben rájöttem, hogy mi volt a probléma, INTRC-t álíltotam be INTRC_IO helyett, és kiküldte a belső oszcillátor jelét a CLKOUTra ami az A4es láb, én meg ezt használtam 1wirenek
Most már működik rendesen úgy, hogy nem állítottam semmit az oszcillátorral.
(#) steev hozzászólása Szept 29, 2011 /
 
Sziasztok!

Egy új projekttel kapcsolatban próbálom összeszedni a gondolataimat, de nem találtam eddig meg minden infót.
Szóval adott egy PIC24FJ256DA210+Tft kijelző+ SD kártya + külső RAM és flash.
Az szeretném megvalósítani, hogy az SD kártyáról tudjak firmware-t frissíteni.
Arra gondoltam, hogy a bootloader (az SD rutinokkal együtt) a pic flashben lenne a többi pedig a külső falshben.
A kérdés az hogy ez megvalósítható-e? (a külső flash irás pickit 3-mal és a programrészek memóriában történő megfelelő pozicionálása)

Köszi előre is, üdv
(#) icserny válasza steev hozzászólására (») Szept 29, 2011 /
 
Futólag megnézve az adatlapot (még csak félig töltődött le): Szerintem ennek a mikrovezérlőnek nincs mikroprocesszor módja, tehát programkódot csak a beépített flash memóriában tud futtatni. A külső flash csak adattárolásra használható.

De nem is értem, hogy miért volna rá szükség. 256 kB programmemória mihez nem elegendő? S a 16 MIPS meg elegendő lesz?

A bootloaderekről itt található egy összeállítás.
(#) steev válasza icserny hozzászólására (») Szept 29, 2011 /
 
Az előző pic-es elektronikám 128x64es LCD-t és SDt kezelt, annak 144kB memóriája volt és szűk volt a hely kicsit a programnak. 256kB az nem kevés, de nem szeretném korlátok közzé szorítani magam, mert sok mindent kell a programba (SD rutinok, kijelző rutinok, betűtípusok, ikonok, stb).

A sebesség annyira nem lényeges és ebben a pic24esben van grafikai egység.

A bootloadereket már nétem, azzal a résszel nem lesz gond.

THX
(#) icserny válasza steev hozzászólására (») Szept 29, 2011 / 1
 
A betűtípusok, ikonok tárolására simán használhatod a külső memóriát, hiszen azok adatok. 256 kB memóriában egyébként már relativisztikus kvantummechanikai számításokat is végeztem (az első munkahelyi PC-nek pont ennyi volt a memóriája). Itt azért vélhetően kisebb volumenű dologról lesz szó.

Fájlkezelésre a Fatfs csomagot tartják jónak (van ennek egy lebutított változata is 8-bites mikrovezérlőkhöz). Nekem még nem volt időm/okom foglalkozni vele.
Következő: »»   1027 / 1320
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