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   978 / 1203
(#) gyoran válasza Fortitude hozzászólására (») Szept 18, 2017 /
 
Szia
Én speciell 16F628A-val kezdtem, sokat lehet küzdeni vele, mire "érezni" kezded a működését.
Győrben én két boltot ismerek, egyik a belvárosban a Kisfaludy utcában tart(ott) PIC-eket, de égetőt szerintem nem. Gondolom persze beszerzi. A másik a kórház mellett mindent csak megrendelésre vállal(t).
Ha beruházol és nem vagy nagyon pénzszűkében én PICKIT 3-mal kezdeném, keress árat az interneten. Ez most gondolom nagyobb beruházás, de a jövőbe egyszer kell beruházni.
Ha netten soros portos égetőt látsz, ne vedd meg, kihalnak alóla a PC-k, az USB-Soros átalakítóval meg többnyire (soha?) nem megy.
A 12 és 16-os családot én assemblerben programozom, de hát én régi vágású vagyok.
Próbapanelnek a sima breadbordot ajánlom. Egyszer vettem a CON..Dban starter kit-et, összeraktam. Azóta barátságosan mosolygunk egymásra, de ennyi. Hogy köznyelven szóljak: a szerelem tüze nem lángol.
Szoftver, ugye az MPLAB X lenne a MICROCHIP-től, működik, de kb kétszer annyi időt töltök a beállításokkal, mint a software debuggal. Mindenesetre tud szimulációt, ami úgy is működik, hogy egy darab vasat nem kell venned.
A hozzászólás módosítva: Szept 18, 2017
(#) hapci hozzászólása Szept 19, 2017 /
 
Szervusztok!
Soros átvitelt csinálnék 16f628 belső oszcillátorával, de a gyári kalibráció már törölve. Van remény normális kapcsolatra, vagy próbáljam kalibrálni egy kristállyal szerelt hasonmás kapcsolással? (A PICkit3 3.10-es verziója nem tud kalibrálni.) Esetleg van jobb módszer oszcilloszkóp, frekvenciamérő nélkül?
A hozzászólás módosítva: Szept 19, 2017
(#) nedudgi válasza hapci hozzászólására (») Szept 19, 2017 /
 
Esetleg ez segíthet.
(#) slimcolt hozzászólása Szept 19, 2017 /
 
Sziasztok,

Egy olyan feladatot szeretnék megolni, hogy több különböző feszültséget mérek a PIC 12bit-es ADC segítségével, majd ha a mért érték a megadott hatér érték között van, akkor egy LED-et bekapcsolok.
A feladatra egy PIC18F26K42-t választottam.

Még sosem mértem ADC-vel ezért kérném a segítségeteket.
Igazából az lenne a célom, hogy elvégzek 15 (vagy még több) mérést egy adott csatornán, majd az átlag eredményt hasonlítanám össze a határétékekkel és ez szerint működne a LED vezérlése.

Én ezt a dolgot így találtam ki, lehet, hogy hülyeség:

  1. unsigned int AVG_SUMM;
  2. unsigned int CNT = 15;
  3. unsigned int ADC_AVG;
  4. unsigned int ADC_H;
  5. unsigned int ADC_L;
  6. unsigned int ADC_result;
  7.  
  8.  
  9. void ADC_measuring (void) //ADC konvertálás
  10. {
  11.         ADCON0bits.GO = 1; //Konvertálás indítása
  12.         while (ADCON0bits.GO); //Várakozás a konvertálás befejezésére, ha végzett a GO bit-et törli.
  13.         ADC_result = ((ADRESH << 8) | ADRESL); //A teljes 12bit-es eredmény tárolva egy 16bit-es változóba. (LSB jobbra tolva a Format bit segítségével).
  14. }
  15.  
  16.  
  17. void ADC_average (void) //ADC eredmények átlagolása
  18. {
  19.         AVG_SUMM = 0;
  20.         ADC_AVG = 0;
  21.         for (cnt = 0; cnt < 15; cnt++); // 15x végzi el a mérést, majd átlagol.
  22.         {
  23.                 ADC_measuring();
  24.                 AVG_SUMM += ADC_result;
  25.         }
  26.         ADC_AVG = AVG_SUMM / CNT;
  27. }
  28.        
  29.  
  30. void 3V3 (void) //pl egy feszültség mérése.
  31. {
  32.         ADC_H = //meghatározott legmagasabb érték;
  33.         ADC_L = //meghatározott legalacsonyabb érték;
  34.         ADC_average();
  35.         if ((ADC_AVG >= ADC_L) && (ADC_AVG <= ADC_H));
  36.         {
  37.                 //LED bekapcsolva.
  38.         }
  39.         else
  40.         {
  41.                 //LED kikapcsolva.
  42.         }
  43.                
  44. }


A fő programban pedig csak sorban meghívnám az adott feszültség méréséhez szükséges függvényeket.
Ez az eljárás megfelelő lehet? Mit javasolnátok?
(#) hapci válasza nedudgi hozzászólására (») Szept 19, 2017 /
 
Köszönöm, a módszer nem tűnik rossznak, de talán mégsem nekem való. Az MPLAB X ugyan elérhető, de tudtommal ennél a típusnál debuggoláshoz header is kellene, ami drágább, mint egy marék új PIC.
(#) gyoran válasza hapci hozzászólására (») Szept 20, 2017 /
 
1. tipp: ha nem kell az oszcillátor pontossága, akkor beállítanám az OSCCAL-t a középértékre (CAL3:CAL0=07h ha igaz, a 7FFh-n van. többi bit legyen 0). Ilyenkor a baud rate generátor értékével is kísérletezhetsz (én lemennék 10%-ot kiírnék valami szöveget meg a SPBRG értékét, aztán növelném az SPBRG-t. Abban a tartományban, ahol stabilan olvasható venném az SPBRG középértékét). Ez persze mehet akkor is, ha az OSCCAL-hoz nem nyúlsz

2. Tipp: belső oszillátor jelét kitenném az RA6-ra, CLKOUT-ba állítanám, akkor ott 1 MHz-et kell mérjél frekimérővel. Ha nem annyit mérsz, akkor az OSCCAL-t kell állítgatni. TRY and ERROR

3. Frekimérő hiányában csinálsz egy porton villogtatás favágó módszerrel (ciklusokkal). Pontosan úgy állítod be (esetleg másik PIC-en, vagy szimulátorban ellenőrizve) hogy pl. 10 percenként váltson fel-le. Utána stopperrel méred, és addig állítod az OSCCAL-t amíg (relatív) pontos nem lesz.

Egyébként valahol azt olvastam, a 16F628-nak nincs OSCCAL-ja állítólag csak a 628A-nak.

3.a: mint előbb, de nem nyúlsz az OSCCAL-hoz, csak a mért érték és a 600 mp hányadosával korrigálod a BAUD RATE beállítást. (hogy merre, azt ki kell totózni, ehhez már késő van)
A hozzászólás módosítva: Szept 20, 2017
(#) slimcolt válasza slimcolt hozzászólására (») Szept 20, 2017 /
 
Egy újabb kód:

  1. unsigned long AVG_SUMM;
  2. unsigned int C = 50;
  3. unsigned int ADC_AVG;
  4. unsigned int ADC_H;
  5. unsigned int ADC_L;
  6. unsigned int ADC_result;
  7.  
  8. void ADC_measuring (void) //ADC konvertálás
  9. {
  10.         ADCON0bits.GO = 1; //Konvertálás indítása
  11.         while (ADCON0bits.GO); //Várakozás a konvertálás befejezésére, ha végzett a GO bit-et törli.
  12.         ADC_result = ((ADRESH << 8) | ADRESL); //A teljes 12bit-es eredmény tárolva egy 16bit-es változóba. (LSB jobbra tolva a Format bit segítségével).
  13.         __delay_us(5); //ACQ biztosítása, 1kOhm-os bemeneti impedancia miatt.
  14. }
  15.  
  16. void ADC_average (void) //ADC eredmények átlagolása
  17. {
  18.         AVG_SUMM = 0;
  19.         unsigned char cnt;
  20.         for (cnt = 0; cnt < 50; cnt++); // 50x végzi el a mérést, majd átlagol.
  21.         {
  22.                 ADC_measuring();
  23.                 AVG_SUMM += ADC_result;
  24.         }
  25.         ADC_AVG = AVG_SUMM / C; // itt lehetne a for ciklusban használt cnt változóval osztani?
  26. }
  27.  
  28. void 3V3 (void)
  29. {
  30.         ADC_H = //meghatározott legmagasabb érték;
  31.         ADC_L = //meghatározott legalacsonyabb érték;
  32.         ADC_average();
  33.         if ((ADC_AVG >= ADC_L) && (ADC_AVG <= ADC_H));
  34.         {
  35.                 //LED bekapcsolva.
  36.         }
  37.         else
  38.         {
  39.                 //LED kikapcsolva.
  40.         }
  41.                
  42. }
(#) Kapagerenda hozzászólása Szept 20, 2017 /
 
Üdv,
Olyan kérdésem lenne, hogy egy színszenzoros megoldást szeretnék megvalósítani, viszont maga a színszenzor kiértékelő elektronika nagyon drága (100 - 200 euró). Maga az érzékelő fej nem túl drága. Lehetséges volna a kiértékelő elektronikát megépíteni mikrokontrolleral? Szóval megvásárolnám a Fiber Optic Sensor FU67 típusú érzékelő fejet és hozzá elkészíteném a kiértékelő elektronikát.
Mi a véleményetek?
(#) hapci válasza gyoran hozzászólására (») Szept 20, 2017 /
 
ad.1 Az SPRG variálására nem gondoltam, de talán ez a legjobb "barkács" módszer.
ad.2 A 10 perces futtatást én úgy gondoltam, hogy két PIC egyszerre indul. A kristályos referencia PIC a másiktól - a beállított 10 perc leteltekor - kapna egy startjelet az futáskülönbség mérésére. A futáskülönbség kiolvasható, amit az OSCAL változtatásával kellene kb. "0"-ra faragni.
ad.3 Frekimérő... mint a viccben: "azért nem harangozunk, mert 1. nincs harang..."
ad.3a Talán ez a leggyorsabb, ha a terminálon hangolni tudnám a BAUD RATE-et, akkor már csak egy mozdulat lenne...
Köszönöm, hogy alvás helyett a problémámmal foglalkoztál!
(#) eSDi válasza Kapagerenda hozzászólására (») Szept 20, 2017 /
 
Üdv!

Ha iparban szeretnéd használni, akkor felejtsd el a házi barkácsolást. Meg kell vetetni a céggel azt a szenzort és az erősítőt hozzá. Ha pediglen otthonra akarod, akkor az FU67-el sokra nem mész így egymagában, mert az csak egy üvegszáloptika, plusz egy menetes vég, hogy fel is lehessen fogatni valahová. Kellene még neked valami szín érzékelő modul is hozzá.
(#) Kapagerenda válasza eSDi hozzászólására (») Szept 20, 2017 /
 
Otthonra kellene és a színérzékelő modul nagyon drága. Esetleg nem tudtok olyan színszenzoros megoldást ami nem túl drága és az érzékelési felülete is kb 1-2 mm nagyságrendű?
(#) Hp41C válasza gyoran hozzászólására (») Szept 20, 2017 /
 
Sem a 16F627 - 16F628 -nak, sem a 18F627A, 16F628A, 16F648A -nak nincs OSCCAL lehetősége.
A hozzászólás módosítva: Szept 20, 2017
(#) sonajkniz válasza Kapagerenda hozzászólására (») Szept 20, 2017 /
 
Nem tudom, mire szeretnéd használni, de ennél olcsóbbat nem találtam.
Bővebben: Link
(#) attika válasza sonajkniz hozzászólására (») Szept 20, 2017 /
 
Van olcsóbb is itt.
(#) sonajkniz hozzászólása Szept 20, 2017 /
 
Meg tudná mondani valaki, hogy ha a konfigolás során átkapcsolom digitális bemenetnek a reset lábat, mi a jó bánatért vált ki resetet? A hálózati áramon lévő villanymotor indulása váltotta ezt ki. De akkor is resetel, ha a műszer mérőzsinorját a reset lábhoz érintem. 5K-val felhúztam Vdd-re, semmi változás.
Ugyanakkor akár Vdd-re, akár Vss-re direktben kötöm rá, akkor nem resetel, és a motor sem zavarja többé.
A tesztet több PIC-el is elvégeztem, és mind ugyanezt csinálja.
(#) hapci válasza Hp41C hozzászólására (») Szept 20, 2017 /
 
Idézet:
„Precision internal 4 MHz oscillator factory
calibrated to ±1%”

Szóval higgyem el, hogy annyi? Ebből mégis csak az OSCCAL jut az ember eszébe... Az adatlap valóban nem említi.
(#) gyoran válasza hapci hozzászólására (») Szept 20, 2017 /
 
Azt egyébként honnan tudod, hogy a kalibráció törlődött? És hogyan törlődhet OSCCAL nélkül? De ha így van akkor marad az SPBRG variálása.
Mondjuk OSCCAL-ra történő utalást én is csak közvetve találtam az interneten...
(#) hapci válasza gyoran hozzászólására (») Szept 20, 2017 /
 
Ezeket a tokokat még soros portról tanulásra használtam, mindig kristállyal. Most elővettem, de minden láb kell, a kristálynak nem jut. Ha volt is benne osccal, most nincs a memóriában. A kommunikáció kvarccal működött, most ugyanazzal a prg modullal valamiért nem megy. Egy hibalehetőség kilőve, következik a hw és sw újabb vizsgálata, majd az SPRG variálása.
(#) Pali79 válasza hapci hozzászólására (») Szept 20, 2017 /
 
Bár én csak próbaképen használtam a soros kommunikációt 16F628A-val, de simán ment belső oszcillátorról. Nem olyan nagy a szórása annak, hogy a soros kommunikációba beleszólna, szvsz.
(#) Bakman válasza sonajkniz hozzászólására (») Szept 20, 2017 /
 
A kontroller errata doksija mond valamit erről? Oszcilloszkóppal monitorozd a táplábakat és a reset lábat, hátha látszik valami.
(#) gyoran válasza hapci hozzászólására (») Szept 20, 2017 /
 
Menjünk csak sorban. Lehet, hogy én nem értek valamit. Van egy 628A-d, ami egy adott programmal ment kvarccal, most - gondolom átírt programmal - nem megy. OSCCAL legvalószinűbb nem létezik ennél a típusnál, tehát hiába keressük. Ha lenne is, a 628A működne, csak más (pl. -15%) órajellel.
Most - ebben a pillanatban - nekem ez SW vagy CONFIG hiba.
Próbálj egy egyszerű kimenet-váltogató programot beletölteni. Ha az megy, akkor szerintem az új progi nem csinál valamit jól.
Ezek a chipek egyébként alig tehetők tönkre. Nekem eddig egyet sikerült, azt is szikrázó pisztoly-páka heggyel
(#) gyoran válasza sonajkniz hozzászólására (») Szept 20, 2017 /
 
Csak tippelek: mi van, ha akkora feszt kap, hogy VPP-nek érzi?
(#) hapci válasza gyoran hozzászólására (») Szept 20, 2017 /
 
Én is így látom, a HW hibának is jó esélye van, mert egy korábban másra használt nyákot toldozgattam. Türelmem végtelen, a biteket is sorra vizsgálom, ehhez elég az MPLAB meg a multiméter. Jelentkezek, ha fejlemény van.
(#) sonajkniz válasza Bakman hozzászólására (») Szept 21, 2017 /
 
Egyértelműen látszik, de nekem épp az a gondom vele, hogy ha tapfesz, vagy 0V kerül rá, eszébe sincs resetelni, de ha a rá kerülő feszülségtüske csak pl. a tápfesz fele, majd ismét 0, akkor resetet nyom.
(#) Fricu hozzászólása Szept 21, 2017 /
 
Üdv Urak
építettem egy aksi tesztelő-töltő hardvert. Szuper, működik. (0-19V, 0-3 A, kapcsolhatóan)
Elő van készítve Pic-es vezérlésre, de azzal már nem boldogulok.
Akinek lenne rám ideje - energiája, kérem jelentkezzen.
rudolffkukacfreemailponthu
(#) silent15 hozzászólása Szept 21, 2017 /
 
Sziasztok!

Adott egy PIC32MX150F128B kontroller. Csináltam hozzá egy próbapanelt, de minden próbálkozásom hogy kapcsolatot létesítsek a kontrollerel (pickit3) meghiúsult.
Az egyik hiba amit kapok :
Idézet:
„PICkit 3 is trying to supply 3,250000 volts from the USB port, but the target VDD is measured to be 3,000000 volts. This could be due to the USB port power capabilities or the target circuitry affecting the measured VDD.

The target circuit may require more power than the debug tool can provide. An external power supply might be necessary.
Connection Failed.”

Ha külső tápról próbálkozok akkor pedig:
Idézet:
„Unable to connect to the target device.
Failed to get Device ID”

Rámértem a VCAP-ra és 2,5V !!! van rajta az 1,8V helyett. Mitől lehet ez ? Túl nagy a kondi ESR értéke (Rámértem, 0,5R)? Így most meghalt a kontroller ?

Köszönöm!
A hozzászólás módosítva: Szept 21, 2017
(#) usane válasza silent15 hozzászólására (») Szept 21, 2017 /
 
A próbapanel tág fogalom. Egy kapcsolási rajz nem ártana, hogy lássuk mit raktál rá és az terhel-e valahol, prog lábakat gondolom nem használod másra.
Egyébként a hibaüzenet alapján lehet akár halott is, ha semmi más nem terhel be, de magát a panelt sem árt ellenőrizni nyákzárlat, szakadás, ilyesmi.
(#) silent15 válasza usane hozzászólására (») Szept 21, 2017 /
 
Csak a gyári minimum alkatrészek + egy smd led/ellenállás párhuzamosan a tápkörrel. Nem is csináltam hozzá kapcsolási rajzot. Semmi más nincs a programozó lábakon.
Ha halott, mitől hallhatott meg ? Foglalat nélkül lett beforrasztva, de vigyázva hogy ne melegedjen, és 2-2 lábat forrasztva szünetekkel.
(#) usane válasza silent15 hozzászólására (») Szept 21, 2017 /
 
Programoztad már azt a PIC-et? Van rajta már valami, vagy vadonat új?
Továbbá 100n a tápra, bár ha pickitről táplálod fölösleges.? Vcap értéke jó? Ha nem kerámia jó a polaritása?
A hozzászólás módosítva: Szept 21, 2017
(#) kriszrap hozzászólása Szept 21, 2017 /
 
"Helyesen" pergésmentesítettem ??
Sajnos nem tudom tesztelni hogy helyesen müködik esajnos.
300ms ként néz a gombra.
Gomb elengedésekor hajtomvégre a dolgokat.
  1. void Interrupt(){
  2.   if (TMR2IF_bit){
  3.     TMR2IF_bit = 0;
  4.      if(!--count)
  5.      {
  6.        count=30;
  7.        if(PORTA.RA4 ==1 || PORTA.RA3 ==1 ||  PORTA.RA2 ==1)
  8.        {
  9.            if(PORTA.RA4 ==1 && gombbal==0)gombbal=1;
  10.            if(PORTA.RA3 ==1 && gombkozep==0)gombkozep=1;
  11.            if(PORTA.RA2 ==1 && gombjobb==0) gombjobb=1;
  12.        }
  13.        else if(PORTA.RA4 ==0 && PORTA.RA3 ==0 && PORTA.RA2 ==0)nyvegrehajt();
  14.      }
  15.   }
  16. }
A hozzászólás módosítva: Szept 21, 2017
Következő: »»   978 / 1203
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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