Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   250 / 1207
(#) k válasza icserny hozzászólására (») Ápr 30, 2012 /
 
Köszi, de annyi sz... telepítettem már, ezért biztosra akarok menni.
melyik változatot töltsem le ?
lite?
standard?
(#) icserny válasza k hozzászólására (») Ápr 30, 2012 /
 
Szerintem mindegy. Én a Standard-Eva csomagot választanáml, de őszintén szólva nem tudom, hogy van-e bármi differencia a Lite változathoz képest. A letöltéshez regisztrálni kell magadat.

Csak arra ügyelj, hogy a letöltéseknél az Upgrade csomaggal ne próbálkozz, mert az licensz beszerzése nélkül nem telepíthető!
(#) k válasza icserny hozzászólására (») Ápr 30, 2012 /
 
Köszi!
Már töltöm is
(#) k válasza icserny hozzászólására (») Ápr 30, 2012 /
 
Még egyszer köszi, villog a led- mégpedig C-ben!
(#) Simon Kornél hozzászólása Máj 1, 2012 /
 
Sziasztok!

Nekem is lenne egy kérdésem. Remélem ebbe a topicba való.

Van egy 18F4550 pic-em, az első négy analóg csatornáját szeretném használni, azaz analóg jelet mérni. Most a négy analóg csatornán négy 10KOhm-os potenciométer van felrakva és azokat figyelem/szabályzom. Az a problémám, hogy a pic-ken mért feszültség eltér a voltmérőmön mért feszültségtől. Az eltérés tizedes nagyságrendű.
Nem tudom, hogy ez még belefér a tűrésbe vagy sem? Vagy én állítottam be valamit rosszul?

A potenciométereket úgy kötöttem be, hogy az egyik fix lábát a földre a másikat a +5V-ra kötöttem és a harmadik lábát egy 1KOhmo-os ellenálláson keresztül kötöttem a PIC analóg lábára, illetve egy 100n kondin keresztül a földre kötöttem.
Ezt szerintem jól kötöttem be, mert két analóg bemeneten is tudok mérni.

Az alábbi programot használom hozzá:
  1. char c;
  2. unsigned int adat;
  3. long a;
  4.  
  5.  
  6. void InitADC(void)
  7. {
  8. TRISAbits.TRISA0=1;
  9. TRISAbits.TRISA1=1;
  10. TRISAbits.TRISA2=1;
  11. TRISAbits.TRISA3=1;
  12. //ADCON1 = 0b00101100;//Analóg bemenetek beállítása
  13. ADCON0 = 0b00001000;//AN2 kiválasztása, ADC még letiltva!
  14. ADCON1 &= 0b00001100;//VREF+=VDD, VREF-=VSS (EZ LEHET, HOGY NEM SZÜKSÉGES IDE, MERT FENTEBB MÁR BE LETT ÁLLÍTVA! )
  15. ADCON2 = 0xBE;//20TAD, FOSC/64, jobbra igazítás
  16. ADCON0bits.ADON=1;//Az ADC engedélyezése
  17. }
  18.  
  19. unsigned int ReadADC(unsigned char chan)
  20. {
  21. ChangeBits(ADCON0, chan<<2, 0b00111100);
  22. ADCON0bits.GO = 1;//Start AD conversion
  23. while (ADCON0bits.NOT_DONE)//Wait for conversion
  24. {
  25. return (((unsigned int)ADRESH)<<8)|(ADRESL);
  26. }
  27. }
  28.  
  29. void outdec_(long  data, unsigned int ndigits) {
  30. static char sign, s[12];
  31. unsigned int i;
  32. i=0; sign='+';
  33.  
  34. if(data<0) { sign='-'; data = -data;}
  35.  
  36. do {
  37. s[i]=data%10 + '0';
  38.  
  39. data=data/10;
  40. i++;
  41. if(i==ndigits) {s[i]='.'; i++; }
  42.  
  43. } while(data>0);
  44. _user_putc(sign);
  45. do{
  46. _user_putc(s[--i]);
  47. } while(i);
  48. }
  49.  
  50.  
  51. void main(void)
  52. {
  53. InitializeSystem();
  54. InitADC();
  55. CVRCON = 0b10101000;
  56.  
  57. while (!usb_cdc_kbhit())
  58. {
  59. ProcessIO();
  60. }
  61.  
  62. outString("PICCOLO test p18f4550-el\n");
  63.  
  64. while (1)
  65. {
  66. do
  67. {
  68. c=usb_cdc_getc();
  69. } while (c!='#');
  70.  
  71. c=usb_cdc_getc();
  72. usb_cdc_putc(c);
  73. switch (c)
  74. {
  75. case 'A':
  76. ADCON0 = get2hex();
  77. ADCON1 = get2hex();
  78. ADCON2 = get2hex();
  79. break;
  80. case 'D':
  81. LEDport = get2hex();
  82. break;
  83. case 'H':
  84. outString("Help:\n");
  85. outString("#Akkmmnn - ADC konfigurálás\n");
  86. outString("#Dnn     - LEDport beállítása\n");
  87. outString("#H       - Help\n");
  88. outString("#L       - LED villogtatás tiltás/engedélyezése\n");
  89. outString("#Mnn     - ADC(nn) csatorna kiolvasása\n");
  90. outString("#Vkk     - VREF modul konfigurálása\n");
  91. break;
  92. case 'L':
  93. BlinkUSBStatus_enabled=!BlinkUSBStatus_enabled;
  94. if (BlinkUSBStatus_enabled)
  95. {
  96. usb_cdc_putc('1');
  97. }
  98. else
  99. {
  100. usb_cdc_putc('0');
  101. }
  102. break;
  103. case 'M':
  104. a=0;
  105. c=get2hex();
  106. usb_cdc_putc(' ');
  107. adat=ReadADC(c);
  108. out4hex(adat);
  109. a+=adat;
  110.  
  111. outString(" U=");
  112.  
  113. a=adat*4930L/1024L;
  114. outdec_(a,3);
  115.  
  116. outString("Volt");
  117. break;
  118. case 'V':
  119. CVRCON = get2hex();
  120. break;
  121. }
  122. outString("\n");
  123. }
  124. }


Remélem tudtok nekem segíteni, hogy mit ronthattam el, hogy nem pontos értéket kapok vissza.

Segítséget előre is köszönöm!
(#) trudnai válasza k hozzászólására (») Máj 1, 2012 /
 
Idézet:
„A hivatalos fordító működött két napig.”


Nem tudok erre mit valaszolni -- illetve annyit, hogy nem lehet, hogy azon a gepen egyszer mar fel volt installalva a proba valtozat?

Amugy akkor sem szabad velemenyem szerint crackelt valtozatokat telepitgetni, mivel azok csak nem kert biztonsagi reseket hagynak a gepeinken.

Na mindegy, orulok, hogy a Microchipes forditokkal sikerult elerni amit szerettel volna!
(#) Hp41C válasza Simon Kornél hozzászólására (») Máj 1, 2012 /
 
Szia!
A/D csatornaváltás után 2 * Tad időt kell várni az A/D indítása előtt.
(#) icserny válasza trudnai hozzászólására (») Máj 1, 2012 /
 
Esetleg a tisztelt felhasználó átállította a dátumot, s a program ezt "díjazta"?
(#) k válasza icserny hozzászólására (») Máj 1, 2012 /
 
Tippnek jó, de mi lenne az indíték?
Eddi - az elmúlt 23 évben - nem volt olyan alkalmazás ahol a dátumot kellet volna állítgatnom.
Még tegnap előtt sem

De azért köszi, most éppen a picula project alapjain gyakorlatozok.
(#) icserny válasza k hozzászólására (») Máj 1, 2012 /
 
Idézet:
„Tippnek jó”
Pont arra céloztam, hogy nem jó!
Idézet:
„most éppen a picula project alapjain gyakorlatozok.”
Tisztázzuk már, hogy az a 4 MHz-es kvarc komoly? Mert akkor sürgősen át kell írni a konfigurációs beállításokat.

Úgy látom, hogy nálad a LED-ek is fordítva vannak bekötve (magas szint kiadására világítanak), mint nálam. LED-villogtatásnál ez mindegy, de lesznek olyan programok, ahol zavaró lehet a fordított működés, ezért ott majd módosítani kell a programot. PICkit2-vel programozol, vagy mivel töltöd be a programot?
(#) maestro válasza maestro hozzászólására (») Máj 1, 2012 /
 
És erre tud valaki valamit mondani, hogy miért nem működik rendesen?
Vagy egy működő kódot tud valaki ajánlani?
(#) k válasza icserny hozzászólására (») Máj 1, 2012 /
 
Valóban a beépített kvarc 4 Mhz-es, de van egy foglalat, és egy jumper, és bármi mással hajthatom.
Most is így gyakorolok. (most éppen 8 Mhz)
A led villogtatásnál valóban mindegy a led bekötése, ha nem tetszik a minta azt könnyen átírom.
A billentyűzet lekérdezés egyenlőre kicsit nehezebb.
Egy után épített pickit 2-vel programozom, és általában arról kapja a tápot is.
(#) trudnai válasza maestro hozzászólására (») Máj 1, 2012 /
 
Most csak ugy feluletesen neztem at, de nyilvan mikor hozza adsz, akkor a szma nem mehet at pozitivbol negativba -- akkor mar szatural. Ha kivonsz, akkor negativbol nem mehet at pozitivba. Es szerintem amit kivonnal ill hozza adnal, annak a meretet is szabalyozni kellene.
(#) maestro válasza trudnai hozzászólására (») Máj 2, 2012 /
 
Milyen hozzáadásra gondolsz? Én csak kivonásokat csináltam.
A "MOST_H" változóra gondolsz? Mert nekem ezt +127-nél kellene megfognom és nem valami köztes értéknél (pl. 50). És elég nagy ugrások is lehetnek benne (pl. 100 után már -40 jönne).
(#) Hp41C válasza maestro hozzászólására (») Máj 2, 2012 /
 
Szia!
Kivonás után:
Pozitív számot kivonva: Meg kell vizsgálni az eredmény legfelső bitjét. Amennyiben eltér a kisebbítendőétól és 0, akkor a legkisebb negatív számmal helyettesíteni az eredményt (8 bitre 0x80, 16 bitre 0x8000).

Negatív számot kivonva: Meg kell vizsgálni az eredmény legfelső bitjét. Amennyiben eltér a kissebbítendőétól és 1, akkor a legnagyobb pozitív számmal helyettesíteni az eredményt (8 bitre 0x7F, 16 bitre 0x7FFF).

Összeadás után:
Pozitív számot hozzáadva: Meg kell vizsgálni az eredmény legfelső bitjét. Amennyiben eltér az első tagétól és 1, akkor a legnagyobb pozitív számmal helyettesíteni az eredményt (8 bitre 0x7F, 16 bitre 0x7FFF).

Negatív számot hozzáadva: Meg kell vizsgálni az eredmény legfelső bitjét. Amennyiben eltér az első tagétól és 0, akkor a legkisebb negatív számmal helyettesíteni az eredményt (8 bitre 0x80, 16 bitre 0x8000).
(#) maestro válasza Hp41C hozzászólására (») Máj 2, 2012 /
 
Bocs, de ezt nem teljesen értem.
Milyen kivonás után és milyen összeadás után?
Most írtam egy rövid kis kódot amivel megtudom állapítani, hogy jobbra vagy balra szeretne nőni a 16 bites változó értéke, vagy éppen egy helyben áll, azaz nulla. És most teszteltem túlcsordulás esetén is jól működik. Vagy nincs szükség ennek megállapítására?
Egyébként a 16 bites váltózómban az érték 3 16 bites változó összeadásával keletkezik (jó esetben itt nincs túlcsordulás).
(#) Hp41C válasza maestro hozzászólására (») Máj 2, 2012 /
 
0x7FFF + 0x7FFF = 0xFFFE és nincs átvitel, de az eredmény 16 bites előjeles ábrázolásban -2.
Telítéses összeadást végezve az előjel változott és 1 lett, korrigálni kell az eredményt 0x7FFF -re.
(#) Bukall hozzászólása Máj 2, 2012 /
 
Sziasztok!
Szükségem lenne egy "knight rider" -es futófény programjára, de olyanra, ahol az elalvó ledek fényereje fokozatosan csökken (szoftveres PWM).
Gondolom, hogy több weboldalon is van, de eddig sajnos nem találtam, csak C nyelven írt programokat.
Nekem AMS kéne! (nem c lefordítva asm-re)
Kérem, aki tud, linkeljen egyet.
Köszönöm előre is!

u.i.: annak nagyon örülnék, ha csak ezt a funkciót tudná a program, mert nem túlságosan értek a picekhez, így biztos vagyok benne, hogy nem tudnám kibogarászni a nekem szükséges részt
(#) Simon Kornél válasza Hp41C hozzászólására (») Máj 2, 2012 /
 
Köszönöm a választ, de még mindig nem pontos a mérés. Nem tudom, hogy az ADC-t jól állítottam-e be. Meg tudod esetleg nézni a programomból?
Köszi
(#) trudnai válasza maestro hozzászólására (») Máj 2, 2012 /
 
De igen, meg kell allapitani merrefele szatural... Gondolj bele: A max pozitiv ertek amit a 16 bites elojeles szamod felvehet 32768 (avagy hexaban 0x7FFF). A minimum -32768 (azaz hexaban 0x8000). Namost, felvetodik ket kerdes:

1. Honnan tudod egy szamrol, hogy az tul nagy-e, vagy tul alacsony?

2. Ahogy lathatod a hex abrazolasbol, a ket veglet eleg kozel all egymashoz... (szamabrazolasbol adodoan)

Szaturalni csak akkor tudsz, ha tudod a novekmenyt. Ha az pozitiv, akkor pozitiv iranyba szaturalsz, ha negativ, akkor negativba...

Amugy pedig ez egy eleg specialis eset, mikor a minimum ill maximum abrazolhato szamot szeretned vizsgalni. Ebben az esetben ugyanis elegendo a novekmeny utan vizsgalni az atvitelt (carry flag) es abbol megallapithato, hogy szatural-e vagy sem... Tehat pl ha mindig osszeadassal csinalod, akkor elobb megnezed, hogy tortent-e tulcsordulas, majd ha igen, akkor megnezed a novekmeny negativ-e -- ha igen akkor felveszi a -32768 -at, ha nem akkor pedig a +32767 -et...
(#) Hp41C válasza trudnai hozzászólására (») Máj 3, 2012 /
 
Idézet:
„Ebben az esetben ugyanis elegendo a novekmeny utan vizsgalni az atvitelt (carry flag) es abbol megallapithato, hogy szatural-e vagy sem... Tehat pl ha mindig osszeadassal csinalod, akkor elobb megnezed, hogy tortent-e tulcsordulas, majd ha igen, akkor megnezed a novekmeny negativ-e -- ha igen akkor felveszi a -32768 -at, ha nem akkor pedig a +32767 -et...”

Sajnos két előjeles ábrázolású pozitív szám összeadása után nem keletkezik átvitel a C jelzőbitbe, az eredmény mégis átfordulhat negatívba.
P;lda itt.
(#) maestro válasza Hp41C hozzászólására (») Máj 3, 2012 /
 
Közbe rájöttem, hogy mire gondoltál csak siettem és már nem volt időm válaszolni.
Írtam is egy kis kódot csak azzal a különbséggel, hogy az összes változó előjelét figyelem, ugyanis ha úgy csinálom ahogy te írtad, akkor az nem fog működni abban az esetben ha negatív számot adok az eredményhez.
Pl. -2+127=125
127+(-2)=125
És mind a kettő pozitív szám. Ha úgy csinálom ahogy írtad, akkor az első esetben a legkisebb negatív számmal helyettesítené az eredményt a program, míg a másodikban nem csinálna semmit. Ha jól gondolom.
Tehát a programom ami így sem működik:
  1. ;RES=A+B+C
  2. ;A+B=RÉSZEREDMÉNY
  3. ;RES=RÉSZEREDMÉNY+C
  4.  
  5. BTFSS RÉSZEREDMÉNY_H,7
  6. GOTO MAX
  7. GOTO MIN
  8.  
  9. MAX
  10. BTFSS C_H,7
  11. GOTO MAX_2
  12. GOTO TOVÁBB
  13.  
  14. MAX_2
  15. BTFSS RES_H,7
  16. GOTO TOVÁBB
  17. GOTO MAXIMALIZÁLÁS
  18.  
  19. MIN
  20. BTFSS C_H,7
  21. GOTO TOVÁBB
  22. GOTO MIN_2
  23.  
  24. MIN_2
  25. BTFSS RES_H,7
  26. GOTO MINIMALIZÁLÁS
  27. GOTO TOVÁBB
  28.  
  29. MAXIMALIZÁLÁS
  30. MOVLW D'127'
  31. MOVWF RES_H
  32. MOVLW D'255'
  33. MOVWF RES_L
  34. GOTO TOVÁBB
  35.  
  36. MINIMALIZÁLÁS
  37. MOVLW D'128'
  38. MOVWF RES_H
  39. MOVLW D'0'
  40. MOVWF RES_L
  41. GOTO TOVÁBB
  42.  
  43. TOVÁBB
  44. ...

Ez most azt csinálná, hogy ha a részeredmény "+", C is "+" és RES "-" akkor a legnagyobb számmal helyettesít. Illetve ha a részeredmény "-", C is "-" és RES "+" akkor a legkisebb számmal helyettesít.
A hiba meg az, hogy nem akar változni a felső bájt, úgy csinál mintha nem kezelné összeadáskor az átviteleket. Illetve néha bevillan egy "1"-es a felső bájtnál de utána visszamegy "0"-ba.
Szóval mi lehet a hiba?

Off: a hexától meg kíméljetek már
(#) maestro válasza trudnai hozzászólására (») Máj 3, 2012 /
 
Sehonnan nem tudom, hogy túl nagy egy szám, csak meg kellene fognom a jelet nehogy túlcsorduljon és pozitívból hirtelen negatívba menjen át. Egyébként egy integrátorhoz kellene a szaturáció.
De mint írtam azt sikerült megcsinálnom, hogy kijelezzem merre fele haladnak a számok, pozitívba vagy negatívba mégsem értem el vele nagy áttörést.
(#) Hp41C válasza maestro hozzászólására (») Máj 3, 2012 /
 
Szia!

Még két hozzászólással visszaolvasva... Különbséget kell tenni, hogy pozitív vagy negatív számot adunk hozzá az előző eredményhez.
-2+127=125
Idézet:
„Összeadás után:
Pozitív számot hozzáadva: Meg kell vizsgálni az eredmény legfelső bitjét. Amennyiben eltér az első tagétól és 1, akkor a legnagyobb pozitív számmal helyettesíteni az eredményt (8 bitre 0x7F, 16 bitre 0x7FFF).”

Nézzük, az eredmény előjele eltér az előző eredményétól (-2), de az előjel bit értéke 0, így a 125 jó eredmény, nem kell telíteni.
127+(-2)=125
Idézet:
„Negatív számot hozzáadva: Meg kell vizsgálni az eredmény legfelső bitjét. Amennyiben eltér az első tagétól és 0, akkor a legkisebb negatív számmal helyettesíteni az eredményt (8 bitre 0x80, 16 bitre 0x8000).”

Nézzük, az eredmény előjele nem változott, nem kell telíteni.

-126 + (-126)= 4
Most az eredmény előjele nem egyezik a kiinduló érték előjelével, az előjelbit értéke 0, helyettesíteni kell -127 -tel.

Vagy 127 + 127 = 254
Az eredmény előjele eltér az előző eredményétól (127), és az előjel bit értéke 1, így helyettesíteni kell 127 -tel.

Windows calculator - hex....
(#) Hp41C válasza Hp41C hozzászólására (») Máj 3, 2012 /
 
Idézet:
„helyettesíteni kell -127 -tel”

Helyett:
helyettesíteni kell -128 -tel
(#) Zsora válasza maestro hozzászólására (») Máj 3, 2012 /
 
Le tudnád pontosan írni hogy mi a feledat? Addig érthető hogy 16-bites számok túlcsordulását szeretnéd elkerülni (telítődéssel). A minimum és maximum értékek azok a 16-bites 2-es komplemens ábrázolás szélsőértékei, igaz? ($8000 ill. $7FFF, azaz decimális -32768 ill. +32767)
De honnan jönnek ezek a számok? Ez egy adatfolyam?Ezek eleve 16-bitesek? Abszolút értékek vagy növekmények? Van valami kezdőérték, ahonnan indul a folyamat? Van esetleg maximális értéke a növekményeknek (különbözetnek)?
(#) maestro válasza Hp41C hozzászólására (») Máj 3, 2012 /
 
Helló!

Így már oké, csak félre értelmeztem a mondatot, úgy értelmeztem, hogy neked az első tag az amit hozzáadsz, de mindegy, most már értem. Akkor ugyanazt a kódot írtam meg elvileg amit írtál. A kódot átnézted? Szerinted az jól van?

"Windows calculator - hex...."
Tudom, azt használom csak minek nyissam meg mindig ha decimális számokkal fejben is megy nagyjából.
(#) maestro válasza Zsora hozzászólására (») Máj 3, 2012 /
 
Igen, azok lennének a szélsőértékek. A számok 3db 16 bites változó összegéből keletkeznek aminek tagja hol negatívak, hol pozitívak lehetnek. Kezdeti állapotban mindenki nullán van és külső megszakításkor megváltozik pl. az egyik változó értéke és a ciklus végén a jelenlegi eredményt egy előző értéket tartalmazó változóba tárolom el és így szépen magától nő a változó értéke minden ciklus lefutásakor, mivel az összegzésnél a tagok között szerepelnek az előző értékek is. Röviden ennyi.
(#) Zsora válasza maestro hozzászólására (») Máj 3, 2012 /
 
Mi ez a 3 változó és mire kell? Miért kell őket összeadni? Mit akarsz ezzel az egész dologgal megvalósítan? Ha ismernénk a célt, ill. a rendelkezésreálló eszközöket, akkor könnyebben meg tudnánk határozni a módot.
(#) bankimajki hozzászólása Máj 3, 2012 /
 
Sziasztok, után épített PICKIT 2-vel szeretnék felprogramozni egy 18F25K80-as MCU-t, de nem látja. És a PICKIT2 szoftverben sem látom ezt a kontrollert. Lehet frissíteni a PICKIT2 programját hogy tudja ezt a kontrollert is programozni?

Üdv.: Miki
Következő: »»   250 / 1207
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