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   873 / 1209
(#) cmdnetwizard válasza Hp41C hozzászólására (») Nov 8, 2016 /
 
Köszönöm a segítséget!

Már csak a Timer0-t kellene beállítanom egy 500 ms-os megszakítással... Ehhez még a doksit tanulmányozom, de ha van tippetek, hogy hogyan kezdjek neki, akkor azt megköszönném
(#) kissi válasza cmdnetwizard hozzászólására (») Nov 8, 2016 /
 
Idézet:
„Ehhez még a doksit tanulmányozom, de ha van tippetek, hogy hogyan kezdjek neki, akkor azt megköszönném”

Szerintem jól kezdtél neki !
(#) icserny válasza Hp41C hozzászólására (») Nov 9, 2016 /
 
Idézet:
„Az a gyanúm, hogy és maszkok vannak definiálva:
  1. unsigned char config =  USART_TX_INT_OFF &
  2.                                           USART_RX_INT_OFF &
  3.                                           USART_ASYNCH_MODE &
  4.                                           USART_EIGHT_BIT &                
  5.                                           USART_CONT_RX &
  6.                                           USART_BRGH_LOW;

lenne a helyes megoldás”

A Microchip az őrületbe kergeti az embert ezzel az VAGY maszk/ÉS maszk mizériával, de
van erre egy kézenfekvő megoldás: definiálni kell a projektben az USE_OR_MASK szimbólumot.
(#) Pali79 válasza cmdnetwizard hozzászólására (») Nov 9, 2016 /
 
Idézet:
„Végül sikerült megoldani úgy, hogy kiiktattam az usart library-t és megírtam a beállítást regiszterek állítgatásával...”
Még a végén áttérsz az assemblyre.
(#) Hp41C válasza icserny hozzászólására (») Nov 9, 2016 /
 
Köszönöm...
Én inkább elfelejtem az egészet, ahogy a program szerzője is tette... Ugyanis nagyon sok ember sok-sok munkaóráját fekteti be egy teljesen fölösleges programkönytárba....
Egy PIC programon belül pl. az OpenADC függvényt csak egyszer kell meghívni, akkos is teljesen fölösleges a paraméter átadás, a beállítások összeállítása egy teljesen más adattá, amit majd a meghívott eljárás bitenként letesztel és beállítja a megfelelő vezérlő regiszter megfelelő bitjeire.
Tudom, hogy ezáltal álítólag hordozható lesz a program, de azt is tudom, hogy pontosan az ADC kezelésére "alkotott" a Microchip kismillio verziót az eltérő felépítés miatt. Ezzel teljesen alkalmatlanná téve a kód hordozhatóságát....
(#) siemenstaurus hozzászólása Nov 10, 2016 /
 
Sziasztok! Tudom már volt, de nekem ez az "orvosi lovam", ezzel tanulok, szeretném a tanácsotokat kérni. Tápellátás illetve zavarszűréssel kapcsolatos kérdésem lenne.
A PIC (18f14k50, 18f6622) maga és a vezérelt rész szuperul működik, de összeszed hülyeségeket amik lehetetlenné teszik a továbblépést.

Adott egy terepasztal, ennek csinálja a váltóvezérlését. A megfelelő bemenő feltételek esetén a megfelelő lábak megfelelő ideig zárnak optokapukat amik kapcsolják a váltómotorokat. A program és a váltók működnek. A váltó visszajelzést RS flip flopok állítják 4001-es ICvel az alacsony szintre az a jel húz ami az optokaput is zárja.

A táp jelenleg egy stabil 5V 450mA-es telefon töltő (ezért jár a pofon nem is ez lesz a jövőben), de a panelen van LD33V kondikkal szűrve, a PIC 3,3Vot kap.

Minden szépen megy amíg a trafó többi dolgát be nem kapcsoljuk. Ilyenkor a bistabil oldalak véletlenszerűen átállnak. Kikapcsoláskor és bekapcsoláskor valamint olyan kapcsolókon amikor relét működtetünk.

Mi zavarhat be illetve mivel lehetne a vezérlőpaneles részt (PIC, 4001 IC) részt totál leszűrni, leválasztani?

Ebben kérném a tapasztalatotokat, segítségeteket...
Köszönöm!
(#) icserny válasza siemenstaurus hozzászólására (») Nov 10, 2016 /
 
1. Ez a kérdés nem ebbe a topikba való!
2. A konkrét kapcsolás és a kivitelezés ismeretének hiányában csak általánosságokat lehet rá mondani, ami nem biztos, hogy sokat segít rajtad:
- Elsősorban ott kell szűrni, ahol a zaj forrása van (relék, motorok, trafók).
- Célszerű zajra kevésbé érzékeny megoldásokat használni: Schmitt-triggeres bemenet, a CMOS IC-k 15 V-on működjenek, esetleg az R-S flip-flop helyett bufferelt kimenetű billenőkör stb.
(#) Pali79 hozzászólása Nov 12, 2016 /
 
Csináltam egy órát 16F886-tal, Timer1-et lépteti egy külső 32,768 kHz-es kavics. A kérdésem az lenne, hogy a pontosságán lehet -e valahogy javítani? Egy hét alatt majdnem fél percet késett.
(#) pajti2 válasza Pali79 hozzászólására (») Nov 12, 2016 /
 
Van hibakezelési elmélet két kvacot használni fel az ütemjel hibájuk csökkentésére. Gyárthatsz hőtermosztátot is csökkenteni a kvarcok hibáját csökkenteni. Szinkronizálhatsz hálózati erőforráshoz is (ami közvetve internetes atomóra), ha tudsz olyat elérni bármi módon. És nagyjából annyi.
(#) benjami válasza Pali79 hozzászólására (») Nov 12, 2016 /
 
Ha az eltérés mértéke fix, akkor több megoldás is van:
- trimmerkondi a kvarc egyik lábánál (most mekkora kondik vannak ott?)
- szoftveresen is megoldható az alábbi módon maximum +-127ppm értékkel:
Megméred mennyi ppm-et kell gyorsítani vagy lassítani az óra járásán. Egy 24 vagy 32bites számlálót minden Timer1 megszakításban megnövelsz 65536-al (ez gyakorlatilag a felső szó megnövelése eggyel). Megnézed több-e a számlálód értéke 1milliónál. Ha több, akkor kivonsz belőle 1milliót, valamint Timer1 értékét növeled vagy csökkented a korrigálandó ppm értékkel.
A csökkentést/növelést viszont elég körültekintően kell csinálni, legegyszerűbb az alábbi módszer szerint még a Timer1 interrupt-ban.
  1. while (TMR1L != 127);     // megvárjuk amíg 127 nem lesz a TMR1L
  2. while (TMR1L == 127);     // várunk amíg 127 a TMR1L (továbbmegy amint 128 lesz)
  3. TMR1L = 128 + CorrectPPM; // korr. érték hozzáadása (negatív esetén kivonása)

Ezzel kb. 4msec ideig elakasztjuk a főprogram futását, ha ez nem engedhető meg, akkor máshogy kell megoldani a korrekciót.
(#) kissi válasza Pali79 hozzászólására (») Nov 12, 2016 /
 
Szia!
Ha a hardverhez nem akarsz nyúlni, akkor szoftveresen kell "hangolni" ! Ez azt jelenti, hogy 604 800 másodperc alatt késett 30 másodpercet! Lehet például olyan megoldást választani, hogy minden 20160 másodperc után hozzáadsz 1 másodpercet, azaz 5óra 36 percenként hozzáadsz 1 másodpercet a tényleges időhöz ( persze ezt is célszerű állítani bizonyos tartományban ! ) !
(#) ktamas66 válasza Pali79 hozzászólására (») Nov 12, 2016 /
 
Az enyém is késett. Járattam kb. egy hónapig, az eltérésből kiszámoltam a valós frekit (nálam 0,5 másodperces az IT), így 16383,15129 Hz jött ki. Ezt felszoroztam 1024-el (mert asm-ben így egyszerűbb számolni), ennyivel lehet pontosabb. Csináltam egy 3 byte-os változót amibe összeadom a hibát ( 1024x(16384-16383,15129)=869), tehát minden IT-re 869-et hozzáadok. Amikor a számom túlcsordul hozzáadok a számoláshoz még egy fél másodpercet ( az 1024x16384 az 1000000h).
A hozzászólás módosítva: Nov 12, 2016
(#) Bell hozzászólása Nov 12, 2016 /
 
Sziasztok!
MPLAB 8.91, XC8 V1.34 környezetben PIC12F1501-el az
eeprom_write(0,0);
nem működik, mert a 128 Byte adatmemória Flash felső részén van kijelölve.
Az erről szóló infóban található include fájlokat a fordító nem találja.
Kérdésem, hogyan lehet hozzáférni ezzel a fordítóval a nem felejtő memória kezeléséhez?
(#) Pali79 hozzászólása Nov 12, 2016 /
 
Újabb kérdés: Miért nem tudom PIC18F26K22-nél a PORTC-t digitális bemenetként használni? Vagyis nem minden portját? A szimulátor ezt írja: Pin(s) (0x08) on PORTC can not be stimulated due to being controlled by the A/D converter Csak nem értem miért. Az idevágó regiszterek:
  1. ANSELC: b'00000000'
  2. TRISC: b'11111111'
(#) bbalazs_ válasza Pali79 hozzászólására (») Nov 12, 2016 /
 
Nem tudom, milyen nyelven dolgozol, de a K-csalad tobb tagjanal is az ANSEL regiszterek mar a memoria masik vege fele vannak, tehat nem erhetok el direktben, elotte ki kell adni a
movlb 0x0f -et, allitani, majd utana vissza movlb 0x00-t.
(#) Pali79 válasza bbalazs_ hozzászólására (») Nov 12, 2016 /
 
Assembly... Tudom, ezen túl vagyok. Szimulátorban az ANSELC bitjei szépen átállnak 0-ra, de a 2-es 3-as bitet nem lehet stimulussal piszkálni.
(#) bbalazs_ válasza Pali79 hozzászólására (») Nov 12, 2016 /
 
Ha csak a szimulatorban van ez a problema, akkor siman hiba.
Ha eloben is ez a gond, akkor pedig valami mas periferia hasznalja, nem feltetlenul AD-nek.
Tertium non datur.
(#) mrobi válasza gazspe hozzászólására (») Nov 13, 2016 /
 
PWM vagy hardveres vagy szoftveres. Ha jól gondolom téged a szoftveres érdekel. A válasz igen. 'Szoftveres PWM' kulcsszóra keress rá.
(#) gazspe hozzászólása Nov 13, 2016 /
 
Sziasztok!
Most kezdtem a PIC-cel való ismerkedést egy utángyártott PICKIT2-vel és egy PIC16f628A-val.
Lenne ezzel kapcsolatosan pár kérdésem:
Programozáshoz, az USB-re kötött pickit kimeneteket rákötöm a megfelelő lábakra, nem igényel semmi diszkrét elektronikát (talán amit olvastam róla, az mclr földrehúzása ellenállással)
PWM-et egy sima I/O portra rakott függvénnyel lehet imitálni? A delay értékét lehet változóval megadni?
Válaszokat köszönöm.
(#) Bakman válasza gazspe hozzászólására (») Nov 13, 2016 /
 
Programozáshoz nem kell a lábakat sehova kötni. A legegyszerűbb ha csak a kontroller van a programozóra kötve, a megfelelő kiosztással.

Igen, lehet a delay értékét változóval megadni. Igen, létezik szoftveres PWM.
(#) Pali79 válasza gazspe hozzászólására (») Nov 13, 2016 /
 
Az a kérdés először is, hogy milyen nyelven programozol?
(#) don_peter hozzászólása Nov 13, 2016 /
 
Uraim PIC32MX795 memóriájába akarnék írni pár byte adatot mint, ha lenne benne Eeprom.
Írt már valaki ilyen programot?
Szeretnék egy példa programot kérni, vagy valami segítséget, hogy tudnám megírni.
AN1095 nem volt a segítségemre, microchip oldala sem.
Google se a barátom most.
Előre is köszi segítséget.
(#) Hp41C válasza don_peter hozzászólására (») Nov 13, 2016 /
 
Kiolvasod az EEProm -nak felhasznált Flash program memória tartalmát RAM -ba, a RAM másolatban átírod a kívánt rekeszek tartalmát. Törlöd a lapot, majd beírod az egész lapot...
(#) don_peter válasza Hp41C hozzászólására (») Nov 13, 2016 /
 
Akkor, ha jól értem az adatlapot:
NVMCON regiszterrel állítom, hogy éppen olvasni vagy írni akarom a memóriát.
NVMADDR regiszterrel a címet adom meg.
NVMDATA regiszterrel pedig az adatot adom meg.

NVMKEY regiszter nem kell igaz? Vagy is mehet 0-ra.
NVMSRCADDR regisztert nem tudom mire is való.
(#) Hp41C válasza don_peter hozzászólására (») Nov 13, 2016 / 1
 
(#) gyoran válasza gazspe hozzászólására (») Nov 13, 2016 /
 
Szia
Alap konfigurációban az MCLR egy ellenálláson 10k-n legyen tápra húzva.
Különben össze vissza resetel, ha nincs rajta semmi.
(#) don_peter válasza Hp41C hozzászólására (») Nov 13, 2016 /
 
Köszi, az előző sokat segített.
Még lenne egy kérdésem.
Nézem az adatlapot és a flash memória 0xBD000000 címtől kezdődik.
Mettől érdemes bele írni?
A lényeg, hogy semmi képen ne nyúljak oda ahová esetleg ő is töltene valamit.
Vagy ez nem így működik?
(#) pajti2 válasza don_peter hozzászólására (») Nov 13, 2016 / 1
 
Tipp: csinálj egy statikus memória tömböt, töltsd fel adatokkal legalább az elején (valami marker szerű byte-okkal), és programból még ellenőrizheted is, hogy a mutató helyén, amit lekérdezel, csakugyan az van-e (természetesen az lesz ott). Akárhova is rakja a fordító a cuccaidat, a címét programból biztosan könnyű lesz megtalálni, és az is biztos, hogy nem fogsz ütközni semmivel, ha azt a területet felülírod.

A konstans tömbhöz pár program részlet:
  1. const unsigned enyem_tomb[4]= {0,1,2,3};
  2. unsigned* p1;
  3. unsigned tomb_address;
  4. unsigned error;


Aztán valahova beraksz egy ilyet a teszt programodba:
  1. error= 1;
  2. while(true) {
  3.   p1= enyem_tomb;
  4.   if (*p1!=0) break;p1++;
  5.   if (*p1!=1) break;p1++;
  6.   if (*p1!=2) break;p1++;
  7.   if (*p1!=3) break;p1++;
  8.   tomb_address= (unsigned)enyem_tomb;
  9.   error= 0;
  10.   break;}


Ha a kimeneten az error 0 értéken van, akkor működik a cím lekérdezés. Írj rá teszt programot, gyújts ki egy ledet, ami éppen akad kéznél tesztpanel, gondolom, akad rajta valami. A flash programozásra fentebb már kaptál tippeket.
(#) Hp41C válasza don_peter hozzászólására (») Nov 14, 2016 / 1
 
Csak le kell foglalni.... A példa az "Emulating Data EEPROM for PIC32 microcontrollers" forrásából:
  1. //For the DEE emulation operation 3 Pages should be allocated in the program memory.
  2. const unsigned int eedata_addr[NUM_DATA_EE_PAGES][NUMBER_OF_INSTRUCTIONS_IN_PAGE] __attribute__ ((aligned(4096)))={0};
(#) don_peter válasza pajti2 hozzászólására (») Nov 14, 2016 /
 
Ez elég használhatónak tűnik.
Ez a sor:
  1. tomb_address= (unsigned)enyem_tomb;
Megadja a tömb kezdetének címét?
Gondolom itt annyi byte-ot kell lefoglalnom az enyem_tomb-el amennyire szükségem van és annak az elejét megkeresnem. Igaz?

Hp41C: Ezt sajnos nem teljesen értem.
  1. const unsigned int eedata_addr[NUM_DATA_EE_PAGES][NUMBER_OF_INSTRUCTIONS_IN_PAGE] __attribute__ ((aligned(4096)))={0};
Hogy használhatnám ezt? Paraméterezéseire értem a kérdést. Meg lehet azt neki adni, hogy mondjuk csak 10byte-ot akarok használni?
Vagy csak lapokat lehet lefoglalni?
Miből tudom majd a kezdő címet?
Előre is köszi.
Következő: »»   873 / 1209
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