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   561 / 1210
(#) don_peter válasza kissi hozzászólására (») Aug 30, 2014 /
 
Kösz a tippet. Rá nézek.
(#) don_peter válasza kissi hozzászólására (») Aug 30, 2014 /
 
Megnéztem a CMCON registert, de sajnos nem hozott eredményt.
Nem tudom H szintre emelni az RA4-et.
További ötlet?
A hozzászólás módosítva: Aug 30, 2014
(#) kissi válasza don_peter hozzászólására (») Aug 30, 2014 /
 
Nem látom a programodat...!
ADCON1 be van állítva ?
(#) don_peter válasza kissi hozzászólására (») Aug 30, 2014 /
 
Az init() így néz ki.
Csak a lábakat állítgatom.
  1. void init(void){
  2.     /*********************************************
  3.         +               Ki / Bemenetek
  4.         **********************************************/
  5.         TRISA = 0;
  6.         TRISD = 0;
  7.         TRISB = 0;
  8.         TRISE = 0;
  9.         TRISC = 0;
  10.         ADCON0 = 0;
  11.         ADCON1 = 0x0F;    //Minden láb digitális
  12.         CMCON = 0;
  13. }

Utána LATA regiszterrel szórakozom, de csak L szintet enged, ha H szintre állítom akkor inputként definiálja.
A hozzászólás módosítva: Aug 30, 2014
(#) icserny válasza don_peter hozzászólására (») Aug 30, 2014 /
 
Szerintem CMCON = 0; helyett CMCON = 7; lesz a nyerő!
(#) kissi válasza don_peter hozzászólására (») Aug 30, 2014 /
 
A CMCON-ra nézz már rá mégegyszer !
(#) don_peter válasza icserny hozzászólására (») Aug 30, 2014 /
 
Természetesen próbáltam és sajnos ugyan az a szitu..
(#) don_peter válasza kissi hozzászólására (») Aug 30, 2014 /
 
Nem tudom mire gondolsz, de már átnyálaztam teljesen de sikertelen a kísérlet..
Van konkrét ötleted a beállításra?
(#) kissi válasza don_peter hozzászólására (») Aug 30, 2014 /
 
  1. void main(void)
  2.  
  3. {
  4.         TRISA = 0;
  5.         TRISD = 0;
  6.         TRISB = 0;
  7.         TRISE = 0;
  8.         TRISC = 0;
  9.         ADCON0 = 0;
  10.         ADCON1 = 0x0F;    //Minden láb digitális
  11.         CMCON = 7;
  12.        
  13.         LATA=0;
  14.         LATA=0xFF;
  15.        
  16.         while(1);
  17.  
  18. }

Ez így megy ( szimulátorban néztem ! ) !
(#) don_peter válasza kissi hozzászólására (») Aug 30, 2014 /
 
Csatoltam az eredményt.
Nem működik sajnos.
Szívok vele rendesen...
A hozzászólás módosítva: Aug 30, 2014

4550_lata.JPG
    
(#) kissi válasza don_peter hozzászólására (») Aug 30, 2014 /
 
Ennek jónak kell lennie, mert az MPLAB-ban megy! Gond csak a konfigurációs bitekkel lehet, amit a Proteus tudtommal figyelembe vesz, míg az MPLAB nem ! Azok hogy állnak ?

szerk.: Úgy látom, hogy fut a program a proteusban ( a kék szín a kimenetet v. alacsony szintet jelez ?) !! Amennyiben igen, akkor próbáld ki élesben, mert lehet, hogy "bugos" !
A hozzászólás módosítva: Aug 30, 2014
(#) don_peter válasza kissi hozzászólására (») Aug 30, 2014 /
 
Jaja pont ahogyan mondod..
Vagy kimenet vagy L szint.
Én is erre kezdek gyanakodni, ha csak nem valamelyik konfigurációs beállításom szól be a hibás működésbe.
Átnyálazom azokat is és majd meglátom..
Köszi a segítséget...
(#) kissi válasza don_peter hozzászólására (») Aug 30, 2014 /
 
Küldd át a hexet és megnézem !
(#) don_peter válasza kissi hozzászólására (») Aug 30, 2014 /
 
Annyit módosítottam, hogy LATA4 az villogni fog.. vagy is villognia kellene..

  1. void main(void)
  2.      
  3.     {
  4.             TRISA = 0;
  5.             TRISD = 0;
  6.             TRISB = 0;
  7.             TRISE = 0;
  8.             TRISC = 0;
  9.             ADCON0 = 0;
  10.             ADCON1 = 0x0F;    //Minden láb digitális
  11.             CMCON = 7;
  12.            
  13.             LATA=0;
  14.             LATA=0xFF;
  15.            
  16.             while(1){
  17.                                 LATAbits.LATA4 = !LATAbits.LATA4;
  18.                                 Delay10KTCYx(200);
  19.                         }
  20.      
  21.     }
A hozzászólás módosítva: Aug 30, 2014

Release.hex
    
(#) kissi válasza don_peter hozzászólására (») Aug 30, 2014 / 1
 
Ez működik ( a késleltetést nem tudtam kivárni , de a többi jó! ) !

szerk.: megnéztem, az is jó!
A hozzászólás módosítva: Aug 30, 2014
(#) Birs Alma válasza Hp41C hozzászólására (») Aug 30, 2014 /
 
Sajna nem. Nekem úgy tűnik az a helyzet, hogy a 24C04, 24C08 és 24C16 esetében az eszköz címzésére (is) használt első bájban kell megadni a megcímzett memória címének felső bitjeit.

Ennek egyszersmind az a következménye, hogy a 24C04 cím bájtja 1010AACR formátumú. Ahol R az írást vagy olvasást jelenti, C-ben van a 9. címbit, mert ugye 512 byte (4kbit) címzéséhez már 9 bit kell. 1010 meg a memóriaeszköz alap címe. AA-n meg beállítható egy saját cím, amivel így 4 chip közül lehet választani.

Na most 24C08 esetében 1010ACCR a formátum, hiszen itt már 10 bites a címbusz, de még mindig marad egy bit az eszköz kiválasztására.

24c16 esetében vége a dalnak, ott 11 bites cím miatt nincsen lehetőség a chip egyedi címének beállítására. A chip adott lába pedig, (hogy ne maradjanak kihasználatlanul) Vdd-re kötve protected módba állítják a megfelelő memórialapot.

olyan 24CXX esetében ahol XX>16 a három bit már egyébként sem lenne elég, ezért ott az a három bit megint csak használható a chip megcímzésére (így egyetlen I2C buszon 2^3 db ilyen eszköz használható) a memória címzést meg úgy oldották meg, hogy külön byte-ban el kell küldeni a cím felső bitjeit.

A PCF8583 egyetlen bitet tart fent az eszköz kiválasztásra. De az is a legalsó. A cím byte itt: 1010xxCR formájú. Olyan 24CXX-el lehet tehet csak egy buszon használni, amelyik címbusza maximum 8 bites (24C02, 24C01) vagy amelyik címbusza több mint 11 bites. 24C32 stb.

Kivettem a PCF8583 mellől a 24C16-ot. Szerencsére tokot forrasztottam be. Persze mindennek akkor kellett volna utána néznem mikor...most már mindegy.

Viszont a PCF8583 óra chippel is gondom van, de azt egy másik bejegyzésbe...

Minden esetre kösz a válaszodat, és kösz, hogy foglalkoztál a dologgal. Nekem ST-s chipem van. Az tuti így működik és a Microchip-es is. Az AT-nál nem tudom mi a helyzet.

L.
A hozzászólás módosítva: Aug 30, 2014
(#) kissi válasza Birs Alma hozzászólására (») Aug 30, 2014 /
 
Valamit elnézel! I2C-nél először megcímezzük az eszközt ( ez általában 7 bites + R/W ) és utána jöhetnek a parancsok, a memóriacellák címzése, ami pl. 11 bitnél 2 byte! Nézd át újra az adatlapot!!
A hozzászólás módosítva: Aug 30, 2014
(#) don_peter válasza kissi hozzászólására (») Aug 30, 2014 /
 
Bosszantott a dolog így én is összedobtam egy tesztpanelt.
Tényleg működik, a szimulátoromban valami bug lehet ami miatt nem akarta az igazságot.
Köszi a segítséget és a tesztet.
(#) kissi válasza don_peter hozzászólására (») Aug 30, 2014 /
 
OK !
(#) Birs Alma válasza kissi hozzászólására (») Aug 30, 2014 /
 
Nem hinném, hogy elnéztem.
(#) kissi válasza Birs Alma hozzászólására (») Aug 30, 2014 /
 
Igazad van, nem néztem meg előtte az adatlapot, csak emlékből írtam ( az úgy működött, csak az nagyobb memóriaméretű volt!) !
(#) Birs Alma válasza kissi hozzászólására (») Aug 30, 2014 /
 
Teljesen igazad van. A 16 felettiek úgy működnek, ahogy írtad. Jó sokat szívtam, mert én is azt hittem, amelyik 8 bitnél szélesebb adatbusszal rendelkezik, mind úgy működik, ahogy Te is írtad. Hogy külön lehet címezni a memóriát meg az eszközt, de nem. Hogy miért...??? Értelmetlen dolog szerintem. Biztos valami kompatibilitási megfontolás miatt tartották az eszköz fejlesztői jó ötletnek.
A hozzászólás módosítva: Aug 30, 2014
(#) kissi válasza Birs Alma hozzászólására (») Aug 30, 2014 /
 
Így nem az adatokból kell "kihalászni" a block váltó biteket, ezért egyszerűbb lehet a dekódoló ! Ezek kisméretű EEPROM-ok, úgy gondolták, hogy vegyél nagyobbat, ha nagyobb tárra van szükséged ! Ott lehet azért kellett a váltási lehetőség, mert a technológia még nem volt meg a nagyobb kapacitásokra és akkor többől kellett összerakni ( ez csak ötletelés ! ) !
A hozzászólás módosítva: Aug 30, 2014
(#) Birs Alma válasza kissi hozzászólására (») Aug 30, 2014 /
 
Igazad lehet, csak ezzel megszívatták azokat, akik a 24C04/08/16 memória mellett más eszközt is használni akarnak ugyan azon az I2C buszon. Pl. engem.
(#) don_peter hozzászólása Aug 30, 2014 /
 
Ezen kérdéseim már nem aktuálisak..
Ha már kipróbáltam az A4-es bit működését gondoltam kipróbálom a pergésmentesítést is, hogy miért akassza le a szimulátort.
Összekábeleztem és hardveren sem ment.
Addig-addig agyaltam még rá nem jöttem, hogy gyakorlatilag a beállított és nem bekötött (memória) SPI portok miatt akadt le a program.
Nem találta a Memóriát
Most bekötöttem mindent amit a program megkövetel és voalá Működik....
(#) pajti2 válasza AZoli hozzászólására (») Aug 31, 2014 / 1
 
Egykori Aug 15 körüli problémára, kibírják-e 0v tápfesz mellett a pic32-esek a lábaikon beérkező 3.3v-ot.

AZoli külön kérésére jelezném, hogy mostanra már jó sokat használtam pic32mx795-ösöket (sparkfun-ék bitwhacker-jei) fixen összekötve, és gyakori eset volt, hogy egyik-másik tápfesz nélkül lógott rajta a másik vonalain. Részemről úgy tapasztaltam, nulla probléma van vele. Valószínűleg az összes pic32-es kibírja bármelyik 5v tolerant pin-en 0v tápfesz mellett, ha egy másik zargatja 3.3v-os jelekkel.
(#) cmdnetwizard hozzászólása Aug 31, 2014 /
 
Sziasztok!

Egy aprócska gondom van, mégpedig hogy sehogy sem bírom működésre bírni a pic32-met, pedig mindent a dokumentáció alapján csináltam,
Idézet:
„The following is a list of
pin names, which must always be connected:
• All VDD and VSS pins
(see Section 2.2 “Decoupling Capacitors”)
• All AVDD and AVSS pins (regardless if ADC module
is not used)
(see Section 2.2 “Decoupling Capacitors”)
• VCAP/VCORE
(see Section 2.3 “Capacitor on Internal Voltage
Regulator (VCAP/VCORE)”)
• MCLR pin
(see Section 2.4 “Master Clear (MCLR) Pin”)
• PGECx/PGEDx pins used for In-Circuit Serial
Programming™ (ICSP™) and debugging purposes
(see Section 2.5 “ICSP Pins”)
• OSC1 and OSC2 pins when external oscillator
source is used
(see Section 2.8 “External Oscillator Pins”)”


Mellékleben lévő két kép tanúskodik erről, egy a kapcs rajz, másik meg az összekötés.
28 milliószor leellenőriztem a bekötést, a felprogramozás megy, kiolvasás megy, de mikor ráadom pickit2-ről a tápfeszt, semmi nem történik. Elvileg az RE6-os lábat kellene villogtatnia.

Beírnám a kódrészletet is, ami ezért felelős tulajdonképpen más nincs is a programban...
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <xc.h>
  4. #include <p32xxxx.h>
  5. #include <plib.h>
  6.  
  7. #pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF
  8. #pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_8, UPLLEN = OFF
  9. #pragma config FSOSCEN = OFF, IESO = OFF, OSCIOFNC = OFF, FCKSM = CSDCMD
  10. #pragma config DEBUG = OFF, PWP = OFF, BWP = OFF, CP = OFF
  11.  
  12. #define DATAU BIT_0
  13. #define DATAD BIT_1
  14. #define SET BIT_2
  15. #define STEP BIT_3
  16. #define ROWA BIT_4
  17. #define ROWB BIT_5
  18. #define OE BIT_6
  19. int main(int argc, char** argv) {
  20.  
  21.     mPORTEDirection(0);
  22.     //Itt próbáltam, hogy rögtön 1-esbe állítom a lábakat. De semmi.
  23.     mPORTEClearBits(DATAU | DATAD | SET | STEP | ROWA | ROWB | OE);
  24.     unsigned int i = 8000000;
  25.     while (1)
  26.     {
  27.         mPORTESetBits(OE);
  28.         while (--i);
  29.         i = 8000000;
  30.         mPORTEClearBits(OE);
  31.         while (--i);
  32.         i = 8000000;
  33.     }
  34.  
  35.     return (EXIT_SUCCESS);
  36. }


Valószínűsítem, hogy valamit a programban nem állítottam be, és azért nem akar életre kelni. Valamint még kipróbáltam azt is, hogy a kijelző OutputEnabled lábát közvetlen a 3,3V-ra kötöm, és úgy működik is.
Ebben kérném a segítségeteket.

Köszönöm!

Szerk.: Méricskéltem, amikor le vagyok földelve (azaz hozzáérek a PCtáp burkolatához), akkor folyamatos 0.6V-ot mérek a közös föld és a kimenet között, amikor meg nem érek hozzá akkor meg 4,8V-ot
A hozzászólás módosítva: Aug 31, 2014
(#) Dempsey válasza cmdnetwizard hozzászólására (») Aug 31, 2014 /
 
Szia!
Látom ha jól látom HS van beállítva a programba de én nem látok kvarcot a kapcsolási rajzon.
(#) cmdnetwizard válasza Dempsey hozzászólására (») Aug 31, 2014 /
 
Belső oszcillátort használom, a 8 MHZ-eset, és azt tolom fel 80 MHZ-ig PLL-lel. De akkor ezek szerint nem HS-nek kell lennie?
(#) Dempsey válasza cmdnetwizard hozzászólására (») Aug 31, 2014 /
 
Én se vagyok egy nagy szakértő csak lelkes amatőr. Szerintem próbáld meg másik félével nem a HS-el hátha jó lesz.
Következő: »»   561 / 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