Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   886 / 1319
(#) Attila86 válasza watt hozzászólására (») Jan 13, 2011 /
 
Földre kötöttem, Icserny mondta.
(#) watt válasza Attila86 hozzászólására (») Jan 13, 2011 /
 
Én úgy látom, azt vezérelni kell. Próbáld meg, hogy kitolsz egy adatot, majd kézzel leviszed testre, majd vissza. Meg kell jelenjen az adat.
Ha folyamatosan testen van, szerintem nem történhet semmit, mert a latch nagy valószínűséggel lefutó élre érzékeny. Persze lehet, hogy tévedek, de ha nem lenne rá szükség, minek tették volna rá!?
(#) Attila86 válasza watt hozzászólására (») Jan 13, 2011 /
 
Itt is földön van:
Bővebben: Link
Meg itt is:
Bővebben: Link

De amúgy próbáltam azt is hogy kézzel levittem egy kicsit a földre. Semmi nem változott sajnos. :no:
(#) watt válasza Attila86 hozzászólására (») Jan 13, 2011 /
 
Akkor tényleg nem tudom minek tették rá azt a lábat...

Nehéz egyébként elhinni, hogy rossz az IC, de nem zárható ki.
(#) icserny válasza Attila86 hozzászólására (») Jan 13, 2011 /
 
Az adatlap írja (6.1 alfejezet): "Note that LDAC is active-low. If desired, this input can be tied low to reduce the required connections from 4 to 3. Write commands will be latched directly into the output latch when a valid 16 clock transmission has been received and CS has been raised."

Az LDAC bemenet előnyét pedig a 6.1 ábrán mutatja: két vagy több DAC frissítését lehet vele szinkronizálni (kettős bufferelés).

Attila, a PICkit2 Logikai analizátor módjában ellenőrizted már a jeleket? CS akkor mehet vissza magas szintre, ha pontosan 16 db. órajel érkezett!

Egy aktuális kapcsolási rajzot azért mutathatnál!
(#) Hp41C válasza Attila86 hozzászólására (») Jan 13, 2011 /
 
Szia!

- Milyen szint mérhető a VrefA és VrefB lábakon?
- Milyen szint mérhető a SHDN lábon?
- Nincsenek nagyon megterhelve a kimenetei?

A PICKit2 Logikai analizátorával vedd fel a jelalakokat...

A feltöltött kódommal hibamentesen kezelek MCP4922 -t 18F2523-nal 40MHz órajellel. LDAC nálam is a földre van kötve...
(#) Jossz hozzászólása Jan 14, 2011 /
 
Sziasztok!
Kis segítséget szeretnék kérni. Eddig főként PIC18F sorozattal dolgoztam, mostanában térek át a 16 bitesekre, nevezetesen jelenleg dcPIC30F4011 és PIC24HJ128GP504 MCU-kal dolgozom, ill. tanulom a lelkivilágukat. A külső kvarcoknál ill. az oszcillátor konfigurációknál akadtam meg kissé. A másodlagos kvarcot érteni vélem, mert ugye oda akkor rakok 32,768 kHz-es kristályt, ha óra és dátum funkciót akarok használni. No de mi határozza meg, hogy az elsődleges oszcillátornál a belső 7,37 MHz-es FRC oszcit használom, vagy külső kristályt rakok XT, vagy HS konfigurációban? Nem igazán tudom hova tenni a dolgot. Talán az dönti el, hogy az osztókkal előállítható frekvenciát mekkorának akarom? Vagy valami más elv a kulcs? Meköszönném, ha valaki megvilágosítana... :nemtudom: (egyébként C30 compilerrel dolgozom)
(#) icserny válasza Jossz hozzászólására (») Jan 14, 2011 / 1
 
Idézet:
„mi határozza meg, hogy az elsődleges oszcillátornál a belső 7,37 MHz-es FRC oszcit használom, vagy külső kristályt rakok XT, vagy HS konfigurációban?”
Természetesen te döntöd el, hogy mit akarsz használni! Célszerű bekapcsoláskor a belső FRC óráról indulni, s a 7,37 MHz-es alapfrekvencián ketyegve beállítani a PLL osztókat (figyelembe véve az előírt határokat), s végül átváltani az üzemmódot.

Ha jól emlékszem, 8 MHz-es kristályig XT, azon felül HS módot kell választani.

A PIC24HJ128GP504 mikrovezérlő esetében a PIC24H Family Reference Manual 39. fejezetét kell nézni.

A PIC-kik projekt mintapéldáinál a LED villogtatása II. bemutatja, hogy a belső oszcillátort hogy lehet beállítani ~80 MHz-re.

A külső oszcillátorok használatához az include/pic24_clockfreq.h és a common/pic24_clockfreq.c állományokat kell áttanulmányozni. Az utóbbi legvégén található például az az eljárás, ami 16 MHz-es kvarchoz állít be 80 MHz-es CPU frekvenciát. A PIC-kwik projekt sok automatizmust tartalmaz, csak a CLOCK_CONFIG szimbólumot kell beállítani a pic24_libconfig.h megfelelő sorának aktiválásával (ha nincs definiálva, akkor FRCPLL_FCY40MHz az alapértelmezett), s a többit a makrók elvégzik a főprogram elején kiadott configClock() vagy configBasic(HELLO_MSG) függvényhívás hatására. Természetesen az utóbbi is a configClock()-ot hívja meg belül...
(#) Sanyi806 hozzászólása Jan 14, 2011 /
 
Sziasztok!

Először is had mondjak köszönetet mindenkinek! -hogy türelmes volt hozzám, és segített. Sikerült megoldani az ADC konvertálást.
Ideiglenes: jogos, amit írtál, hogy túlléptem az int16 -os korlátot, de én mint kezdő PIC-es józan paraszti ésszel belegondolva azt hittem, elég az int16, hiszen az osztás szorzás végértéke bőven belefér a határba. A fene gondolta, hogy így dolgozik:
int16 X;
Ezt szeretném kiszámolni: X = (4090 * 100) % 4095;
Első lépés: X = 409000; (4090 * 100)
Második lépés: X = 3595; (409000 % 4095)

Logikusan úgy gondoltam, hogy nem rakja bele a részeredményt a végeredmény változójába, hanem valamelyik felhasználói memória területen tárolja ideiglenesen; mint a "magas szintű nyelvek"(Delphi,stb.).
A jó kód:
  1. Struct ADC_Record {
  2.  Unsigned Int8 Volt[5];
  3. }ADC_Var;
  4.  
  5. Void Convert_To_Volts(Long Int Data){
  6. Unsigned Int32 Tmp; /* ! Nem Int16 ! */
  7. ADC_Var.Volt[0] = (Data * 5) / 4095 +'0';
  8. ADC_Var.Volt[1] = '.';
  9.  
  10. Tmp = (Data * 5)  % 4095;                           /* 0..4095  Tmp  MOD     */
  11. ADC_Var.Volt[2] = (Tmp  * 10) / 4095 +'0';          /* 0..9     Tmp2 DIV     */
  12. ADC_Var.Volt[3] = ((Tmp * 100) / 4095) % 10 +'0';   /* 0..9     Tmp3 DIV MOD */
  13. ADC_Var.Volt[4] = '\0';
  14. }

Ez a CCS büntetése? -ahogy watt írta, vagy minden PIC/fordító így dolgozik?
Az MPLAB-ot feltettem, megtalálta magától a CCS-t, de nem kezeli a CCS programomat, pedig már ezt is átnéztem itt.
Nagyon sok eltérés van illetve nehezebb az MPLAB a CCS-nél? -mert ha nem veszélyes a különbség, inkább áttérek, ott is lehet C-ben írni, de láttam egy két igen furcsa regisztert és hasonlót. Mert ahogy itt és máshol is olvasgatom, sokkal jobb, csak félek a sok TMR0 regisztertől....
Köszönöm!
Sanya
(#) szilva válasza Sanyi806 hozzászólására (») Jan 14, 2011 /
 
Ez nem a CCS hülyesége, gyakorlatilag a C nyelv ilyen. Egy kifejezés kiértékelésekor az operandusok közül a "nagyobb hosszúságú"-ra konvertálja a "rövidebbeket" és az eredményt a "hosszabbik" hosszában számolja ki. Ezért ha pl. i egy 16 bites int, akkor az (i * 4095) 16 biten fog kiszámolódni, ugyanis a 4095 konstans is belefér 16 bitbe. Ha viszont (i * 4095L) -t írsz, vagy ( ((long) i) * 4095 )-öt, akkor már a részeredményt 32 bites long-ban kellene kiértékelnie, és nem veszne el adat.

Persze a különböző C fordítók között lehet különbség az int, long és egyéb típusok szóhosszúsága között, tehát azt, hogy az adott fordítón konkrétan mi történik csak akkor tudja megmondani az ember, ha utánanéz a fordító által kezelt típusoknak. Az egyik példában a sok zárójelet sem véletlenül tettem ki: így biztos a kiértékelés sorrendje, és az, hogy a casting mire vonatkozik. De ezek mind C-s kérdések, és nem sok közük van a mikrovezérlőkhöz, a PIC-hez.
(#) Hp41C válasza Sanyi806 hozzászólására (») Jan 14, 2011 /
 
Szia!

A CCS oldalán ott van a hiányzó láncszem... A MpLab plugin. Töltöd le, installáld, az MpLab segítségével hozz létre egy projectet a feladathoz, amiben a CCS nyelvi környezetet válsztod ki, és a programodat add hozzá a projecthez. Ellenőrizd le a fordító elérési útjainak beállítását.
Ezután az MpLab környezetben tudod fordítani a CCS programot.
Válaszd ki a MPLAB Simulator -t debuggernek. Fordítsd újra a programot.
Ezek után lépésenként is tudod futtatni a programodat ...

A magasabb szintű nyelvek sem használnak általában az operandusoknál nagyobb szóhosszúságot a számításhoz. Kivétel persze van (basic, ..), azok mindent float / real -ban számítanak és a számolás végén konvertálják az eredményt a kimeneti változó típusára. Ebben az esetben rengeteg kerekítési hiba keletkezhet a számítás során...
(#) Sanyi806 válasza Hp41C hozzászólására (») Jan 14, 2011 /
 
Sziasztok!

Köszönöm a válaszokat!
szilva: értem mostmár a számítási "problémámat", és elnézést, hogy itt kérdeztem erről, ez valóban C tropic.
Hp41C: fent van a plugin, minden úgy van, ahogy írtad, (de nem fordul, a void main sornál error) kivéve talán "Ellenőrizd le a fordító elérési útjainak beállítását." -nem csak a ccs.exe kell neki?-mert a weboldalukon csak azt mutatja, de majd szétnézek ezügyben.
Számítás Delpiben:
procedure ...
var egesz, tized, szazad: byte;(0..255)
Tmp: word; (0..65535)
és gond nélkül leszámolja, ezért nem értettem a dolgot, de ez már valóban nem ide tartozik.
(Jövőhéten I2C és SPI vel jövök vissza )
Köszönöm Mindenkinek, sok mindent megtanultam!
Sziasztok!
Sanya
(#) watt válasza Sanyi806 hozzászólására (») Jan 14, 2011 /
 
Szia! A CCS büntetését úgy is értettem, hogy ha nem olyan fejlesztő környezetet választ valaki, amit sokan használnak, pl. Hi-Tech, mcc18 és a többi microchip által támogatott fordító, akkor úgy járhat, hogy kevesebben tudnak segíteni. Én is ajánlottam a szimulációt, egyből kiderült volna hol a turpisság! De konkrét segítséget nem tudtam adni, mert soha nem használtam a CCS és nagy valószínűséggel nem is fogom.
A C változó típusaíról még annyit, hogy ha valaki C-vel kezd PIC-et tanulni, így jár. Ha ASM-on nevelkedtél volna, belelátnál a C vénájába és tudnád, hogy a dolgok nem úgy működnek, hogy
x=gyök(25^3/2,345001522) Ez akkora kódot is eredményezhet, hogy egy kisebb PIC tele lesz 4-5 ilyen számítással...
(#) Jossz válasza icserny hozzászólására (») Jan 14, 2011 /
 
Köszi István, nagyon sokat segítettél!
Egyszerűen abban voltam bizonytalan, hogy mi a meghatározó irányelv ebben a dologban.
A PIC-kwik projektet sűrűn "forgatom", nagyon sokat tanultam már eddig is belőle, és még csak kis részén vagyok túl, (hadd dícsérjelek szembe :rolleyes többet ér, mint sok szakkönyv...
Dupla feladatot csináltam magamnak, mert nemcsak MCU családot váltottam, hanem nyelvet is, eddig CCS C-ben dolgoztam. Így azután néha (jelenleg még elég sűrűn) csak kapkodom a fejemet...
Még egyszer is köszi a gyors segítséget !
(#) Bago válasza Baxi hozzászólására (») Jan 14, 2011 /
 
Szia.
Sajnos egyszer már én is jártam így.
Valamit elrontottam az elektronikán, azután a PIC csak olvasható lett. Az elsőnek beleírt program futott, fut még most is. Olyan, mintha a törlés működne, de mégsem törlődik a tartalom.
(#) Jossz válasza icserny hozzászólására (») Jan 14, 2011 /
 
István, még egy kérdés... Olvasgatom a 39. fejezetet és azt olvasom, hogy az FRC esetében nyilván a hőmérséklet és a feszültség befolyásolja a frekvencia értékét, ill. ingadozását. Ezek szerint arra gondoltam, hogy tehát akkor használok FRC-t, ha kisebb órajel-pontosságú feladatokat kell megvalósítani, pl. LED kezelés, LCD kezelés, nyomógomb figyelés, stb. Ha viszont mondjuk egy nagy felbontású AD konverzió a feladat, akkor érdemesebb XT, vagy HS módban külső kristályt alkalmazni, igaz? Hiszen mindkét módon elő lehet állítani pl. 40MHz órajelet, de az már nem mindegy, hogy az mennyire lesz stabil. Jó gondolkodom az alkalmazást illetően, vagy eltévedtem?
(#) trudnai válasza Sanyi806 hozzászólására (») Jan 14, 2011 1 /
 
Idézet:
„(de nem fordul, a void main sornál error)”


Mi a hibauzenet? Es hol van a kerdeses sor?
(#) trudnai válasza Jossz hozzászólására (») Jan 14, 2011 /
 
A/D-hez nem az orajelnek kell pontosnak lennie, hanem a feszultseg referencianak, ill a vonali zajoknak kellene minel kisebbnek lenniuk.

Pontos ora mashoz kellhet, pl asynchron soros kommunikaciohoz (ld. meg USB, RS232), ha ebreszto orat szeretnel megvalositani, ha frekvencia merot, VFO-t stb tehat mind ahol a valos eletben is kritikus lehet az idozites.
(#) vilmosd válasza Bago hozzászólására (») Jan 14, 2011 /
 
Idézet:
„azután a PIC csak olvasható lett”
Akkor ez PIC16Cxx tipusu volt, vagy esetleg AVR. Meg nem lattam olya "flash" picet, amit nem lehet torulni.
(#) Jossz válasza trudnai hozzászólására (») Jan 14, 2011 /
 
Ok, köszi, természetesen igazad van az A/D-vel kapcsolatban, igazából azt akartam kifejezni, hogy ha pontosan mindig ugyanakkor akarok mintát venni valami miatt, akkor érdekes a pontosság...
De akkor végül is jól látom az FRC, ill. a külső kristály választásának lényegét, hogy az a kívánt pontossággal függ össze?
(#) icserny válasza Jossz hozzászólására (») Jan 14, 2011 /
 
Idézet:
„De akkor végül is jól látom az FRC, ill. a külső kristály választásának lényegét, hogy az a kívánt pontossággal függ össze?”
Igen, a pontossággal.
(#) Jossz válasza icserny hozzászólására (») Jan 14, 2011 /
 
Köszönöm, megnyugodtam...
(#) trudnai válasza Jossz hozzászólására (») Jan 14, 2011 /
 
Igen, egy kristaly oszcillator mindig pontosabb lesz, mint egy RC. De van a belso oszcillatorra nemi tuningolasi lehetoseg, amivel el lehet +-10% iranyba huzni a frekit ha pontatlan.
(#) Hp41C válasza Sanyi806 hozzászólására (») Jan 14, 2011 /
 
Szia!

A PC processzora 16 (8068 - 80286), 32 (80386 - Pentuim.. ), 64 bites. Külön előlködni kellene a 8 bites műveletek elvégzéséért. A pic-ed csak 8 bites, így a 16 vagy a 32 bites műveleteket 8 bitesekre vezeti vissza. A programhely korlátozott volta miatt a lehető legkevesebb műveletre (próbálnak) fordítani....

A példád kapcsán letöltöttem és installáltam a plugin -t, működik. A project létrehozásánál be kell állítani a használt pic típusát... Gyanúsan viselkedik, ha eltérő a kontroller típusa az MpLab -ban és a CCS forrásban...
(#) promax hozzászólása Jan 14, 2011 /
 
az udata_acs direktívát próbálgatom és a következő érdekességet találtam az alábbi kódban:
  1. udata_acs
  2. a       res 2
  3. b       res 1
  4.  
  5.        
  6.         code
  7.         movlw   h'55'
  8.         movwf   a
  9.         movff   a,b
  10.         movlw   h'10'
  11.         movwf   a+1

Fordítás után a .lst file a /movwf a/ ra 6E??, a /movff/ re c??? - f???, a /movwf a+1/ re 6e?? et fordított. Simulátorral kipróbáltam, a program jól működik. A .hex ből visszafejtve a kérdéses sorokon 6e?? helyén 6e00, c??? helyén c000, f??? helyén f002, 6e?? helyén 6e01 volt. Ez utóbbi érthető, és rendben is van. De akkor milyért jelent meg kérdőjel a .lst filében az változók címeinek helyén? Lényegében azt szerettem volna látványosan kipróbálni az udata_acs hova is helyezi a változóit. Úgytudom access ram....nem ez a kérdés alapvetően, hanem miként foglalják el helyüket a file regiszterekhez képest. Továbbá mekkora maximális res után megadható érték.
(#) Hp41C válasza promax hozzászólására (») Jan 14, 2011 / 1
 
Szia!

A hex előállítása több lépésben történik:
- asm | c | stb. -> object : Fordítás : Ebben a menetben készül a lista, de kkor még nem ismertek egyes címek a relokálható kódban.
- obj -> hex : linkelés : A relokálható modulokat a linker helyezi el a memóriá(k) ban, ekkor kapják meg a relokálható címkék az értéküket.
(#) icserny válasza promax hozzászólására (») Jan 14, 2011 / 1
 
Idézet:
„miért jelent meg kérdőjel a .lst filében az változók címeinek helyén?”
Mert nem fordításkor, hanem linkeléskor dől el, hogy mi hová kerül (ebbe az .lkr linker állománynak is van beleszólása...).

Az udata_acs az Acces Blokk-ban történő elhelyezést írja elő. Mikrovezérlője válogatja, hogy 0-7F vagy 0-5F a Data RAM-ba eső terjedelme. Ennél nagyobb számot biztosan nem írhatsz a "res" után.
(#) Jossz válasza trudnai hozzászólására (») Jan 14, 2011 /
 
Ezt az OSCTUN regiszterrel lehet megtenni, ugye?
Jelenleg nekem a legpontosabb feladat egy szoftveres UART kommunikáció lesz 19200 Baud sebességgel. Ahhoz elegendő lehet az FRC pontossága?
(#) icserny válasza Jossz hozzászólására (») Jan 14, 2011 /
 
Igen, OSCTUN. A korábban már említett pic24_clockfreq.c állományban ez így néz ki:
  1. _TUN = -15;


A -15 helyett lehet más értékkel próbálkozni...
(#) promax válasza icserny hozzászólására (») Jan 14, 2011 /
 
köszi.
Következő: »»   886 / 1319
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