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   1135 / 1203
(#) spgabor válasza usane hozzászólására (») Okt 7, 2020 /
 
Miért nincs értelme mellé a PIC-nek? Igazából mindkettő megoldás érdekelne, a wifis és a lan-os is.
(#) Lamprologus válasza spgabor hozzászólására (») Okt 7, 2020 / 1
 
Egy ESP modul önmagában is képes megoldani ezt a feladatot, nem kell hozzá PIC.
Bővebben: Link
(#) spgabor válasza Lamprologus hozzászólására (») Okt 7, 2020 /
 
Igen, ezen gondolkodtam már, hgoy a PIC megfelelő-e. Előtte Ardiuno és a Raspberry is szóba jött. De Raspberry drága és sok funkciót nem használ. Arduino is jó lehet, viszont ethernet, wifi és rfid modullal eddig sokkal drágábbnak tűnt, mint PIC-kel megvalósítva.
(#) Lamprologus válasza spgabor hozzászólására (») Okt 7, 2020 / 1
 
Pl: NodeMcu ? ... 2 Euro ... Arduino IDE alól programozható ... rfid modult ugyan úgy rá lehet kötni mint a PIC-re, és rajta van a wifi is ...
(#) spgabor válasza Lamprologus hozzászólására (») Okt 7, 2020 /
 
Köszönöm, ezzel még nem találkoztam egyáltalán. Ami esetleg érdekelne vele kapcsolatban, hogy vn saját memóriája, ahova fix adatokat kiírhatok és megmarad áramszünet esetén?
(#) Lamprologus válasza spgabor hozzászólására (») Okt 7, 2020 / 1
 
Én még nem használtam ... de hirtelen ezt találtam: Bővebben: Link

De ezt már az Arduino, vagy az ESP8266 wifi modul topikban kéne folytatni...
A hozzászólás módosítva: Okt 7, 2020
(#) nedudgi válasza Lamprologus hozzászólására (») Okt 7, 2020 /
 
Az ESP01 modul memóriája cserélhetö akár 32MB flash memóriára.
Ha csak adatgyűjtés a cél, még Basic is fellelhető.
(#) spgabor válasza Lamprologus hozzászólására (») Okt 7, 2020 /
 
Igen, eléggé elmentünk a témától, elolvasom a linkeket és elképzelhető, hogy ejtem a pic-et. Illetve átmegyek a megfelelő topicba.
(#) usane válasza spgabor hozzászólására (») Okt 7, 2020 / 1
 
A LAN-os megoldás lehet PIC plusz ethernet chip, pl amit írtam enc28j60, vagy más. Ehhez a linkelt MLA-ban találsz TCP/IP lib-et. Ugyanezen chipek mehetnek PIC helyett akár arduinoval vagy ahogy írtad raspberryvel, vagy valamilyen ARM-el is. A WiFi-s megoldás lehet amit linkeltél is, PIC plusz ESP, de ha nem ragaszkodsz a PIC-hez az ESP elég sokmindent tud kezelni a WiFin kívül is egymagában. Ha meg kevés lenne az ESP8266 (kezdésnek nem valószínű) akkor ott az ESP32. Ha NodeMCU-t veszel(mindkettőből van NodeMCU verzió) akkor nem kell semmi átalakító csak egy mikroUSB kábel a programozáshoz. Ami a nem felejtő memóriát illeti az minden mikrovezérlőben van, lévén, hogy a programmemória is az. Ha más nincs is rajta abból lehet használni mindig. Manapság viszont már minden mikrovezérlőn található külön erre a célra kialakított memória rész. Általában nem EEPROM hanem FLASH. Ahogy neduddgi írta az ESP modulon cserélhető is egy kis forrasztással, de általában felesleges. Valamint partícionálható is. A sima modulokat nem tudom fejből, a NodeMCU-n általában 4GB flash van.
(#) icserny válasza spgabor hozzászólására (») Okt 7, 2020 / 1
 
Természetesen van, és pl. NodeMCU modult Lua vagy microPython nyelven programozva fájlokat is létrehozhatsz illetve beolvashatsz.
(#) Peet19 hozzászólása Okt 7, 2020 /
 
Sziasztok!
A 12F675-nek szeretném letiltani az analóg lábait. Ehhez elég az ANSEL regiszter alsó 3 bitjét 0-ra állítani, vagy kell még valamit az ADCON0 regiszterbe is írni?
A többi lábat amit nem használok magas vagy alacsony szintre állítsam?
Előre is köszi a segítséget!
(#) Bakman válasza Peet19 hozzászólására (») Okt 7, 2020 / 1
 
ANSEL alsó négy bitje érdekes. Az ANSEL összes bitje lehet nulla. Az ADCON regiszter induláskor nullákkal van feltöltve, azzal nem kell foglalkoznod.
(#) Peet19 válasza Bakman hozzászólására (») Okt 7, 2020 /
 
OK. Köszönöm. Még egy dolgot nem értek.
A CONFIG-ban belső oszcillátorra állítottam, és az OSCCAL beállt 10000000 -ra. Azt mondja az adatlap hogy ez egy középfrekvencia, és még hogy belső oszcillátor esetén fix 4MHz a freki.
Van még két lehetőség a maximum és a minimum frekvencia. Ez mennyi és mit jelent pontosan? Vagy ezt csak külső oszcillátor esetén lehet használni?
(#) Bakman válasza Peet19 hozzászólására (») Okt 7, 2020 / 1
 
Az OSCCAL segítségével a belső órajelet lehet kalibrálni 4 MHz-re, ezt meg lehet csinálni pl. a PICKit2-vel is. Ez csak a belső órajelre vonatkozik, a külsőt, legyen az bármilyen típusú, nem tudja befolyásolni. Állítólag az OSCTUNE regiszterrel kb. ±10 %-os értéket lehet elérni, OSCCAL regiszterhez nem találtam adatot. Éppenséggel le lehet mérni. Fix kitöltésű PWM, max. és min. OSCCAL értékekkel frekvenciamérés, aztán majd kisül belőle valami.

Én úgy tudom (lehet, hogy hibásan), az OSCCAL-t igazábol nem illik piszkálni. Kalibrálod és kész, rábólintasz, hogy innentől a belső órajel 4 MHz-es. Más szerepe van, mint az OSCTUNE regiszternek, már amelyik kontrollerben van ilyen.
(#) Peet19 válasza Bakman hozzászólására (») Okt 7, 2020 /
 
Értem, köszi. Csak furcsa volt hogy nincs konkrétan meghatározva a frekvencia mint a többi PIC-nél. Azért annyira nem harcolok hogy lemérjem a max. min. OSCCAL értékeket, csak nem értettem a helyzetet, de elfogadom hogy a belsőoszcillátor fix 4MHz, és nem is piszkálom. Itt nincs OSCTUNE.
Az időzítéssel kapcsolatban is van amit nem értek, de előtte azért átnézem mégegyszer hátha megértem . Ha nem akkor jövök.
(#) spgabor válasza usane hozzászólására (») Okt 7, 2020 /
 
Köszönöm a sok információt. Megnézem mindegyik lehetőséget és a számomra legmegfelelőbbel megpróbálkozom. Valószínűleg fogok még kérdezni az adott topicban.
(#) icserny válasza Peet19 hozzászólására (») Okt 8, 2020 / 1
 
Halvány emlékeim szerint az analóg komparátort is le kell tiltani (CMCON = 7), ha pusztán digitális ki/bemenetek kellenek. Bővebben: Link
(#) Peet19 válasza icserny hozzászólására (») Okt 8, 2020 /
 
Köszi a linket, tanulságos.
(#) Peet19 válasza Bakman hozzászólására (») Okt 8, 2020 /
 
Próbálom a Timer1-et beállítani de nem teljesen tiszta minden. Bemásolom az eddigi kódom, majd nézzétek meg hogy jó-e:

  1. void main(void) {
  2.    
  3.     ANSEL = 0x0;              // az összes analóg kimenet letiltva. Digitálisra állítva.
  4.     ADCON0bits.ADON = 0;      // A/D átalakító letiltva. Nem fogyaszt áramot.
  5.     TRISIObits.TRISIO5 = 0;   // A GP5-ös láb kimenet
  6.  
  7.     PIE1bits.TMR1IE = 1;      // Timer1 megszakítást engedélyező bit bekapcsolva
  8.     INTCONbits.GIE = 1;       // Globális megszakítás engedélyezése
  9.     INTCONbits.PEIE = 1;      // Periféria megszakítás engedélyezése
  10.    
  11.     T1CONbits.TMR1GE = 0;     // 6.bit. Tiltókapu kikapcsolva. Timer1 állandóan működik.
  12.     T1CONbits.T1CKPS1 = 0;    // 5.bit. Előosztó első bitje
  13.     T1CONbits.T1CKPS0 = 1;    // 4.bit. Előosztó második bitje. Ez így 1:2 -es osztási arány
  14.     T1CONbits.T1OSCEN = 0;    // 3.bit. Timer1 oszcillátor kikapcsolva
  15.     T1CONbits.nT1SYNC = 0;    // 2.bit. Külső órajelszinkroizálónak most nincs szerepe
  16.     T1CONbits.TMR1CS = 0;     // 1.bit. Belső órajel kiválasztása
  17.     T1CONbits.TMR1ON = 0;     // 0.bit. Timer1 még nincs bekapcsolva
  18.    
  19.     GPIObits.GP5 = 1;         // GP5 kimenet magas szintű
  20.    
  21.    
  22.     return;
  23. }


Csak magamnak részleteztem ennyire tanulás céljából. Tudom hogy sokkal egyszerűbben is meg lehet oldani, de nekem ez így most átláthatóbb mintha binárisan adtam volna meg a T1CON-t.
Az egyik kérdésem az lenne, hogy a Timer1 beállításai így jók-e? A másik hogy ha megszakítás érkezik akkor a PIR1 - TMR1IF bitet kell ellenőrizni? Vagyis nem non-stop pörgetek egy while-t, hanem ha megszakítás történik akkor a proci "szól" a programnak és lefut egy szubrutin ahol ellenőrzöm a TMR1IF bitet?
(#) Bakman válasza Peet19 hozzászólására (») Okt 8, 2020 /
 
Eddig jónak tűnik. A megszakítást nem figyelni kell non-stop, különben másra nem jut idő, hanem egy szubrutint kell írni rá, ami lefut, ha a megszakítás bekövetkezik. Egy jó ismertetőt találsz pl. itt: How to use pic microcontroller timers as a interrupt. Kb. mindegy, milyen kontrollerre íródtak a példák, legfeljebb át kell forgatni adott PIC-re a regiszterek neveit, bitjeit. A megszakításban kell ellenőrizni a bitet hogy tudd, honnan jött a megszakítás. Kb. az összes megszakítás így működik, pepitában.

A "proci szól a programnak" kicsit faramuci kifejezés, mert a processzor hajtja végre a programba folgalt lépéseket.
(#) Peet19 válasza Bakman hozzászólására (») Okt 8, 2020 /
 
Értem, köszönöm. A linket olvasgattam és az lenne a kérdésem, hogy az interrupt()-ot mi hívja meg? Mert a main() -ben nincs függvényhívás.
(#) Bakman válasza Peet19 hozzászólására (») Okt 8, 2020 /
 
Azt a programrészletet a kontroller végrehajta megszakítás esetén "automatikusan", de hogy pontosan mi zajlik a háttérben, nem tudom, ennyire nem merültem bele a témába.
(#) Peet19 válasza Bakman hozzászólására (») Okt 8, 2020 /
 
Ok. Köszi. Akkor nem kell semmi spéci "valami beágyazott" deklaráció? Csak simán írok egy interrupt függvényt és a proci automatikusan végrehajtja?
(#) kissi válasza Peet19 hozzászólására (») Okt 8, 2020 /
 
Szia!

Idézet:
„Akkor nem kell semmi spéci "valami beágyazott" deklaráció?”


Az engedélyezett (--> engedélyezni kell!) megszakítás(ok) az esemény bekövetkeztekor a program végrehajtását egy előre meghatározott memóriacímre (PIC15F675-nél ez a 4-es memória!) irányítják át és az ott talált programot kezdik el futtatni egészen a RETFIE utasításig, aminek a hatására visszatérnek a megszakítás bekövetkeztekor következő végrehajtandó utasításra, azaz a korábbi helyen folytatódik a program. Fontos azonban, hogy a megszakítás során ugyanazokat a regisztereket és parancsokat használod, mint a főprogramban ( azaz a mikrokontroller regisztereit és utasításkészletét!), ezért általában meg fognak változni bizonyos regisztereknek vagy biteknek az értéke ! Ha olyan változik meg, amit a főprogramodban is használsz, akkor a megszakításba történő belépésnél ezeket először el kell mentened, valamint a megszakítás végén a mentésből vissza kell töltened,! A megszakítás abban különbözik alapvetően a szubrutintól, hogy nem tudod, hogy a főprogram melyik részén következik be, így az általa megváltoztatott változók a további működést befolyásolják, míg a szubrutint Te hívod adott pillanatban meg és így tudod a hatásait !

Nem tudom milyen C fordítót használsz, de a 4-es megszakításhoz tartozó memóriahelyet ismerik, csak tudatni kell velük, hogy a függvény, amit írsz, az megszakításhoz tartozik, valamint a 12F675 csak egyszintű megszakítást ismer, így ha több forrás is kiválthat megszakítást, akkor a megszakításfüggvény (Interrupt Service Routine --> ISR ) elején kell eldöntened a megfelelő bitek segítségével, hogy honnan érkezett a kérés!

szerk.: a fordítód megszakításra vonatkozó leírását, példáit nézd át!

Remélem érthető volt... !?
A hozzászólás módosítva: Okt 8, 2020
(#) Peet19 válasza kissi hozzászólására (») Okt 10, 2020 / 1
 
Szia!
Bocsi a késői válaszért de most jutottam gépközelbe. Ezt azért még egy kicsit tanulgatnom kell, de amit írtál azért nagyjából értem, köszönöm. Átnéznem még az adatlapját de már kezd tisztulni a dolog.
MPLABX-et használok és XC8 a fordító. Köszi mégegyszer.
(#) gabilow hozzászólása Okt 13, 2020 /
 
Üdv Mindenkinek!
Van egy MAX7219 7 seg kijelzőm ami mutatja az adó által küldött kinti hőmérsékletet. Szeretnék a kijelzőre küldeni egy "fok" és egy nagy"C" karaktert is a hőmérséklet után, de nem tudom hogy kell generálni.
Az előre programozott karakterek helyére is lehetne( H,E,L,P...), ezek nem kellenek.
Most ezt a programot használom:Bővebben: Link
Előre is köszi.
(#) Hp41C válasza gabilow hozzászólására (») Okt 13, 2020 /
 
Idézet:
„Szeretnék a kijelzőre küldeni egy "fok" és egy nagy"C" karaktert is a hőmérséklet után, de nem tudom hogy kell generálni.”

Sehogy
A kódolás az IC -ben fixen be van építve.
(#) usane válasza gabilow hozzászólására (») Okt 13, 2020 /
 
Ha nem akarod szétszedni akkor sehogy, ahogy Hp41C is írta.
(#) gabilow válasza Hp41C hozzászólására (») Okt 13, 2020 /
 
Hát, köszi. Akkor nem marad más megoldás, teszek rá 6 db külön kijelzőt( az első a minusz jelnek kell). Az utolsó 2-re küldök 2 "8"-ast, a felesleges lábakat levágom.
Most találtam:Bővebben: Link
A hozzászólás módosítva: Okt 13, 2020
(#) Bakman válasza Hp41C hozzászólására (») Okt 13, 2020 /
 
Bármit meg tud jeleníteni, csak a Decode müzemmódot kell kikapcsolni, így a szegmensek bitenként vezérelhetőek.
Következő: »»   1135 / 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