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   733 / 1210
(#) cross51 hozzászólása Dec 14, 2015 /
 
Sziasztok!

Elkezdenék foglalkozni a PIC32-vel, de már is problémám akadt.
A probléma az lenne, hogy rá akarok írni kezdésnek egy LED villogtató programot, de az MPLAB X mindig hibaüzenetet dob:
Idézet:

Failed to program device
Selected device and target: memory mismatch.”


A PIC-et felismeri és neki is kezdene a programozásnak, de mindig ez a hibaüzenet fogad.
Itt találtam rá hibalehetőséget és az lenne a kérdésem, hogy ez tényleg okozhatja a hibát, hogy nem megfelelő kondi van a VCAP lábon? Gondolom azért mert (doksiban láttam) itt a processzoron keresztül történik a flash írása.
A hozzászólás módosítva: Dec 14, 2015
(#) cassis hozzászólása Dec 14, 2015 /
 
A PICKIT2 vel történő programozása kapcsán vetnék fel egy gondolatot. Mi van akkor ha a PIC -ben olyan program fut amely kimenetnek definiálta a programozói lábait és a PICKIT 2 éppen vele szembe fel van dugva? Nem sérül ettől valamelyik?
Megnéztem a PICKIT2 kapcsolási rajzát, és ez nem nyugtatott meg. Lényegében egy sorosan kapcsolt 10 és 33 Ohm -on keresztül néznek szembe a portok. Ez nem igazán védne meg a kritikus áramoktól.
Persze lehet olyan üzemmódja a rendszernek, hogy a PICKIT2 ha éppen nem programoz a beépített PIC lábak bemenetnek definiáltak. Ha meg programoz csak az MCLR aktivitása után válik kimenetté a PGD és a PGC.
Szóval kell aggódni amiatt hogy a PIC ben futó program zavarhatja a PICKIT2 -t?
(#) Pali79 válasza (Felhasználó 15355) hozzászólására (») Dec 14, 2015 /
 
Azért ez így nem teljesen igaz! A PK2 saját programjával az Tools menü "Use Vpp First Program Entry" opciójával ekkor is működik a programozás. Másik jól működő megoldás lehet, hogy a program legelejére egy 1 másodperces késleltetést teszel minden előtt. Mire ez lejárna addigra belép a programozásba és nem kavar be semmi.
(#) cassis válasza (Felhasználó 15355) hozzászólására (») Dec 14, 2015 /
 
Ez rendben. De külső órajelről megy, végeredményben azon tűnődöm lehet -e PGEDx és PGECx lábakat általános I/O ként is konfigurálni, miközben a PICKIT2 a rendszeren marad. Eddig mindig "megúsztam" azzal, hogy a kimenetként definiált portokat Low ba állítottam Most viszont a kevés I/O láb miatt szükséges lesz használni PGEDx és a PGECx. et is.
(#) Zsora válasza apromax hozzászólására (») Dec 14, 2015 /
 
Én is pont erről az esetről beszéltem.
A szolga ilyenkor minden adatot vesz, viszont bármilyen zavar az SCK vagy SDI lábon a szinkron elvesztését okozza. Az /SS jel szolgál(na) a szinkronizálásra.
(#) brato hozzászólása Dec 15, 2015 /
 
Üdv!

Ha 16F690 belső oszcillátorról megy és RA0,RA2 port analóg akkor lehet használni a RA4, RA5 portot digitális kimenetnek?
(#) cross51 válasza brato hozzászólására (») Dec 15, 2015 /
 
Nem tudom pontosan nem ismerem a PIC-et, de valószínűleg le kell tiltani az RA4-et mint OSCOUT és utána használhatod őt is I/O-nak az RA5-el nem kell semmit csinálni.

Szerk.: csak a TRIS biteket kell beállítani, hogy kimenetek legyenek.
A hozzászólás módosítva: Dec 15, 2015
(#) Bakman válasza brato hozzászólására (») Dec 15, 2015 /
 
Igen.
(#) brato válasza Bakman hozzászólására (») Dec 15, 2015 /
 
Szimulátorban próbálom de sehogy nem akar digitálisra állni.
  1. TRISA          = %00000101                          
  2. TRISB          = %00000000                          
  3. TRISC          = %00111000                          
  4. ANSEL          = %00000101
  5. ANSELH         = %00000000

ezeket a beállításokat használom.
Mit nem állítok jól be?
(#) Bakman válasza brato hozzászólására (») Dec 15, 2015 /
 
Kicsit bőbeszédűbb leírás segítene. Milyen szimulátor? Mi a konkrét hibajelenség? Mi van a programban? Stb.
(#) brato válasza Bakman hozzászólására (») Dec 15, 2015 /
 
A szimulátor proteus, a hiba az az, hogy a RA4,RA5 analóg marad, a program feldolgoz egy gombnyomást majd a ra4- re magas szintet kellene adjon. A RA0,RA2 feszmérést csinál az jól működik.
(#) Hp41C válasza brato hozzászólására (») Dec 15, 2015 / 1
 
A konfigurációs szót milyem értékre állítottad?
Idézet:
„INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN”
(#) brato válasza Hp41C hozzászólására (») Dec 15, 2015 /
 
Köszönöm, az oszcillátor beállításnál volt a hiba. INTOSC volt beállítva INTOSCIO helyett.
(#) ativagyok hozzászólása Dec 17, 2015 /
 
Sziasztok!

Egy PIC16F1613 PIC-kel szeretnék PWM szabályzást megvalósítani, de valamiért semmi áron nem akar PWM jelet adni a kimenetein.
Mindkét PWM modult használni szeretném, amik az RC5 és RC3 lábon érhetők el.
A MikroC beépített függvényét használom, amit már számtalanszor használtam eredményesen, nem hinném hogy azzal lehet gond.
A kimeneten néha magas szint, néha alacsony szint jelenik meg teljesen véletlenszerűen.
Sajnos nincs több ötletem, ezért nagyon örülnék ha valaki tudna segíteni.

  1. void main() {
  2.  
  3. OSCCON = 0xEA;
  4. TRISA =  0x00;
  5. TRISC0_bit = 0x01;
  6. TRISC1_bit = 0x01;
  7. TRISC2_bit = 0x01;
  8. TRISC3_bit = 0x00;
  9. TRISC4_bit = 0x00;
  10. TRISC5_bit = 0x00;
  11.  
  12. CM1CON0 = 0x00;                       // Disable comparators
  13. CM2CON0 = 0x00;
  14.  
  15. ANSELA = 0x00;
  16. ANSC0_bit = 0x01;
  17. ANSC1_bit = 0x01;
  18. ANSC2_bit = 0x01;
  19. ANSC3_bit = 0x00;
  20.  
  21. CCP2SEL_bit = 0x00; // CCP2 function is on RC3
  22.  
  23. ADC_Init();  // Initialize ADC module with default settings
  24.  
  25. PWM1_Init(5000); // Init PWM module with 5kHz
  26. PWM1_Start();    // Start PWM
  27. PWM1_Set_Duty(512);    // Duty cycle = 50%
  28.  
  29. PWM2_Init(5000);
  30. PWM2_Start();    // Start PWM
  31. PWM2_Set_Duty(512);    // Duty cycle = 50%

}
(#) Hp41C válasza ativagyok hozzászólására (») Dec 17, 2015 / 1
 
Idézet:
„void PWM1_Set_Duty(unsigned short duty_ratio);
Sets PWM duty ratio. Parameter duty takes values from 0 to 255, where 0 is 0%, 127 is 50%, and 255 is 100% duty ratio. Other specific values for duty ratio can be calculated as (Percent*255)/100.”

Idézet:
„PWM1_Set_Duty(512); // Duty cycle = 50%”

Olyan, mintha
  1. PWM1_Set_Duty(0);    // 512 & 0xFF = 0x00

írtál volna.
(#) ativagyok válasza Hp41C hozzászólására (») Dec 17, 2015 /
 
Köszönöm a gyors választ.
Már próbáltam kisebb értékekkel, de sajnos nem lett jó. Jelenleg így próbálom:
  1. PWM1_Init(5000); // Init PWM module with 5kHz
  2. PWM1_Start();    // Start PWM
  3. PWM1_Set_Duty(127);    // Duty cycle = 50%
  4.  
  5. PWM2_Init(5000);
  6. PWM2_Start();    // Start PWM
  7. PWM2_Set_Duty(127);    // Duty cycle = 50%

Az eredmény: Az RC5 lábon alacsony szint, az RC3 lábon magas szint van, de nem PWM.
Az errata-ban ír valamit a CCP modulról, de sajnos nem teljesen tiszta számomra.
(#) Prendick válasza ativagyok hozzászólására (») Dec 17, 2015 / 1
 
Szia!
Ennél a picnél teljesen használhatatlan a mikroc-s függvény. Annyira átírták a CCPxCON struktúráját, hogy össze-vissza kever mindent. Például a 7-6 bit kapcsolja a pwm modult és a lábakat, amit a függvény egyből kinulláz. Már nem ebben a regiszterben van a duty LSB-je, helyette itt állítható, hogy milyen módon kezelje a két nyolc bites beállító regisztert. És persze nem kezeli azt sem, hogy pl. a CCP2-höz ne a TMR2-t rendelje hozzá, mint az 1-eshez, hanem a 4-6 valamelyikét.
Sajnos itt kézzel kell megcsinálni a pwm-kezelést.
(#) ativagyok válasza Prendick hozzászólására (») Dec 17, 2015 /
 
Szia!
Köszönöm a válaszod.
Ez esetben inkább választok egy másik kontrollert hasonló lábkiosztással.
Mire figyeljek, van esetleg egy széria, amit ilyen módosított regiszterekkel gyártottak?
(#) Prendick válasza ativagyok hozzászólására (») Dec 17, 2015 / 1
 
Az újak már egyre inkább ilyenek lesznek. De pl. a 1823-as még a régi szisztéma, a 616-os meg egészen az. Egyszerű megnézni. Ha az adatlapban a CCPxCON felső két bitje P1M, akkor az a régi és megy vele a függvény, ha EN OE, akkor nem.
Sajnos van még több hiba is. Az 1xxx pic-eknél már aktív a TxCON alsó bitje is (korábban az mindegy volt), emiatt előfordulhat, hogy rossz osztót állít a függvény.
A hozzászólás módosítva: Dec 17, 2015
(#) ativagyok válasza Prendick hozzászólására (») Dec 17, 2015 /
 
A nyákot már legyártottam, ezért korlátozva vagyok SOIC 14-es tokra, és minimum 2 CCP modul kellene. Ezeknek eleget téve a 1824-et találtam megfelelőnek, azonban a TxCON alsó bitje ennél is aktív.
Legalább már tudom, hogy mire kell figyelni.
(#) Prendick válasza ativagyok hozzászólására (») Dec 17, 2015 / 1
 
Arra azért vigyázz, hogy mindkét CCP alapból a TMR2-t használja, vagyis ha eltérő frekvenciát állítasz be, nem fog rendesen menni. Az utoljára beállított lesz az igaz mindegyikre.
A függvény meg csak a TMR2-t kapcsolgatja mindegyiknél akkor is, ha a CCPTMRS0-t átállítod.
(6.0-ás mikroc-nél így van. Lehet, hogy már kijavították, de még nem néztem meg.)
(#) Hp41C válasza ativagyok hozzászólására (») Dec 17, 2015 /
 
Inkább írd meg azt a három függvényt a 16F1613 -ra.
(#) don_peter válasza ativagyok hozzászólására (») Dec 17, 2015 /
 
Mi a bajod azzal, ha azt a pár sort te írod meg?
Egyszer úgy is meg kell tanulnod, mert előbb utóbb még szükséged lehet ilyesmire.
Adatlap biztosan segíteni fog, hogy melyik regisztereket kell állítanod és mire..
Ne félj tőle..
(#) ativagyok hozzászólása Dec 17, 2015 /
 
Prendick:
Egyforma frekvenciát használok mindkettőnél, csak a kitöltési tényező változik.
Köszönöm, hogy megemlítetted, később hasznos infó lehet.

Hp41C & don_peter: Valóban hasznos lenne megírnom, de sajnos most idő híján a gyorsabb megoldást kellett választanom.
(#) cross51 hozzászólása Dec 17, 2015 /
 
Sziasztok!

Még régebben csináltam egy I2C-s LCD vezérlőt(slave i2c) és nem figyeltem, hogy hiába veszi az adatot NACK-al tér vissza. Elkezdtem utána járni és elég lehetetlen dolgot találtam.
Idézet:
„There are certain conditions where an ACK will not be
sent by the slave. If the BF bit of the SSPSTAT register
or the SSPOV bit of the SSPCON1 register are set
when a byte is received.”


Ebből számomra a lényeg az volt, ha a BF bit 1 akkor és a 9 órajel jön akkor NACK-al tér vissza.
Utána jött a kommunikáció kép és azon az látszik hogy a 8 órajel utána az adat vagy cím vételével a BF bit = 1 és csak a 9 órajel után keletkezik a megszakítás.

Ez számomra érthetetlen, hogyan oldhatom meg, hogy megszakítással használjam az i2c-t de ne NACK-ot küldjön mikor tisztán veszi az adatot?

i2c_slave.png
    
(#) SKY hozzászólása Dec 17, 2015 /
 
Sziasztok!
Meg tudnátok mondani, hogy hogyan is kell értelmezni a képen látható kimeneti értékeket, ha ezek elvileg előjel bittel vannak ellátva, de mégsem szimmetrikusak (0x2852 és 0xD7AE)?
Miképpen van ez átváltva 24 bites értékre mire a waveform regiszterbe kerül és mi az átszámítás matematikája a tényleges érték megkapásának a PIC-ben?
Először meg kell vizsgálni az előjel bitet, majd ettől függően a kettő közül az egyik értéket kell hozzárendelni a maximális bemeneti értékhez és ebből már visszavezethető az LSB-hez tartozó érték?
ADE7753 adatlap
A kép a 26. oldalon van, az ADC transzfer képlete a 23-on.

ch2out.jpg
    
(#) foxi63 válasza SKY hozzászólására (») Dec 17, 2015 /
 
Szia! Egy azért biztos, hogy a két érték "szimmetrikus" a 0x2852 =10322 és a 0xd7AE = -10322
(#) SKY válasza foxi63 hozzászólására (») Dec 17, 2015 /
 
Kösz! Erre közben rájöttem én is, de ahhoz hogy eldöntsük hogy éppen negatív vagy pozitív ahhoz a legegyszerűbb egy olyan IF-et használni, ahol az érték a 0xFFFF (maximális érték) és a minimális a 0X8000 (csak az MSB 1-es) és közöttük van a regiszter/változó értéke? Szokott erre lenni konvertáló függvény (mikroC)?
Ha az IF lefut, akkor meg -1 és negálás után kerül az érték a regiszterbe és bebillentünk egy sign bitet, hogy negatív volt?
A hozzászólás módosítva: Dec 17, 2015
(#) gazspe hozzászólása Dec 18, 2015 /
 
Sziasztok!

Egy teljesen kezdőnek melyik az a PIC széria, amelyik kísérleti célokra legjobban megfelel (többnyire valószínűleg alap funkciókra, LED-eket működtetve)? A legopcionálisabb az lenne, ha az égetőjét is el tudnám készíteni házilag, ahogy nézegettem húzós árban mennek.
Válaszokat előre is köszönöm
(#) Pali79 válasza gazspe hozzászólására (») Dec 18, 2015 /
 
10F, 12F, 16F, 18F eléggé hasonlóak az utasítások zöme ugyan az. Ezekhez a PicKit2 teljesen jó. Egyéb programozó nem ajánlott. Egy használt példányt pár ezresért megkapod, a klónt megépíteni sem olcsóbb.
A hozzászólás módosítva: Dec 18, 2015
Következő: »»   733 / 1210
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