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   774 / 1206
(#) ktamas66 válasza c27 hozzászólására (») Ápr 15, 2016 /
 
Próbáld ki bemenetként működik-e.
(#) DJozso hozzászólása Ápr 15, 2016 /
 
Kedves fórum társak! Érdeklődnék, hogy tud-e valaki arról, hogy a mikroC for PIC programban lehetséges-e mondjuk a GLCD_Init függvény lefutásának módosítása? Értem ez alatt, pl. a várakozási idők változtatását. Történik ugyanis, hogy néha elindul az LCD-m, néha nem. Ha duplájára írom a programban a CPU sebességet, mint a valós, akkor fele olyan gyorsan "csinál" mindent a PIC, viszont minden esetben elindul az lcd. Ebből gondolom, valami késleltetési idő nem elég neki... Valaki, valami okosat? Az egész init függvényt nem szeretném újból írni.
(#) kszabi hozzászólása Ápr 15, 2016 /
 
Sziasztok
Szeretnék egyilyet
PIC32 vagy 33 ról működtetni. SSD1289 drivere van 40 lábú csatlakozóval.
Ezt a demót akarom kezdetnek kipróbálásra: C:\microchip_solutions_v2013-02-15\Graphics\Object Layer
Hol lehet megnézni hogy a panelt milyen lábkiosztással kell a PIC-re kötni?
Vagy azt nekem kell meghatározni valahol?
Köszi Szabolcs
(#) gaspar_zsolt válasza DJozso hozzászólására (») Ápr 16, 2016 / 1
 
Szia!
Legjobb emlékeim szerint ezekben az inicializáló részekben fix késleltetés van. Ha növeled a CPU időt, akkor is ugyanannyi lesz a késleltetés.
Pont két hete vettem át én is a MicroC egyik lefordított asm-jéből az LCD init, mert a sajátom nem indult 16MHz-en csak 4-en.
(#) gaspar_zsolt válasza kszabi hozzászólására (») Ápr 16, 2016 /
 
Szerintem a panel csatlakozóira rá van írva mit kell oda kötni.
Ezeknél érdemes kihasználni a pic32 PMP tudását a TFT összekötésénél. És a Mikroelektronika C-nek jó a támogatása.
(#) kszabi válasza gaspar_zsolt hozzászólására (») Ápr 16, 2016 /
 
Ha jól értem ennek a demónak drivere használja a PMP-t.
A vezérlő biteket és a touch ic-t melyik PIC lábakon működteti , azt nem találom sehol.
(#) pajti2 válasza bbalazs_ hozzászólására (») Ápr 16, 2016 /
 
Néha vannak olyan szőnyeg alá bújt sztorik, amik nem kaptak figyelmet, mert soha senki sem akadt még beléjük, vagy az az 1-2 ember, aki mégis beleakadt, sosem publikálta. Ja, egy kicsit dühítő tud lenni, amikor az alapokban is hiba van.

Mondjuk a verziókról megjegyezném, hogy már a 2014-es is 2 éves, mi a fenének használtál te egy 2010-es (6 éves) verziót ahelyett?
(#) pajti2 válasza kszabi hozzászólására (») Ápr 16, 2016 / 1
 
A példa projecteket általában példa panelekhez készítik el. Be is kell állítanod a hardwareprofile-ban, hogy mid van. A példapanelek kapcsolása rajza nyilvános, a termék doksijában megtalálod. Ha saját magad kreáltál kapcsolást a projecthez azelőtt, hogy egy példából előbb részletesen megértetted volna, mi hogyan működik, akkor persze alaposan fejest ugrottál a mélybe, elsőre olyat tenni nem javaslom. Ha mégis ragaszkodsz hozzá, kotorj fel egy próbapanel leírást, amit ahhoz a projecthez javasol a hardwareprofile, nézd meg ott a kapcsolási rajzot, és ami eltérésed neked van, kotorj bele az #if - #define hegyekbe, hol kell átállítanod lábakat. Esetleg a forráskódban fixen írd át a #define helyett adott lábakat használni.
(#) c27 válasza ktamas66 hozzászólására (») Ápr 16, 2016 /
 
Most kipróbáltam bemenetként is, de semmi. Ezután még azt is megpróbáltam hogy nyomok egy törlést és utána újraírom a progit. Beimportálnám a hexet és amit nyomom az írást kiírja hogy no device detected. Azt hittem már itt a vége, de ha simán átírtam pár értéket az üres hexbe akkor azt meg tudta írni, és végül 6-7-re sikerült ráírnia programot. Szóval nagyon érdekes. Nem mondom, hogy sokat használtam még a pickit2 klónt, de a kis piceknél eddig nem volt bajom vele. Lehet kifogtam mégis csak egy hibás picet? Most a D portot leszámítva működik.
(#) pajti2 válasza c27 hozzászólására (») Ápr 16, 2016 /
 
Miközben csináltad azt az átforrasztgatást, nem hagytad véletlenül tápfesz alatt azt a picet, és mondjuk folydogált az ónpaca közvetlenül tápfesz ellenirányban egy D-portos kimenettel? Mert ha volt valami olyasmi, bizony az rendesen meg tudja rongálni a pic-et.
(#) c27 válasza pajti2 hozzászólására (») Ápr 16, 2016 /
 
Nem nem volt tápfesz a picen, főleg mivel a forrasztó egy másik helyiségben van. Szóval nem tudom mi okozta.
Csak 4 led van a D porton, 2 tranzisztoros kimenet és 2 csak "lóg". A tranzisztorok is jók, de 1k bázisellenállással van összekötve a pic lábával, szóval sehogy sem lehet rövidzárat okozni (csak szán szándékkal).
A hozzászólás módosítva: Ápr 16, 2016
(#) csaba8702 hozzászólása Ápr 17, 2016 /
 
Sziasztok.

Szeretnék egy nyomógombos érzékelést a következő C programmal. De hiába nyomom a gombot sehogyan sem akar működni a dolog.

char i;

void main() {

TRISA = 0b11111111;
TRISD = 0;
PORTD = 0;


while(1)
{

if( PORTA.F0 == 0 )

PORTD = 0b00000001;

for(i=0;i<7;i=I+1)
{
PORTD = PORTD << 1;
delay_ms(250);
}

for(i=0;i<7;i=I+1)
{
PORTD = PORTD >> 1;
delay_ms(250);
}

}
}

A PIC egy 16F877A

ELsősorban gombokat és kapcsolókat szeretnék vele detektálni.
A másik kérdésem: Hogyan lehet a pic-ekkel szöveges adatokat küldeni? egy arduino uno - val szeretném ezeket majd dekódolni.

Köszönök minden építő jellegű hsz-t.

Valamint, ha nem az analóg lábra kötöm a gombot, hogyan tudom a többi lábon ugyanúgy használni?
(#) cross51 válasza csaba8702 hozzászólására (») Ápr 17, 2016 /
 
Ilyet, hogy PORTA.F0 soha nem láttam még, én a PORTAbits.RA0 (xc8) ismerem, de szerintem, már nagyon sokszor elmondták, hogy analog-ra álított portot elég nehéz digitálisan olvasni.
  1. ...
  2. ADCON1 = xxxx011x // igy digital az AN0/RA0 lab is, de egy lab se lesz igy analog bemenet
  3. ...

Az arduinohoz kötheted UART-al(szerintem a legegyszerűbb), SPI-vel és i2c-vel is.
És az utlosó kérdést nem teljesen értem, hogy mit is akarsz pontosan.
(#) diablo válasza cross51 hozzászólására (») Ápr 17, 2016 /
 
Rákeresve a PORTA.F0-ra ez mikroC-ben íródott nem MPLAB-ban.

csaba8702: A TRISx regiszterrel állítod be, hogy a PIC lába kimenetként(0) vagy bemenetként(1) működjön. Ha pl. a D portra akarod kötni a nyomógombot, akkor TRISD = 0b11111111; utasítást kell megadnod.
(#) djadji hozzászólása Ápr 17, 2016 /
 
Sziasztok!
Van egy PICKIT3-om és szeretnék programozni egy 12F1572-t, de nem tudom összehozni a kettőt. "No device"-t ír ki, nem ismeri fel a PIC-et. (már azt hittem tönkrement, de egy 16F886-t fölismert elsőre)
A 12F1572 adatlapján az szerepel, hogy pickit3 támogatja, ugyanakkor kézi kiválasztásnál nem találok egyetlen 12F-et se, ami 4 szemjegyű.
Van valami titka ennek, hogy hogyan kell használni?
(#) pajti2 válasza csaba8702 hozzászólására (») Ápr 18, 2016 /
 
Idézet:
„Valamint, ha nem az analóg lábra kötöm a gombot, hogyan tudom a többi lábon ugyanúgy használni?”

Ha az adc ki van kapcsolva, a port lábak digitális üzemben vannak - ha csak egyéb perifériát be nem kapcsolsz rajtuk. Jellemzően az adc induláskor be van kapcsolva, ha nem kell, azt ki szoktuk kapcsolni (fentebb már jelezték neked). Watchdog ahol van, ha nem kell, csak hagyd default értékeken a config biteket, és nem zavar be. Jtag ahol van, ha nem kell, config bitekben explicite kapcsold ki. Bármilyen pic is legyen (egészen 32mz-ig a teljes 8-16-32 bites családok sorban végig), ha csak digitális "állapotgépnek" kell a pic, akkor azokra figyelj oda, a többivel nem lesz bajod, mert config default / cold start alapján semmi más nem szokott aktív lenni. De persze biztos ami biztos alapon az adatlapot mindig elejétől a végéig elolvasni a meglepetések elkerülése végett.

Az alkalmazásodban egyébként van egy lehetséges logikai bukfenc. Ha a 0. biten egyszer is nullát talált a program, beállítja a D porton a legalsó bitet egyre, és a továbbiakban már mindegy lesz a 0. bit értéke, mert a for ciklusok már folyamat léptetgetni fogják azt a bitet minden mástól függetlenül is. A program abban a formában inkább csak arra jó, hogy ellenállással magasba húzott lábra ellenőrizni tudd, hogy a pic indulása után volt-e egy gnd felé kötött nyomógom lenyomva éppen akkor, amikor a főciklus odaér (minden 4 másodpercben 1x nézi meg a főciklus). Ugye biztosan az volt a szándék?

Idézet:
„for(i=0;i<7;i=I+1)”

Fentebb vastagítva és aláhúzva két külön változó, amit a ciklus kiértékelési részében hagytál mindkét helyen. Ha nem is szól érte a fordító, mert nem case szenzitív, akkor is egy kicsit problémás. Egyszer csak elköveted a trehányságot mondjuk define-okban is egy sok1000 soros config-kulimász kellős közepén, és majd keresheted a tűt a szénakazalban. Jobb az ilyesmiről még ideje korán leszokni.
A hozzászólás módosítva: Ápr 18, 2016
(#) sonajkniz válasza djadji hozzászólására (») Ápr 18, 2016 /
 
Szia!

Nem tudom, melyik fejlesztő eszközt használod, de próbálj úgy rákeresni, hogy 12LF1572.
A PIC katalógusban ilyet nem is találni, viszont az MPLAB X-ben csak így találtam meg. Lehet valami elírás van az adatbázisban.
(#) eSDi válasza djadji hozzászólására (») Ápr 18, 2016 /
 
Üdv!

Én csak az IPE-t használom az MPLAB X-ből, de abban benne van. Legalábbis a legújabban.
(#) djadji válasza sonajkniz hozzászólására (») Ápr 18, 2016 /
 
Köszönöm, megnézem.
Sajnos nekem az MPLAB sokadik próbálkozásra sem működik a PICKIT-tel együtt (egyik programozó se). Így megírom, lefordítom, és a PickIT saját égetőjével égetem be a PIC-be, mert másként nem megy (Flowcode se ismeri fel, C és BAsic programozót is próbáltam, az se)
Kínai a PICKIT, lehet ez a gond. De már megszoktam, nincs vele baj, kivéve amikor az égető programban nem találom a kérdéses PIC-ek (Mint most)
KÖszi a tippeket!
(#) eSDi válasza djadji hozzászólására (») Ápr 18, 2016 /
 
Mivel ez a PICkit 3 v3 program már archív státuszban, ezért nem ismer mindent. Attól, hogy a programozó kínai, még mennie kellene. Főleg, hogy ezzel a programmal megy. Nekem is volt bajom, a korábbi MPLAB X IPE-vel, de úgy látszik most jó lett. MCLR tiltott 16F819-et egyszer programozta, többször nem. PICkit 3 v3-al jó volt. Pedig nekem eredeti PK3 programozóm van.
Telepítsd fel a JAVA legújabb verzióját, ha 64-bites Windows alatt vagy, akkor a 32-bites változatot is. Majd próbáld ki a legújabb MPLAB X-et.
Esetleg össze is hasonlíthatod az eredeti PK3-al a tiedet, kapcsolási rajz megtalálható. De hardverben sok eltérést nem tudnak bele rakni szerintem.

Ja és ne feledd! Mielőtt kipróbálod: PICkit 3 Programmer-ben Tools->Revert to MPLAB Mode
A hozzászólás módosítva: Ápr 18, 2016
(#) KaiserA hozzászólása Ápr 18, 2016 /
 
Sziasztok!

Azt szeretném megkérdezni, hogy miért nem válaszol a szenzorom? MMA8451Q gyorsulás szenzorom van, és a 9. bitnél nem küldi vissza az ACK-t, és FF-et olvasok ki egyfolytában. Mi lehet a baj.
MMA8451Q pdf

  1. IdleI2C1();
  2.                         StartI2C1();                            //Send line start condition
  3.                         IdleI2C1();
  4.                        
  5.                         MasterWriteI2C1(0x38);  // Write 001110 0 0x1C + (0) write = 0x38
  6.                         MasterWriteI2C1(0x0D); //Who AM I regiszter
  7.                  
  8.                         RestartI2C1();
  9.                         IdleI2C1();                  
  10.                         MasterWriteI2C1(0x39);  //0x1C   1  0x39
  11.                         fogadottadat = MasterReadI2C1();
  12.                         NotAckI2C1();  
  13.                         StopI2C1();                             //Send line stop condition
A hozzászólás módosítva: Ápr 18, 2016
(#) icserny válasza KaiserA hozzászólására (») Ápr 18, 2016 /
 
Hová van kötve az SA0 láb? Az adatlap szerint SA0 = 1 esetén nem 0x1C, hanem 0x1D az I2C cím (azaz 0x38 helyett 0x3A az első kiküldendő bájt).
(#) kocsgab002 hozzászólása Ápr 18, 2016 /
 
Sziasztok.
Van egy projekt, aminek a kódja Microchip XC8 - al íródott.
Valaki tudna nekem generálni belőle beégethető .hex-et?
Előre is nagyon köszönöm.

  1. #include <pic.h>
  2.  
  3. // filament clock
  4. // (c) Mike Harrison 2015
  5. // www.electricstuff.co.uk
  6. // Target PIC16F1824
  7.  
  8. #pragma config FOSC=INTOSC,MCLRE=ON,WDTE=ON,PWRTE=ON,BOREN=ON,CLKOUTEN=OFF
  9. #pragma config LVP=OFF,BORV=HI,WRT=OFF
  10.  
  11. #define oe LATA2 // tpic595 latch output enable. Could use PWM for global dimming, or multi-cycle pulses for per-segment dimming
  12. #define lat LATC1 // tpic595 latch
  13.  
  14. // set switches
  15. #define minsw RA0
  16. #define hrsw RA1
  17.  
  18. // segment bits within shift registers
  19. #define sa 4
  20. #define sb 8
  21. #define sc 16
  22. #define sd 32
  23. #define se 64
  24. #define sf 2
  25. #define sg 128
  26. #define sx 1 // 10Hrs, colon
  27.  
  28. // seven-segment lookup
  29.  
  30. const char sevenseg[10]={
  31. sa | sb | sc | sd | se | sf,
  32. sb | sc,
  33. sa | sb | sd | se | sg,
  34. sa | sb | sc | sd | sg,
  35. sb | sc | sf | sg,
  36. sa | sc | sd | sf | sg,
  37. sa | sc | sd | se | sf | sg,
  38. sa | sb | sc ,
  39. sa | sb | sc | sd | se | sf | sg,
  40. sa | sb | sc | sd | sf | sg
  41. };
  42.  
  43.  
  44. unsigned char hsecs,mins,hours,colon; // NB hsecs counts half-seconds
  45.  
  46. void spibyte(char c)
  47. { // send byte to SPI port
  48. SSP1IF=0;
  49. SSP1BUF=c;
  50. while(~SSP1IF);
  51. }
  52.  
  53. void main(void)
  54. {
  55.  
  56.     OSCCON=0b01110000; // 8MHz
  57.     LATA=0;
  58.     TRISA=0b00110011;
  59.     WPUA =0b00000011; // pullups for switches
  60.     ANSELA=0;
  61.  
  62.     LATC=0;
  63.     TRISC=0b00000000;
  64.     WPUC =0b00000000;
  65.     ANSELC=0;
  66.     OPTION_REG=0b00000000;
  67.     APFCON0=0; APFCON1=0;
  68.     // SPI setup
  69.     SSP1STAT=0b01000000; // CKE high
  70.     SSP1CON1=0b00100000; // master mode, clk=fosc/4
  71.     SSP1CON2=SSP1CON3=0;
  72.  
  73.     T1CON=0b10001001; // timer1 on, T1 oscillator
  74.  
  75. oe=0; // output enable
  76.  
  77. hours=0; // "power out" indication, prevent counting
  78. mins=0;
  79. hsecs=0;
  80. TMR1IF=1; // force initial update - 32K osc can take a few secs to start
  81.  
  82. do {
  83.  
  84. asm("clrwdt");
  85.  
  86. if (hours==0) if((minsw==0) || (hrsw==0)) hours=1; // start running after powerdown
  87.  
  88. if(TMR1IF) { // 2Hz tick
  89. TMR1IF=0;
  90. TMR1H|=0xC0; // preload Tmr1 for 2Hz=16384 counts
  91.  
  92. colon=hsecs&1;
  93.  
  94. if(minsw==0) if(++mins==60) mins=0;
  95. if(hrsw==0) if(++hours==13) hours=1;
  96.  
  97. if(hours) // not startup
  98. if(++hsecs==120) {
  99. hsecs=0;
  100. if(++mins==60) {
  101. mins=0;
  102. if(++hours==13) {
  103. hours=1;
  104. }
  105.     }
  106. }
  107.  
  108. lat=0;
  109. spibyte(sevenseg[hours%10] | (hours>9?sx:0));
  110. spibyte(sevenseg[mins/10] | (colon?sx:0));
  111. spibyte(sevenseg[mins%10]);
  112. lat=1;
  113.  
  114.  
  115. }
  116.  
  117.  
  118. } while(1);
  119.    
  120.     }
(#) Hp41C válasza kocsgab002 hozzászólására (») Ápr 18, 2016 /
 
Ime... Annyit még, hogy ennek a PIC -nek PORTB portja van és nincs PORTC...
(#) KaiserA válasza icserny hozzászólására (») Ápr 18, 2016 /
 
Szia!

Köszi a segitséget, földre van kötve, kiprobáltam, úgy is de ugyanez a helyzet.
A hozzászólás módosítva: Ápr 18, 2016
(#) icserny válasza KaiserA hozzászólására (») Ápr 18, 2016 /
 
Akkor ellenőrizd a kapcsolás többi részét is! ( 3 GND, 2 VDD/VDDIO, 1 BYP lábak)
Nálam a FRDM-KL25Z kártyán a csatolt ábra szerinti a bekötés (SA0 felhúzásra van állítva, ezért 0x1D a 7 bites cím, ami nálad a lehúzás miatt 0x1C). Persze, én mbed környezetben használom, ezért a programodhoz nem tudok hozzászólni.

MMA8451Q.png
    
(#) KaiserA válasza icserny hozzászólására (») Ápr 18, 2016 /
 
Köszönöm szépen, a kapcsolásom elvileg jó, mert egyik ismerősömnek megy a kapcsolássommal, valószínű az a baj, lehet nem érintkezik vmilyek láb rendesen a nyákhoz.

gszen.JPG
    
(#) icserny válasza KaiserA hozzászólására (») Ápr 18, 2016 /
 
Idézet:
„...lehet nem érintkezik vmilyek láb rendesen a nyákhoz.”
Fölöttébb kínos!

A rajzodról nem derül ki, de ugye megvannak a felhúzások az I2C buszon?
(#) cross51 válasza icserny hozzászólására (») Ápr 18, 2016 /
 
Ha nincs felhúzva olvashat vissza FF-et az I2C?
nem kötekedés ne érts félre csak kíváncsi vagyok
(#) KaiserA válasza icserny hozzászólására (») Ápr 18, 2016 /
 
Igen, a felhúzó ellenállások megvannak. Ha az eszköz nem érintkezik rendesen, olvashat FF-et?
A hozzászólás módosítva: Ápr 18, 2016
Következő: »»   774 / 1206
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