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   1183 / 1203
(#) pipi válasza Bakman hozzászólására (») Nov 9, 2022 /
 
C-ben nem éred el "mezei módon" a carry-t. Esetleg több bites számábrázolást kell választani, az nem "csordul túl"
(#) sonajkniz válasza pipi hozzászólására (») Nov 9, 2022 /
 
Idézet:
„C-ben nem éred el "mezei módon" a carry-t”

Ezt úgy értsem, hogy C-ben nem lehet kiolvasni a Status regisztert? Vagy hogy nem lehet bitműveleteket csinálni?
(#) Hp41C válasza pipi hozzászólására (») Nov 9, 2022 /
 
Elérhető a cary flag: if (STATUSbits.C)...
Azt, hogy egy összetettebb művelet után mi is az értéke, egy másik kérdés.
A hozzászólás módosítva: Nov 9, 2022
(#) pipi válasza sonajkniz hozzászólására (») Nov 9, 2022 /
 
Az a baj hogy a C több asm utasításra fordítja le a C utasítást... az hogy az egyik C utasításban "beállt" flag-ből a következő C utasításig mi lesz, csak a jó ég tudja, pláne még egy kis optimalizálás is lesz az utasításokon. De igazából nekem még soha nem volt erre szükségem C program közben...
(#) kissi válasza sonajkniz hozzászólására (») Nov 9, 2022 /
 
Szia!

Idézet:
„Azaz 8bit x 8bit, ami sosem lesz több 16 bitnél, azaz túl sem csordul.”


Két 8 bites szám szorzata lehet 17 bites ( persze, nem általános esetben!) !
(#) sonajkniz válasza kissi hozzászólására (») Nov 9, 2022 /
 
Idézet:
„Két 8 bites szám szorzata lehet 17 bites”

Nem lehet.
A legnagyobb 8 bitben felírható szám a 255, azaz hexában az FF.
FF x FF = FE01 azaz 65025. Vagyis még a legnagyobb 16 bitben felírható számot sem éri el.
(#) sonajkniz válasza pipi hozzászólására (») Nov 9, 2022 /
 
Idézet:
„De igazából nekem még soha nem volt erre szükségem C program közben...”

Elhiszem, de nekem szinte csak olyan projektjeim vannak, amihez szinte lehetetlen C-ben programot írni. Vagy csak brutál hardver árán lehetne.
Hogy érthető legyek.
Jelenleg egy olyan feladaton dolgozom, hogy 4 hidraulika hengert kell pontos pozícióba állítani táblázatban lévő adatok alapján. Ez 4 encodert jelent meg 8 szelepet. Igazából nem egy nagy feladat, csakhogy még 600 ezer forintért sem lehet olyan PLC-t kapni, ami fogad 4 encodert.
Én meg megoldom egy 5"-os Nextionnal, egy PIC18F14K22-vel és két PIC12F1840-el.
A munkáltatóm meg jó sokat spórol.
(#) patrik81 válasza sonajkniz hozzászólására (») Nov 9, 2022 /
 
Igen, pont ez kell. köszi
(#) patrik81 válasza Pali79 hozzászólására (») Nov 9, 2022 /
 
Igen, faliórába szeretném a gps-t, mert azzal lekérdezhetem a pontos időt is.
(#) Lamprologus válasza patrik81 hozzászólására (») Nov 9, 2022 / 1
 
Épületen belül nem mindig jó a GPS vétel... Én ezért egy ESP01-es modullal netről kérdezem le a pontos időt.
(#) Kera_Will válasza patrik81 hozzászólására (») Nov 9, 2022 / 1
 
Szerencsés csillagzat alatt elvileg időnként szinkronizilhátod a wekkert.
Esetleg egy hosszabb koax amin külső aktív gps vevőantennát kötsz az órához.
(ha már ablak párkányon / közelében ki tud látni akkor esélyesebb).
A hozzászólás módosítva: Nov 9, 2022
(#) kissi válasza sonajkniz hozzászólására (») Nov 9, 2022 /
 
Elnézést kérek, igazad van, benéztem... !
(#) Bakman válasza pipi hozzászólására (») Nov 9, 2022 /
 
Nekem sem kellett még, csak kíváncsi voltam, van-e biztos módszer. Egy mikrokontrollernél azért lehet tudni, milyen max. és min. értékekkel kell számolni.
(#) Pali79 válasza patrik81 hozzászólására (») Nov 10, 2022 /
 
Nekem az "egyszerű" jelzőről nem pont a GPS szinkron jut eszembe...
(#) patrik81 válasza Pali79 hozzászólására (») Nov 10, 2022 /
 
Igazad van, az uarttal nekem is meggyűlt a bajom, de szerintem minél több pénzed van, annál jobb, okosabb, és egyszerűbb dolgokhoz juthatsz.
(#) Bakman válasza patrik81 hozzászólására (») Nov 10, 2022 / 1
 
Itt egy egyszerű GPS jelfeldolgozó, hátha tudod használni. Három adatot kapsz vissza: idő, érvényesség és dátum. Itt van egy jó oldal, pontosan milyen adatokat tartalmaznak az egyes NMEA mondatok: http://aprs.gids.nl/nmea/. A megszakítás PIC16F18426-ra íródott, azt módosítanod kell majd, a többi "univerzális".

  1. extern volatile uint8_t tick;
  2. extern volatile uint8_t gps_rawbyte;
  3.  
  4. void __interrupt() interrupts(void) {
  5.  
  6.     if (PIR3bits.RC1IF) {
  7.  
  8.         gps_rawbyte = RC1REG;
  9.         tick = 1;
  10.  
  11.     }
  12.  
  13. }
  1. extern volatile uint8_t tick;
  2. extern volatile uint8_t gps_rawbyte;
  3. extern volatile uint8_t gps_time[6];
  4. extern volatile uint8_t gps_valid;
  5. extern volatile uint8_t gps_date[6];
  6.  
  7. void gps_getdata(void) {
  8.  
  9.     uint8_t rx_data[4];
  10.     uint8_t a;
  11.  
  12.     while (!(rx_data[3] == 'R' && rx_data[2] == 'M' && rx_data[1] == 'C' && rx_data[0] == ',')) {
  13.  
  14.         while (!tick);
  15.         tick = 0;
  16.  
  17.         rx_data[3] = rx_data[2];
  18.         rx_data[2] = rx_data[1];
  19.         rx_data[1] = rx_data[0];
  20.         rx_data[0] = gps_rawbyte;
  21.  
  22.     }
  23.  
  24.     for (a = 5; a < 255; a--) {
  25.  
  26.         while (!tick);
  27.         tick = 0;
  28.         gps_time[a] = gps_rawbyte;
  29.  
  30.     }
  31.  
  32.     while (gps_rawbyte != ',') {
  33.         tick = 0;
  34.     }
  35.  
  36.     while (!tick);
  37.     tick = 0;
  38.  
  39.     gps_valid = gps_rawbyte;
  40.  
  41.     a = 0;
  42.     while (a < 7) {
  43.  
  44.         while (!tick);
  45.         tick = 0;
  46.         if (gps_rawbyte == ',') {
  47.             a++;
  48.         }
  49.  
  50.     }
  51.  
  52.     for (a = 5; a < 255; a--) {
  53.  
  54.         while (!tick);
  55.         tick = 0;
  56.         gps_date[a] = gps_rawbyte;
  57.        
  58.     }
  59.  
  60. }
Idő: két-két bájt, óra, perc és másodperc sorrendben. Dátum szintén két-két bájt, nap, hónap és év sorrendben. Érvényesség: ha nem 'A' karaktert kapsz, akkor a modul által küldött adatok csak becsültek. A=ok, V=warning.
(#) Bakman válasza Bakman hozzászólására (») Nov 10, 2022 /
 
Bocsánat, egy hiba maradt a programban, ez a jó:
  1. extern volatile uint8_t tick;
  2. extern volatile uint8_t gps_rawbyte;
  3. extern volatile uint8_t gps_time[6];
  4. extern volatile uint8_t gps_valid;
  5. extern volatile uint8_t gps_date[6];
  6.  
  7. void gps_getdata(void) {
  8.  
  9.     uint8_t rx_data[4];
  10.     uint8_t a;
  11.  
  12.     while (!(rx_data[3] == 'R' && rx_data[2] == 'M' && rx_data[1] == 'C' && rx_data[0] == ',')) {
  13.  
  14.         while (!tick);
  15.         tick = 0;
  16.  
  17.         rx_data[3] = rx_data[2];
  18.         rx_data[2] = rx_data[1];
  19.         rx_data[1] = rx_data[0];
  20.         rx_data[0] = gps_rawbyte;
  21.  
  22.     }
  23.  
  24.     for (a = 5; a < 255; a--) {
  25.  
  26.         while (!tick);
  27.         tick = 0;
  28.         gps_time[a] = gps_rawbyte;
  29.  
  30.     }
  31.  
  32.     while (gps_rawbyte != ',') {
  33.         while (!tick);
  34.         tick = 0;
  35.     }
  36.  
  37.     while (!tick);
  38.     tick = 0;
  39.     gps_valid = gps_rawbyte;
  40.  
  41.     a = 0;
  42.     while (a < 7) {
  43.  
  44.         while (!tick);
  45.         tick = 0;
  46.         if (gps_rawbyte == ',') {
  47.             a++;
  48.         }
  49.  
  50.     }
  51.  
  52.     for (a = 5; a < 255; a--) {
  53.  
  54.         while (!tick);
  55.         tick = 0;
  56.         gps_date[a] = gps_rawbyte;
  57.  
  58.     }
  59.  
  60. }
(#) patrik81 válasza Bakman hozzászólására (») Nov 11, 2022 /
 
Köszi, lementettem. Most az a helyzet, hogy megtaláltam a régi programot. Azzal működik a gps, de ronda a program, és nem nagyon tudok benne módosítani. Lehet az egészet át kell írnom. Mindent át kell nyálaznom, azokat a programrészeket is amiket írtatok. Ez el fog tartani egy darabig. Remélem sikerrel járok, bár már előre félek
(#) treshold hozzászólása Nov 13, 2022 /
 
Érdeklődöm, hogy a PIC18F16Q40-et lehet-e valami hekkelős módszerrel programozni PICKIT2 vagy 3-mal? Alapból nem támogatja
(#) Hp41C válasza treshold hozzászólására (») Nov 13, 2022 /
 
Az MpLabX IPE program PICkit3 -mal támogatja.
(#) bitmixer válasza treshold hozzászólására (») Nov 13, 2022 /
 
A választ megkaptad, én csak egy érdekességet írok: meg akartam nézni, hogy az általam használt PK2DeviceFile tartalmazza-e. Kiderült, hogy nem, de a file dátuma napra pontosan 10 éves ma
(#) treshold válasza Hp41C hozzászólására (») Nov 13, 2022 /
 
Köszi, de még mindíg nem tiszta. Ha a PICKIT3-mal rácsatlakozom (PICKIT3 saját progival, MpLabX IPE nélkül) , fe fogja ismerni illetve a hex filt fel lehet rá rakni?
(#) Bakman válasza treshold hozzászólására (») Nov 13, 2022 /
 
Nem. Telepítened kell az MPLABX IPE programot és a PICkit3 saját programja helyett azt kell használnod.
(#) oregharcos válasza Bakman hozzászólására (») Nov 13, 2022 /
 
Szia Bakman! Próbáltuk megoldani egy fórum társsal de nem sikerült. Most egy kapujelzőt kell csinálnom. Csengetéskor egy rövid dal, ajtónyitáskor egy másik dalt kell lejátszani. Két PIC-el megtudom oldani, azt nem, hogy egy PIC12675-el menjen. Megoldható egy PIC-el, ha igen hova tegyem a hanghoz tartozó kódot? Nagyon köszönöm a segítségeteket előre is!
(#) Bakman válasza oregharcos hozzászólására (») Nov 13, 2022 /
 
Ha két kontrollerrel meg tudod oldani, akkor az egyikben lévő kódot kell beilleszeni a másikba. Vagy nem értem, hol akadtál el.
(#) oregharcos válasza Bakman hozzászólására (») Nov 13, 2022 /
 
Szia Bakman! Köszönöm a segítségedet! Ha egy kontrollerrel csinálom, akkor van egy nyomógomb, amit egy "if-el" tudok rá hivatkozni, hogy pl. a B-port 1-es pin-en L- szintre váltásra induljon. Viszont ha két gombom van akkor már két if-el kellene, de az nem lehet. Tehát itt akadtam el. hogyan indítson egy másik dalt? Ami érdekes, hogy a BASCOM-ban egyszerűen megoldják. Amikor az assemblert tanulgattam, ott is két gombbal tudtam indítani, hogy jobbra vagy balra fusson a fénycsík. A C-ben viszont nem értem, hogy miként oldjam meg?
(#) Bakman válasza oregharcos hozzászólására (») Nov 13, 2022 /
 
Pl.:
  1. if (!RA0){
  2. //egyik gom
  3. }
  4. if (!RA1){
  5. //másik gomb
  6. }
A gombok polaritása aktív alacsony.
(#) oregharcos válasza Bakman hozzászólására (») Nov 14, 2022 /
 
Bakman, nagyon köszönöm a segítséget! majd a héten próbálkozok vele. Jó éjszakát Neked!
A hozzászólás módosítva: Nov 14, 2022
(#) KoblogPerGyok válasza patrik81 hozzászólására (») Nov 15, 2022 /
 
Szia!

Ne GPS-el vedd a jelet, hanem a Hamburgi (Frankfurti?) atomóra jelét kell fogadni. Kissé macerásabb lehet a szinkronizálás, de a jel bemegy a házba is. Ilyenekkel működik egy csomó óra.

DCF77

https://www.instructables.com/Arduino-DCF77-Master-Wall-Clock/

https://www.hobbielektronika.hu/cikkek/dcf77_ora_keszitese_egyszeru...l.html
A hozzászólás módosítva: Nov 15, 2022
(#) alita hozzászólása Nov 16, 2022 /
 
Tisztelt Fórumtársak !

Sikerült a PIC16F877A programozása.Mivel nem vagyok a programozásban profi egy kérdésem
lenne:
Ha megnyitom a hex fájlt a PC-n,teljesen más adatok jelennek meg mint a programozón.Rendben
van ez így?
Következő: »»   1183 / 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