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   703 / 1210
(#) Pali79 válasza sandor81 hozzászólására (») Szept 16, 2015 /
 
Én PK2-öt, de ez sem eredeti, a Sure Electronic gyártotta. Nézegesd a vaterát, jófogást és itt az aprót, fel-fel szokott bukkanni egy-egy.
(#) sandor81 válasza Pali79 hozzászólására (») Szept 16, 2015 /
 
köszi a segítséget szétnézek majd hátha ráakadok egyre majd.
(#) Hp41C válasza sandor81 hozzászólására (») Szept 17, 2015 /
 
Ha nem találnál építs egy PICkit2 -t vagy PICkit2.5 -öt. A kontroller felprogramozásában majd segítünk.
(#) sandor81 válasza Hp41C hozzászólására (») Szept 17, 2015 /
 
köszi de lehet inkább a kész vásárlása mellett döntök mert akkor az építés adta hibák nem okoznak problémát legalább.
(#) jonatani01 hozzászólása Szept 18, 2015 /
 
Sziasztok!

ADXL345 gyorsulásmérővel szeretnék játszadozni, I2C protokollon keresztül kommunikálva vele, de az adatlapjában ezeket a sorokat valahogy nem tudom értelmeni:

Idézet:
„With the SDO pin high the 7 bit I2C address
for the device is 0x1D, followed by the read/write bit. This
translates to 0x3A for write, 0x3B for read. An alternate I2C
address of 0x53 (followed by the read/write bit) may be chosen
by grounding the SDO pin (pin 12). This translates to 0xA6 for
write, 0xA7 for read.”


Tfh az SDO bemenet magas logikai szinten van, ez esetben a cím az adatlap szerint 0x1D. Ezt követi még az írás/olvasás bit, de a 0x1D-t (B'0001 1101') hogyan követheti még egy r/w bit ha az már amúgy is 8 bit összesen?
És ez a mondat után, amiben állította hogy a 0x1D címen érhető el az áramkör olyat mond hogy a 0x3A és 0x3B-vel tudok írni olvasni rá. Most akkor mégsem a 0x1D a címe?
Ezt nem tudom értelmezni. Van aki már használta az áramkört, vagy van valami ötlete?

Üdv.: Jona
(#) Zsolt2 válasza jonatani01 hozzászólására (») Szept 18, 2015 / 1
 
A 7 bites cim a 0x1D (0b001 1101), amit kovet meg 1 bit, ami az olvasas vagy iras.
Iras eseten 0x3A, vagyis 0b0011 1010, ahol a sotetitett resz az eszkoz cime+iras bit.
(#) jonatani01 válasza Zsolt2 hozzászólására (») Szept 18, 2015 /
 
Jaj de jó! Köszönöm szépen!
(#) haward hozzászólása Szept 19, 2015 /
 
Sziasztok segítséget szeretnék kérni, nem rég kezdtem el PIc programozással foglalkozni és sajnos meg akadtam és nem találok rá megoldást (több fórumot olvasok napok óta hátha). Csak egy egyszerű áramkört építettem először egy PIC16F883 -al 8 db ledet kapcsolganék több variációba. MPLAb-al írtam rá a programot Assmebly-ben. A PIC RB0-RB7 ig használom a lábakat és nincs külső kvarcom rajta. Az alábbi kép lenne a kapcsolás. A program égetés végén azt írja hogy kész, nem ír ki hibát, de nem is történik semmi. Megpróbáltam kiolvasni a programot, de a program memory az végig 3FFF. Az égetés alatt egy külső tápot azaz egy 1.5 A -es USB-s töltőt használok és erről is működne. Ha valaki tudna segíteni azt meg köszönném. (Amit nem írtam egy PicKit 2 klónnal égetnék, én csináltam de elviekben működik mert egy másik klón PIC-jére is ezzel lett rá égetve a program) Eredetileg egy óra lett volna az első projektem, mivel itt megakadtam nem biztos hogy azt sikerült volna megcsinálni. Egyébként a Program csak annyit csinálna hogy egy kis időzítéssel több féle variációba kapcsolgatná fel a ledeket. (Az MCLR lábra nincs rakva 10K felhúzó ellenállás ez okozhat problémát?)
(#) qvasz2 válasza haward hozzászólására (») Szept 19, 2015 /
 
Olvasd el a sárga kiemelést fent! Pont neked íródott!
Ha a Reset lábat nem húzod föl tápra, akkor a program nem tud elindulni, a kontroller áll!
A kondikat se hagyd le a táplábakról!
A hozzászólás módosítva: Szept 19, 2015
(#) Bakman válasza haward hozzászólására (») Szept 19, 2015 /
 
Be lehet állítani a Reset lábat bemenetnek is, ilyenkor nem kell a külső felhúzás, de ha jól látom, nálad ez kimaradt. Config1: MCLRE bit.
(#) Pali79 válasza haward hozzászólására (») Szept 19, 2015 /
 
Ha feltennéd az asm-et is okosabbak lennénk, de 100nF-os kondi nagyon hiányzik a táplábak közeléből.
A start részből biztosan hiányzik az I/O-k digitálisra állítása.
A hozzászólás módosítva: Szept 19, 2015
(#) foxi63 válasza haward hozzászólására (») Szept 19, 2015 /
 
Szia!
A rajzodon fel van cserélve a + és - tápfesz, remélem csak a rajz téves...
Még valami: 8db led 160mA áram és az adatlapon pedig:
Maximum current out of VDD pin ........................................95 mA
üdv.: Foxi
A hozzászólás módosítva: Szept 19, 2015
(#) Pali79 válasza haward hozzászólására (») Szept 19, 2015 / 1
 
Jobban megnézve az Mplab képet rájöttem, hogy szerintem te le sem fordítottad a programot és a nagy semmit programoztad be a pic-be.
(#) cross51 hozzászólása Szept 20, 2015 /
 
Sziasztok!

Flash írás törléssel kapcsolatban lenne egy kérdésem(16f1455).

A doksiban az van leírva, hogy a megszakítást törlés és írás legelején kell kikapcsolni és a végén vissza, de én kipróbáltam úgy, hogy csak az unlockba kapcsoltam ki vagy egyáltalán nem kapcsoltam ki és nem történt hiba. De előfordul, hogy nem a megfelelő adat kerül a memóriába így?
(#) kissi válasza cross51 hozzászólására (») Szept 20, 2015 /
 
Ha azt írják, akkor célszerű betartani, mert ők ismerik a belső felépítést és időzítéseket, Te nem tudod az összes, esetleg előforduló kombinációt kipróbálni, azaz esetleg üzem közben egyszer csak majd hibázik !
(#) mark.budai hozzászólása Szept 20, 2015 /
 
Sziasztok!
Csináltam egy pices áramkört, de olyannal találkoztam, amire még sosem volt gondom.
Adok tápot az áramkörnek, működik rendesen. Ha közelítek hozzá a kezemmel, resetel, és lefagy. 100n van a táplábakon, a tápegység annyit tesz, hogy 26V-ról megy az áramkör, és van benn egy 7818, illetve egy 7833. Azért 3,3V a tápfesz, mert egy RFM12b modult vezérel a pic. De ezzel sem volt eddig probléma. A program elején két regisztert állítok be, az OSSCON és ADCON1-et. Valami kimarad a programból?
A kontakthibát, illetve egyéb fizikai jellemzőket kizárnék, mert két áramköröm van, és mindkettő ugyan ezt csinálja.
A vezérlő típusa: 18F2455
A hozzászólás módosítva: Szept 20, 2015
(#) Bakman válasza mark.budai hozzászólására (») Szept 20, 2015 /
 
Reset belső vagy külső? Ha külső, fel van húzva tápra?
(#) zenetom válasza mark.budai hozzászólására (») Szept 20, 2015 /
 
SW és HW hiányában kevés bármit is mondani...
Viszont én inkább javasolnám a kvarc használatát, gondolom ha az OSCCON-t állítod, akkor belső oszciról megy. De ettől még nem kéne szerintem ilyet csinálnia. Több info kéne...
(#) mark.budai válasza Bakman hozzászólására (») Szept 20, 2015 /
 
Külső reset, 10k-val tápra húzva. Belső oszcillátort használok, 8MHz-en.
Átírtam 1Megára a belső oszcit, de úgy is ezt csinálja, így nem hiszem, hogy köze lenne hozzá, legalábbis nem volt túl nagy az órajel.
A hozzászólás módosítva: Szept 20, 2015
(#) kissi válasza mark.budai hozzászólására (») Szept 20, 2015 /
 
Az alacsony feszültségű programozás lábat letiltottad a konfigurációnál ?!
(#) mark.budai válasza kissi hozzászólására (») Szept 20, 2015 /
 
Szia! Ami erre tartozik, azon a részen csak ez van:
  1. #pragma config STVREN = ON      // Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
  2. #pragma config LVP = ON         // Single-Supply ICSP Enable bit (Single-Supply ICSP enabled)
  3. #pragma config XINST = OFF      // Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled (Legacy mode))

Nem is találom, hogy tiltva lenne, de mindjárt megnézem a fordítóban.
(#) kissi válasza mark.budai hozzászólására (») Szept 20, 2015 /
 
Az LVP-t tedd OFF-ba ( különben marad a szentelt víz ! ) !
Egyébként az oldal tetején, ha elolvastad volna a sárga ajánlásokat, akkor talán már figyeltél volna erre is !
A hozzászólás módosítva: Szept 20, 2015
(#) mark.budai válasza kissi hozzászólására (») Szept 20, 2015 /
 
Köszi!
A sárga sávot elolvastam többször is, nem akartam én használni az LVP-t, de eddig elcsúszott fölötte a szemem. Köszi, hogy figyelmeztettél! Most már szépen működik az áramkör.
(#) ativagyok hozzászólása Szept 23, 2015 /
 
Sziasztok!

Egy 16F630-as PIC-el szeretnék megvalósítani annyit, hogy a PORTA-n lévő gombok megnyomásakor a PORTC adott bitje negálódjon. Tehát: PORTA.F0-on megnyomott gomb esetén: PORTC.F0 = ~PORTC.F0; (Az állapotokat EEPROM-ba menti, hogy következő indításkor megmaradjanak az állapotok. Tudom, hogy az alkalmazott módszer nem a legjobb, de elviekben működnie kéne)

PORTA lábai 5V-ra vannak húzva, a nyomógombok földre. Az alábbi program teljesen működésképtelen. PORTC értéke egyáltalán nem úgy változik, ahogy kéne, van hogy az egész PORTC értéke 0 lesz egy gomb megnyomásakor, van hogy nem történik semmi.
Valakinek esetleg van ötlete, hogy mi lehet a gond?

  1. volatile char oldstate;
  2.  
  3.  
  4. void load(){         //Load the previously saved PORT values
  5.      PORTC.F0 = EEPROM_Read(0x07);
  6.      PORTC.F1 = EEPROM_Read(0x08);
  7.      PORTC.F2 = EEPROM_Read(0x09);
  8.      PORTC.F3 = EEPROM_Read(0xA);
  9.      PORTC.F4 = EEPROM_Read(0xB);
  10. }
  11.  
  12. void main() {
  13.  
  14. CM2_bit = 1;
  15. CM1_bit = 1;   // Disable comparator
  16. CM0_bit = 1;
  17.  
  18. TRISA = 0x0F;
  19. TRISC = 0x00;
  20.  
  21. PSA_bit = 1;   //Prescaler is assigned to the WDT
  22. PS0_bit = 1;
  23. PS1_bit = 1;   //   WDT Rate: 1:2
  24. PS2_bit = 1;
  25.  
  26. load();
  27.  
  28.  
  29. do{
  30.  
  31. if (Button(&PORTA, 0, 3, 0)) {               // Toogle PortC.F0 pin
  32.       oldstate = 1;                             // Update flag
  33.     }
  34.     if (oldstate && Button(&PORTA, 0, 3, 1)) {   // Detect one-to-zero transition
  35.       PORTC.F0 = ~PORTC.F0;                      // Toogle PortC.1 pin
  36.       EEPROM_Write(0x07, PORTC.F0);
  37.       oldstate = 0;                              // Update flag
  38.     }
  39.    
  40. if (Button(&PORTA, 1, 3, 0)) {               // Toogle PortC.F0 pin
  41.       oldstate = 1;                             // Update flag
  42.     }
  43.     if (oldstate && Button(&PORTA, 1, 3, 1)) {   // Detect one-to-zero transition
  44.       PORTC.F1 = ~PORTC.F1;                      // Toogle PortC.1 pin
  45.       EEPROM_Write(0x08, PORTC.F1);
  46.       oldstate = 0;                              // Update flag
  47.     }
  48.    
  49. if (Button(&PORTA, 2, 3, 0)) {               // Toogle PortC.F0 pin
  50.       oldstate = 1;                             // Update flag
  51.     }
  52.     if (oldstate && Button(&PORTA, 2, 3, 1)) {   // Detect one-to-zero transition
  53.       PORTC.F2 = ~PORTC.F2;                      // Toogle PortC.1 pin
  54.       EEPROM_Write(0x09, PORTC.F2);
  55.       oldstate = 0;                              // Update flag
  56.     }
  57.  
  58. if (Button(&PORTA, 3, 3, 0)) {               // Toogle PortC.F0 pin
  59.       oldstate = 1;                             // Update flag
  60.     }
  61.     if (oldstate && Button(&PORTA, 3, 3, 1)) {   // Detect one-to-zero transition
  62.       PORTC.F3 = ~PORTC.F3;                      // Toogle PortC.1 pin
  63.       EEPROM_Write(0xA, PORTC.F3);
  64.       oldstate = 0;                              // Update flag
  65.     }
  66.    
  67. if (Button(&PORTA, 4, 3, 0)) {               // Toogle PortC.F0 pin
  68.       oldstate = 1;                           // Update flag
  69.     }
  70.     if (oldstate && Button(&PORTA, 4, 3, 1)) {   // Detect one-to-zero transition
  71.       PORTC.F4 = ~PORTC.F4;                      // Toogle PortC.1 pin
  72.       EEPROM_Write(0xB, PORTC.F4);
  73.       oldstate = 0;                              // Update flag
  74.     }
  75.  
  76. asm CLRWDT;
  77.  
  78. }while(1);
  79. }
(#) sonajkniz válasza ativagyok hozzászólására (») Szept 23, 2015 /
 
Nem tudom, C-ben hogy van ez, de szerintem az eepromba byte-okat mentünk, nem bit-eket.
Azaz a komplett c port értékét mentsd el, egyetlen helyre, és egyben is töltsd vissza!
(#) ativagyok válasza sonajkniz hozzászólására (») Szept 23, 2015 /
 
Köszönöm az észrevételt, módosítom.
Egyelőre viszont kikommenteztem az EEPROM-mal kapcsolatos részeket, mert a PORTC.0 folyamatosan változik, és emiatt egy PIC-ben már elszállt az EEPROM.
Ezen kívül WPUA = 0; sorral kikapcsoltam a belső felhúzó ellenállásokat.
Jelenleg többnyire nem történik semmi a nyomógombok lenyomásakor.
(#) Zsolt2 válasza ativagyok hozzászólására (») Szept 23, 2015 /
 
A gombokon nincs prellmentesites, ez igy nem valoszinu, hogy jol fog menni. A Button fuggvenynek mi a 3. parametere pontosan, mert nem sikerult rajonnom. A belso felhuzo ellenallas mindenkeppen kell, ha nem hasznalsz kulso ellenallast.
(#) sonajkniz válasza ativagyok hozzászólására (») Szept 23, 2015 /
 
Figyeltesd a PIC-el a saját tápfeszét, és csak akkor végezz mentést, ha a táp lecsökken. Így csak kikapcsoláskor ment. (Nénmelyik PIC típusban van beépített LVD)
A nyomógombot pergésmentesítetted?
(#) ativagyok hozzászólása Szept 23, 2015 /
 
A nyomógombok külső 4k7-os ellenállással vannak tápfeszre húzva, ezért kapcsoltam ki a belső felhúzó ellenállásokat.
Prellmentesítésnek 100nF-os kondik a bemenet és a föld között + szoftveres is van a függvényben.
A Button függvény első paramétere a porton belüli bit, a második a prell időtartama ms-ban, a második a logikai aktív szint.
Az EEPROM-os részt át fogom írni.
Köszönöm az észrevételeket.
A hozzászólás módosítva: Szept 23, 2015
(#) sonajkniz válasza ativagyok hozzászólására (») Szept 23, 2015 / 1
 
Változatlanul nem értek a C-hez, de a sima időalapú pergésmentesítés nem minden nyomógombnak elég. Ezért én ezt úgy szoktam megoldani, hogy ahányszor záródik az érintkező, nullázom a pergésmentesítő számlálóját. Így a nyomógombhoz igazodik a pergési idő.
Következő: »»   703 / 1210
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