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   1226 / 1227
(#) zenetom válasza oregharcos hozzászólására (») Szept 12, 2026 /
 
Szia,
Mármint melyik LED nem kapcsol ki?
Mi a PIC pontos típusa?
(#) Bakman válasza zenetom hozzászólására (») Szept 12, 2026 /
 
Én úgy értelmezem, bekapcsoláskor RA0 lábon lévő LED világít, 5s után RA0 kikapcsol, RA1-en lévő bekapcsol és úgy is marad.
(#) oregharcos válasza Bakman hozzászólására (») Szept 12, 2026 /
 
Szia Bakman! Nagyon köszönöm a segítséget, ez jól működik!
(#) oregharcos válasza zenetom hozzászólására (») Szept 12, 2026 / 1
 
PIC12567. Megoldódott a probléma. Köszönöm a segítő akaratot!
(#) zenetom válasza Bakman hozzászólására (») Szept 12, 2026 /
 
Úgy tűnik a Delay_ms(500000) okozta a gondot, mivel szerintem az max. 16 bites értéket fogad. Illetve hogy a cikluson belül volt.
Na a lényeg, hogy megoldódott.
(#) Bakman válasza zenetom hozzászólására (») Szept 12, 2026 /
 
A cikluson belüliség okozta a gondot. A ciklus újraindulásakor az elinduláskori állapotot vették fel a kimenetek.

XC8 esetén 32 bites lehet az érték (lásd melléklet), mikroC-re passzolok, valószínűleg ők sem aprózták el.
(#) zenetom válasza Bakman hozzászólására (») Szept 12, 2026 /
 
Köszi a pontosítást.
Idézet:
„A ciklus újraindulásakor az elinduláskori állapotot vették fel a kimenetek”

Viszont ez mondjuk elég gáz működési mechanizmus szerintem.
(#) Frankye válasza lóri hozzászólására (») Szept 13, 2026 /
 
Mindenkinek köszönöm, aki próbált segíteni. Sajnos nem sikerült beüzemelni.
(#) zlanczky hozzászólása Szept 16, 2026 /
 

pic nem indul, csak ha pickit2 csatlakoztatva van

Sziasztok, amatőr hobbista vagyok, de már készítettem jópár alkalmazást. A mostani esetben egy pic16f886 procit használok, és minden szépen működik, ameddig a pickit2 rajta van a nyákon. Ha leveszem és a saját tápról menne, akkor nem indul el vagy nem tudom meddig jut el. A topic fejben leírtakat csak ott szegtem meg, hogy 10kOhm helyett 4,7kOhm-os ellenállással húzom fel a MCLR lábat. Volt már olyan eset, hogy menet közben lehúztam a pickit2-t és szépen ment tovább. Mellékelem a kicad-os sémát, ha érdekes lenne.
Van ötletetek, leírásotok, hivatkozás a pic adatlapra, amit érdemes elolvasni vagy nem tartottam be?
(#) pipi válasza zlanczky hozzászólására (») Szept 16, 2026 /
 
A rajzon én 47K-t látok, de hiányzik onnan más is... inkább ilyesmivel kisérletezz:
https://obrazki.elektroda.pl/7766982600_1391059513.jpg
https://onlinedocs.microchip.com/oxy/GUID-FEC46964-0385-48FA-B67F-A...A.html
(#) kaqkk válasza pipi hozzászólására (») Szept 16, 2026 / 1
 
Az mclr-t 1-10k körüli ellenállással szoktam felhúzni , szerintem nem az lesz a probléma . A kvarc bekötése és a programban a beállítása lehet a gond szerintem .Én igy szoktam bekötni
A hozzászólás módosítva: Szept 16, 2026
(#) pipi válasza kaqkk hozzászólására (») Szept 16, 2026 /
 
Hiányzik az MCLR kondi, javasolt a soros ellenállás, hogy a kondi ne zavarja be a pickit MCLR-t
(#) kissi válasza zlanczky hozzászólására (») Szept 17, 2026 /
 
Szia!

A konfigurációs biteknél kikapcsoltad az LVP-t ?!
(#) Hp41C válasza zlanczky hozzászólására (») Szept 17, 2026 /
 
Release változatot fordítottál és programoztál be? Debug verzió nem fut programozó/debugger nélkül.
(#) pipi válasza zlanczky hozzászólására (») Szept 17, 2026 /
 
Jársz itt a fórumon, de ugy latszik a válaszok nem érdekelnek
(#) zlanczky válasza pipi hozzászólására (») Szept 17, 2026 /
 
Szia, bejelentkezve maradtam a gépen, szorri. Kösz a választ, ki is fogom próbálni, de nehéz egy nyákon módosítani. (meg közbe jött 10 kg lecsó eltevése)
(#) zlanczky válasza kissi hozzászólására (») Szept 17, 2026 /
 
Igen, ki van kapcsolv az LVP.
(#) zlanczky válasza Hp41C hozzászólására (») Szept 17, 2026 /
 
Mivel nem lehet debugolni, soha sem fordítok Debugost.
(#) Bakman válasza zlanczky hozzászólására (») Szept 17, 2026 /
 
Nagy valószínűséggel tápfeszültség problémák vannak a rendszerben. Kontroller mekkora órajelről jár?
(#) zlanczky válasza Bakman hozzászólására (») Szept 17, 2026 /
 
8Mhz van beállítva. Egyébként az alkalmazás nem időkritikus, éles üzemben majd 1-2-5 percenként (beállítható) mér egy kört, küldi az adatokat és elmegy aludni. Most 10 sec alvás van, a teszt miatt.
(#) kaqkk válasza zlanczky hozzászólására (») Szept 17, 2026 /
 
A rajzon 32768khz kvarc van és csak az osc 1 re bekötve ... Akkor ez most hogy ?
A hozzászólás módosítva: Szept 17, 2026
(#) benjami válasza kaqkk hozzászólására (») Szept 17, 2026 /
 
Van belső 8MHz-es RC oszcillátora.
(#) Gafly válasza benjami hozzászólására (») Szept 18, 2026 /
 
Hát igen, ez a baj uC-vel.
Programtól függ a lábak funkciója, meg még sok más is belül.
Ma már messze nem elég, ha beazonosítjuk a tokot...
(#) kaqkk válasza benjami hozzászólására (») Szept 18, 2026 /
 
Jó lenne ha legaláb a program konfigárucációs részét feltennéd ide hogy lássuk egyáltalán miről beszélünk , az 32768 as kvarc ha a rajzod szerint van bekötve szerintem teljesen felesleges mert ott-és úgy nem működik .A 8 megás belső oszci akkor működik ha be van állítva a konfigurációban az hogy van benne csak egy dolog .És még lehet hogy keveredés is van a fogalmaidközt mert az RC oszci igényel külső R-C elemeket amit szintén nem látunk a rajzodon .
A hozzászólás módosítva: Szept 18, 2026
(#) Bakman válasza kaqkk hozzászólására (») Szept 18, 2026 /
 
Az a kvarc a Timer1-hez van csatolva.
(#) kaqkk válasza Bakman hozzászólására (») Szept 19, 2026 /
 
Kondik nélkül soha nem használtam kvarcot ,így is lehet ?
(#) Bakman válasza kaqkk hozzászólására (») Szept 19, 2026 /
 
Szép fogás. Könnyen lehet, hogy ez a probléma alapja attól függően, a program hogyan viszonyul a Timer1-hez.
(#) zlanczky válasza Bakman hozzászólására (») Szept 22, 2026 / 2
 
Köszönöm az észrevételt és a hozzászólásokat. A nyákot átalakítom kondis kvarc használatra.
Az eredeti probléma okai ezek voltak:
1. Brown-out Reset (BOR) áramlökés miatt: Amikor a PIC kiadta a parancsot a perifériák bekapcsolására, a LoRa modul és a szenzorok üres kondenzátorai a rákapcsolás pillanatában hirtelen hatalmas áramot szippantottak ki (Inrush Current). Az MCP1702 feszültségszabályzó ettől egy mikroszekundumnak a töredékére letérdelt, a PIC tápfeszültsége bezuhant, és a belső Brown-out Reset áramkör azonnal újraindította a processzort. Ez egy végtelen körforgást okozott (elindul → bekapcsol → bezuhan → resetel → újraindul), ami miatt a szoftver sosem jutott el a mérésig, és a PICkit tápsegítsége nélkül működésképtelen volt.
2. A "Zombi" állapot (Fantom táplálás): Amikor a PIC alvó módba kapcsolt, a perifériatáp lekapcsolása után a hardveres UART soros porti adó (TX) lába High (3.3V) szinten maradt. Ez a feszültség a belső védődiódákon keresztül titokban visszafolyt a LoRa modulba, amely így nem tudott teljesen kikapcsolni, hanem egy 2.2V-os fagyott zombi állapotban maradt. Ébredéskor a modul nem kapott tiszta indítást, nem reagált a PIC-re, ami újabb fagyáshoz vagy a Watchdog miatti folyamatos újrainduláshoz vezetett.
A megoldás ez lett:
1. Fizikai pufferelés (Hardveres javítás): Ráforrasztottunk egy 100 µF-os elektrolit kondenzátort közvetlenül a PIC táplábai (VDD/VSS) közé. Ez a kondenzátor fizikai energiatartalékként működik: mint egy villámgyors akkumulátor, képes áthidalni azt a kritikus pillanatot, amikor a perifériák rákapcsolódnak a tápra, így a PIC feszültsége nem zuhan be többé.
2. Szoftveres lágyindítás (Soft-start szimuláció): Átírtuk a set_periph_on() függvényt. Ahelyett, hogy a tápot egy durva lökéssel kapcsolnánk be, a PIC egy gyors for hurokban, apró impulzusokkal (PWM-szerűen szaggatva) lassan, lépcsőzetesen tölti fel a perifériák kondenzátorait. Ezzel megszüntettük a hirtelen, nagy áramlökést.
3. Az UART lekapcsolása alvás előtt (Fantom táp elvágása): A sleep_seconds() függvény elejére bevezettük az RCSTA.SPEN = 0; parancsot, amely teljesen lekapcsolja a PIC belső soros port modulját. Ezzel elértük, hogy az UART TX lába alvás közben elengedje a feszültséget, a 3.3V_SW tápsín valóban leessen 0V-ra, a LoRa modul pedig tiszta indítást (Power-On Reset) kapjon minden egyes ébredéskor.

Mindenkinek köszönöm a segítséget, irányba állított.
(#) Jonni válasza zlanczky hozzászólására (») Szept 23, 2026 /
 
Idézet:
„A mostani esetben egy pic16f886 procit használok,”


Csak egy apróság.....

A pic16f886 nem proci hanem mikrokontroller vagy röviden MCU...
(#) kuner hozzászólása Csü, 16:22 /
 

12f675

Sziasztok!

Van egy kód, amit gemini írt, mert én nem értem a programozást.
De valamiért sosem jó.

Amit tudnia kellene a 12f675-nek, 4mhz belső órajellel:

Pin6 bemenet, hozzá tartozó kimenet pin2.
Pin7 bemenet, hozzá tartozó kimenet pin3.

Ha 6ra érkezik impulzus, akkor a kimenet magas szintre vált. A harmadik impulzusig tartja a kimeneti magas szintet, a 3. lefutó élre a kimenet alacsony szintre vált.

Ugyan ez a másik bemenet-kimenet párosnál.

Ha egyik bememettre jel érkezik, de még nem csengett le a művelet, viszont másik bemenetre érkezik impulzus, akkor előző folyamatot megszakitja és az aktuális kimenetet emeli magas szintre.

Ennek kelleni működnie. Hogy kellene kinéznie a kódnak?

  1. #include <xc.h>
  2.  
  3. // Konfigurációs bitek
  4. #pragma config FOSC = INTRCIO   // Belső oszcillátor, GP4/GP5 I/O-ként működik
  5. #pragma config WDTE = OFF       // Watchdog Timer kikapcsolva
  6. #pragma config PWRTE = ON       // Power-up Timer bekapcsolva
  7. #pragma config MCLRE = OFF      // GP3/MCLR pin digitális bemenetként működik
  8. #pragma config BOREN = ON       // Brown-out Detect bekapcsolva
  9. #pragma config CP = OFF         // Kódvédelem kikapcsolva
  10. #pragma config CPD = OFF        // Adat EEPROM kódvédelem kikapcsolva
  11.  
  12. #define _XTAL_FREQ 4000000
  13.  
  14. // Lábak definíciója
  15. #define INPUT_A  GP5    // Pin 2
  16. #define INPUT_B  GP4    // Pin 3
  17. #define OUTPUT_A GP1    // Pin 6
  18. #define OUTPUT_B GP0    // Pin 7
  19.  
  20. void main(void) {
  21.     // Analóg bemenetek kikapcsolása (Minden láb digitális I/O)
  22.     ANSEL = 0x00;
  23.     CMCON = 0x07;       // Komparátorok kikapcsolása
  24.    
  25.     // TRISIO regiszter: 1 = Bemenet, 0 = Kimenet
  26.     // GP5=1, GP4=1, GP1=0, GP0=0 -> 0b00110000 (0x30)
  27.     TRISIO = 0x30;
  28.    
  29.     // Kimenetek alaphelyzetbe állítása (0V)
  30.     OUTPUT_A = 0;
  31.     OUTPUT_B = 0;
  32.    
  33.     // Állapotváltozók
  34.     unsigned char pulse_A = 0;
  35.     unsigned char last_state_A = 0;
  36.    
  37.     unsigned char pulse_B = 0;
  38.     unsigned char last_state_B = 0;
  39.    
  40.     while(1) {
  41.         // ================= A CSATORNA (GP5 -> GP1) =================
  42.         unsigned char current_A = INPUT_A;
  43.        
  44.         if (current_A != last_state_A) {
  45.             if (current_A == 1) {
  46.                 // Felfutó él: megérkezett az impulzus
  47.                 pulse_A++;
  48.                 if (pulse_A == 1) {
  49.                     OUTPUT_A = 1; // 1. impulzusnál kimenet High (5V)
  50.                 }
  51.             } else {
  52.                 // Lefutó él: véget ért az impulzus
  53.                 if (pulse_A >= 3) {
  54.                     OUTPUT_A = 0; // 3. impulzus lefutó élére kimenet Low (0V)
  55.                     pulse_A = 0;  // Számláló nullázása
  56.                 }
  57.             }
  58.             last_state_A = current_A;
  59.         }
  60.        
  61.         // ================= B CSATORNA (GP4 -> GP0) =================
  62.         unsigned char current_B = INPUT_B;
  63.        
  64.         if (current_B != last_state_B) {
  65.             if (current_B == 1) {
  66.                 // Felfutó él
  67.                 pulse_B++;
  68.                 if (pulse_B == 1) {
  69.                     OUTPUT_B = 1;
  70.                 }
  71.             } else {
  72.                 // Lefutó él
  73.                 if (pulse_B >= 3) {
  74.                     OUTPUT_B = 0;
  75.                     pulse_B = 0;
  76.                 }
  77.             }
  78.             last_state_B = current_B;
  79.         }
  80.     }
  81. }
Következő: »»   1226 / 1227
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