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   728 / 1210
(#) jdani válasza Hp41C hozzászólására (») Nov 24, 2015 /
 
Na ez már kicsit komolyabb rajz. Gondolom itt is lehet bármilyen NPN / PNP. Az NPN akár SMD is, PNP meg egy BC327. Milyenek legyenek az ellenállás értékei?
(#) ktamas66 válasza usane hozzászólására (») Nov 24, 2015 /
 
Ez csak 5V-os táp esetén működik, 12V-nál nem. Ezért kell a föld felé is tranzisztor, mivel a pic kimenete még ha open draines is nem biztos hogy elviselné a 12V-ot.
(#) usane válasza ktamas66 hozzászólására (») Nov 24, 2015 /
 
Igen, hozzá is fűztem, ha megnézed. Viszont nem tudjuk milyen kapcsolás, nem sok infot adott.
(#) usane válasza Hp41C hozzászólására (») Nov 24, 2015 /
 
Igazad van.A 12V felett elsiklottam.
(#) jdani válasza Hp41C hozzászólására (») Nov 24, 2015 /
 
Most nézem hogy van itthon smd MMBT2222A meg MMBT2907A. Mindkettő 600mA, az elég egy szegmensre nem?
(#) mark.budai válasza usane hozzászólására (») Nov 24, 2015 /
 
Ez jó ötlet volt, köszönöm! Feltelepítettem a legújabb MPLAB-et (3.15), azóta működik a debug.
(#) Pubby hozzászólása Nov 24, 2015 /
 
Üdv Mindenkinek!
Elektronikában jártas vagyok de a PIC-hez annyira nem értek, viszont kaptam egy feladatot amit meg kéne oldanom egyszerűen, gyorsan és olcsón. Gondoltam PIC-kel meglehet csinálni viszonylag gyorsan. Egy olyan 2 relés vezérlést kell csinálnom amit neten keresztül távolról lehet ki illetve be kapcsolni. Se időzíteni, se hőmérsékletet mérni se a relé állapotát nem kell visszajelezni egyszerűen csak távolról kapcsoljon ki és be a relé egy gombbal böngészőn keresztül. Tudom lehet kapni neten ilyet 20 ezer körül de olcsóbb megoldás kell.
Tudna nekem ebben valaki segíteni. Természetesen aktív részese lennék a tervezésnek mivel azért szeretném én is elsajátítani a programozást illetve honorálnám a fáradtságot is.
Előre is köszönöm ha tudnátok segíteni.
(#) steweo hozzászólása Nov 24, 2015 /
 
Sziasztok! Ez jól használható programozó?
(#) Pali79 válasza steweo hozzászólására (») Nov 24, 2015 /
 
Persze! Csak ebben is van PIC azt is fel kell tudni programozni valahogy.
A hozzászólás módosítva: Nov 24, 2015
(#) steweo válasza Pali79 hozzászólására (») Nov 24, 2015 / 1
 
Köszi, itt olvastam az oldalon a pic kezdőknek témát és ott írta,h utána kel nézni, hogy az jó.
(#) Pali79 válasza steweo hozzászólására (») Nov 24, 2015 / 1
 
Dombon ülő fűcsomó legyek ha értem ezt a mondatot...
(#) Hp41C válasza Pali79 hozzászólására (») Nov 24, 2015 /
 
Hogy Köbükit idézzem: "Nem tudhat újmagyarul ez az atom ókor".
(#) Pali79 válasza Hp41C hozzászólására (») Nov 24, 2015 /
 
Ezek szerint te érted mit akart közölni ezzel?
(#) icserny válasza Pubby hozzászólására (») Nov 24, 2015 /
 
Idézet:
„Egy olyan 2 relés vezérlést kell csinálnom amit neten keresztül távolról lehet ki illetve be kapcsolni.”


WiFi kapcsolat jó? Mert akkor ESP-01 meg egy USB-UART konverter, vagy egy NodeMCU szerintem 1000x egyszerűbben megoldja.
A hozzászólás módosítva: Nov 24, 2015
(#) KaiserA hozzászólása Nov 24, 2015 /
 
Sziasztok!
Lehet hogy hülye kérdés, de ha a hőszenzorom tudja az i2c-t, attol be kell kapcsoljam az adc-t a mikrokontrolleren, vagy nem kell?
(#) KaiserA hozzászólása Nov 25, 2015 /
 
Sziasztok!
Azt szeretném megkérdezni, hogy hogy tudok Ack bitet küldeni PIC32MXe-es kontrollernek.

  1. StartI2C1();
  2.                                                                         IdleI2C1();                                   MasterWriteI2C1(SLAVE_ADDRESS & 0xFE);
  3.                              MasterWriteI2C1(0x05);
  4.                                StartI2C1();
  5.                                 IdleI2C1();
  6.                                  MasterWriteI2C1(SLAVE_ADDRESS | 0x01);
  7.                                 fogadottadat = MasterReadI2C1();
  8.                                 fogadottadat2 = MasterReadI2C1();
  9.                                                        
  10.                                                                         StopI2C1();


PIC 16-os nál egyszerű:
UpperByte = i2c_read(ACK)
LowerByte = i2c_read(NAK)
tehát:Upperbyte=i2c_read(1);

Nálam a MasterReadI2C1(); itt nem enged beírni 1-est, vagy 0-t a zárójelbe.

MCP9808 hőszenzor adatlapján ez van, csak az ACK bittel van a bajom.:

  1. i2c_start(); // send START command
  2. i2c_write (AddressByte & 0xFE); //WRITE Command (see Section 4.1.4 “Address Byte”)
  3. //also, make sure bit 0 is cleared ‘0’
  4. i2c_write(0x05); // Write TA Register Address
  5. i2c_start(); //Repeat START
  6. i2c_write(AddressByte | 0x01); // READ Command (see Section 4.1.4 “Address Byte”)
  7. //also, make sure bit 0 is Set ‘1’
  8. UpperByte = i2c_read(ACK); // READ 8 bits
  9. //and Send ACK bit
  10. LowerByte = i2c_read(NAK); // READ 8 bits
  11. //and Send NAK bit
  12. i2c_stop(); // send STOP
A hozzászólás módosítva: Nov 25, 2015
(#) bbalazs_ válasza KaiserA hozzászólására (») Nov 25, 2015 /
 
Ha egyeb analog jelet is fel akarsz dolgozni.
De a kerdesbol ugy tunik, a szenzor digitalisan kommunikal, o maga mar belul elvegzi az ADC-t.
Igy nem szukseges.
(#) kameleon2 válasza diablo hozzászólására (») Nov 25, 2015 /
 
Végül mindkettőnknek ugyanazt a céget sikerült belinkelni .
(#) Hp41C válasza KaiserA hozzászólására (») Nov 25, 2015 /
 
Melyik fordítóról és melyik könyvtárról van szó?
(#) diablo válasza kameleon2 hozzászólására (») Nov 25, 2015 /
 
Tudom, csak a te linked egy 16F-es PIC-re mutat, így lehet elsiklik az oldal felett.
(#) KaiserA válasza Hp41C hozzászólására (») Nov 25, 2015 /
 
Szia!
C32-es fordító.
"C:\Program Files (x86)\Microchip\mplabc32\v2.02\bin\pic32-gcc.exe"
elvileg innen veszi a doglokat.
Ha jol tudom a plib.h-ban vannak a dolgok.
C:\Program Files (x86)\Microchip\mplabc32\v2.02\pic32-libs

Köszönöm
(#) siemenstaurus hozzászólása Nov 25, 2015 /
 
Sziasztok!
Félig PICes és kezdő kérdés: tisztelttel szeretném megkérdezni a véleményeteket, hogy a mellékelt skiccelt kapcsolás működőképes lehetne-e így vagy változtatásokkal,
illetve jól néztem-e hozzá alkatrészeket,
valamint a PIC szempontjából ez így egyáltalán kivitelezhető-e?
Terepasztalunk vágányút-állításos vezérlése lenne, és a relét szeretnénk kiiktatni, mert elég sok a kombináció valamint így könnyen lehetne módosítani vagy bővíteni a rendszert a későbbiek során.

Triac-kal megoldható lenne-e így, ha a váltóállító motorok irányváltása gyárilag félhullámos egyenárammal van megoldva? (Igazából ez a gond, egyenárammal már működött a dolog egy irányba.)
A Triac begyújtása után a kört a motorba épített végálláskapcsoló nyitja.

A program nem csinál mást, csak ha 1^2 láb "I" akkor pl 10^12^14 láb egymás után 3sec-ig "I".
(Motorkör: 16V AC max 1A; PIC-kör: 4,5V DC; ?tranyó: BD243C; triac: BT-137-600?)
Köszönöm!
A hozzászólás módosítva: Nov 25, 2015

kapcs.jpg
    
(#) sonajkniz válasza siemenstaurus hozzászólására (») Nov 25, 2015 /
 
Mivel nem váltófeszültséget kapcsolsz, hanem lüktető egyen feszt, így felesleges a triak. A triak, (de inkább tirisztor) a félhullám végén magátol kikapcsol. Viszont ha a vezérlő és a végrehajtó között nincs galvanikus kapcsolat, a rajzonlévő kapcsolás nem fog működni.
Használj optocsatolót, vagy szilárdtest relét. Még jobb megoldás az egyenáram, fetekkel felépített H híddal. Egyébbként, ha már PIC-et akarsz használni a terepasztalodhoz, érdemes lenne az egészet átállítani egyenáramra, és a mozdonyokat is PIC-el vezérelni.
A hozzászólás módosítva: Nov 25, 2015
(#) Hp41C válasza KaiserA hozzászólására (») Nov 25, 2015 /
 
Nézd meg a forrását a \Program Files\Microchip\xc32\v1.34\pic32-libs\peripheral\i2c\. Láthatod, hogy a MasterWriteI2C1() nem végzi el az ACK küldését. Egy másik eljárással kell elvégezni:
  1. ...
  2. I2CAcknowledgeByte(I2C1, TRUE);
  3.  
  4. if(I2CAcknowledgeHasCompleted(I2C1))
  5. {
  6.     // acknowledgment completed
  7. }
  8. ...
(#) siemenstaurus válasza sonajkniz hozzászólására (») Nov 25, 2015 /
 
Akkor is csak félhullámot kapcsolok, ha az egyenirányítás a motor "dobozán" belül a triak után történik? Csak a forgásirány váltásában van szerepe.
A H-híddal pedig szerintem az a gond, hogy 3 kivezetésem van és a közös egyszer "+" másszor "-".
balra: + o - jobbra: - + o
Ezt négy kapcsolóval lehetne megoldani, de ez így nem H-híd ugye?
Nagyon idegőrlő konstrukció amúgy. Relé volna a legegyszerűbb ez így igaz, de 38 állítómotor van és sok kombináció illetve az állítóművet nem lehet szétszedni. (Kidobnám belőlük a diódát...) ráadásul nem egységesen lettek bekötve anno. Ha egyszerre állítjuk marha zajos és sok áramot vesz fel (modellvasút léptékben). Az ilyen finomságokat most hagyjuk, hogy nem valósághű; egy elég komoly asztalról van szó.
Ezért szeretném megtartani külön körön őket valamiféle olyan eszközzel ami egyesével lehet egy egy motorhoz "hozzáférni". Igen, itt jönne a digi, hogy legyen mindegyiknek egy címe és úgy kommunikálunk velük, de a kapható technikák nem felelnek meg a célnak plusz ugye az ára.

Szeretném akkor megkérdezni: ha a fenti egyenáramú "ál H-hidas" verzió működőképes, kapcsolónak mit lehetne használni? Illetve az optocsatolós megoldásnál ha jól gondolom megmaradhatna a váltóáram a motoroknál; ott milyen paraméterű alkatrésznek kellene utánajárni?

Galvanikus kapcsolat kell vezérlő és vezérelt között! Ez hiányos ismeret volt, köszönöm!
Eddig minden vezérlésem működött, de egy körben volt a vezérelt és vezérlő.
Érzem, hogy ez már a topik határán jár, ezért külön köszönöm a segítséget!
(#) KaiserA válasza Hp41C hozzászólására (») Nov 25, 2015 /
 
Szia!

Köszönöm a segítséget. Most már csak az a bajom, amit nem értek. hogy az MCP9808 hőszenzorból kiolvasott felsosor (8-15 bitig) , azaz UpperByte nálam = 1 lesz ezt írja az LCD, A felsosor2, azaz LowerByte ( 0- 7 bitig) nálam , így 193 lesz. Az adat lap szerint ugye a hőmérséklet számolás. upperbyte*16+lowebyte/16. igy jönn ki a 28.0625 fok. Nah de nekem az a bajom, ha melegítem a szenzort, a szenzor érték semmit nem változik, egy idő után mutat , 29.0625 öt, semmi mást, meg ha kirakom a teraszra 27.0625. nem tudom mi lehet a probélma. amiért nem folyamatosna változnaka szenzorértékek. Doki 24-25. oldalán vannnak bitek, amiket irtam.
Itt az én egész programdom:
  1. #include "p32mx440f512h.h"                                                                                      //A processzor h file-ja a proc mappából
  2. #include "plib.h"                                                                                                                       //A periferiak h file-jai
  3. #include "stdio.h"
  4. #include "ctype.h"
  5. #include "string.h"
  6. #include "math.h"
  7. #include "GenericTypeDefs.h"
  8. #include "HardwareProfile.h"   
  9. #include "delays.h"
  10. #include "Compiler.h"
  11.  
  12.  
  13. //PIC alap beállításai FRC
  14. #pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1                     //80Mhz-es orajel beallitasa
  15. #pragma config POSCMOD = HS, FNOSC = FRC , FPBDIV = DIV_1                                       //Bels? kivalasztasa 8Mhz
  16. #pragma config DEBUG = OFF                                                                                                      //Debug kikapcs
  17. #pragma config ICESEL = ICS_PGx2                                                                                        //PGC1 es PGD1
  18. #pragma config PWP = PWP512K                                                                                            //Program Flash Write Protect teljes 512k írás védett
  19. #pragma config OSCIOFNC = OFF                                                                                           //CLKO enable kikapcs, a kristaly laba (ha on a bels? órát kirakja az OSC2/CLK0/RC15 lábra)
  20. #pragma config IESO = OFF                                                                                                       //Two-speed start-up disabled
  21. #pragma config FSOSCEN = OFF                                                                                            //Secondary oscillator kikapcsol (RTCC hez)
  22. #pragma config CP = OFF                                                                                                         //Code-protect kikapcsol
  23. #pragma config BWP = ON                                                                                                         //Boot flash write protect bekapcsol
  24. #pragma config UPLLEN = ON                                                                                                      //USB PLL Enable
  25. #pragma config UPLLIDIV = DIV_2                                                                                         //USB PLL Div by
  26. #pragma config FCKSM    = CSECMD                                                                                //Clock Switching & Fail Safe Clock Monitor
  27. #pragma config FWDTEN = OFF , WDTPS = PS131072 
  28. #define SYSCLK  (80000000)
  29. #define PBCLK  (SYSCLK)
  30.                        
  31. #define Fsck    50000
  32. #define BRG_VAL         ((PBCLK/2/Fsck)-2)
  33. #define SLAVE_ADDRESS 0x3F
  34.  
  35.                                                 unsigned char felsosor[16];    
  36.                                                 unsigned char alsosor[16];     
  37.                                                 int a=0;       
  38.                                                
  39.                                                 unsigned long fogadottadat=0;
  40.                                                 unsigned long fogadottadat2=0;
  41.                                                 float Temperature=0;
  42.  
  43. void init()
  44.  
  45. {
  46.  
  47.  
  48.                         //LCD INIT
  49.                         setupLCD();
  50.                         //LED1 TRIS (lásd HardwareProfile.h)
  51.                     mPORTESetPinsDigitalOut(BIT_5);
  52.                     LED_OFF(LED1);
  53.                         mPORTESetPinsDigitalOut(BIT_6);
  54.                     LED_OFF(LED2);
  55.                         mPORTESetPinsDigitalOut(BIT_7);
  56.                         LED_OFF(LED3);
  57.                         //Gomb
  58.                         mPORTESetPinsDigitalIn(BIT_2);
  59.                         mPORTESetPinsDigitalIn(BIT_3);
  60.                         mPORTESetPinsDigitalIn(BIT_4);
  61.                         //I2C
  62.                         mPORTDSetPinsDigitalOut(BIT_9 | BIT_10);                                                                                       
  63.                         mPORTDClearBits(BIT_9 | BIT_10);
  64.                 //      I2CConfigure(I2C1,     I2C_ENABLE_SLAVE_CLOCK_STRETCHING|I2C_ENABLE_HIGH_SPEED);        //I2C4 felkonfigural 400kHz-es orajellel
  65.                 //      I2CSetFrequency(I2C1, 80000000, 10000);
  66.                 //      I2CEnable(I2C1, TRUE); 
  67.                         //Timer a riasztashoz (Led villogtatas)
  68.                         OpenTimer1( T1_ON | T1_IDLE_CON | T1_SOURCE_INT | T1_PS_1_256, 0xFFFF );                                //Timer1 256-os eloosztoval, 65535-os inditoertekkel 0.2 masodpercenként lep
  69.                         ConfigIntTimer1( T1_INT_ON | T1_INT_PRIOR_3 | T1_INT_SUB_PRIOR_0 );                                             //3-as prioritassal, 0-s subprioritassal
  70.                         DisableIntT1;
  71.                         mJTAGPortEnable(0);
  72. }
  73.  
  74. void stopper()
  75.                         {
  76.                        
  77.  
  78.                        
  79.                         }
  80.  
  81.  
  82.  
  83. void main()
  84.                                         {
  85.                                                 SYSTEMConfigPerformance(SYS_FREQ);
  86.                                         //      SYSTEMConfig(SYS_FREQ, SYS_CFG_ALL); //Inicializalas
  87.                                                 init();
  88.                                                 OpenI2C1( I2C_EN, BRG_VAL );
  89.  
  90.                                                
  91.  
  92.  
  93.  
  94.        
  95.                                                         while(1)
  96.                                                                         {
  97.  
  98.                                                                
  99.                                                                         IdleI2C1();
  100.                                                                         StartI2C1();
  101.                                                                         IdleI2C1();
  102.  
  103.                                                                         MasterWriteI2C1(SLAVE_ADDRESS & 0xFE);
  104.                                                                         MasterWriteI2C1(0x05);
  105.                                                                         StartI2C1();
  106.                                                                         IdleI2C1();
  107.  
  108.                                                                         MasterWriteI2C1(SLAVE_ADDRESS | 0x01);
  109.                                                                         fogadottadat = MasterReadI2C1();
  110.                                                                  
  111.                                                                 I2CAcknowledgeByte(I2C1, TRUE);
  112.                                                                 if(I2CAcknowledgeHasCompleted(I2C1))
  113.                                                                                                         {
  114.                                                                          
  115.                                                                                                         }
  116.                                                                                        
  117.                                                                         fogadottadat2 = MasterReadI2C1();
  118.  
  119.                                                                         I2CAcknowledgeByte(I2C1, FALSE);
  120.                                                                 if(I2CAcknowledgeHasCompleted(I2C1))
  121.                                                                                                         {
  122.                                                                          
  123.                                                                                                         }
  124.                                                                
  125.                                                                         StopI2C1();
  126.                                                                         IdleI2C1();
  127.                                                        
  128.                                                                         // DelayMS(50);
  129.                                                                        
  130.                                                                         fogadottadat = fogadottadat & 0x1F; //Clear flag bits
  131.                                                                         if ((fogadottadat & 0x10) == 0x10){ //TA < 0°C
  132.                                                                          fogadottadat = fogadottadat & 0x0F; //Clear SIGN
  133.                
  134.                                                                         Temperature = 256.0 - ((float)(fogadottadat *16 + fogadottadat2) / 16.0);
  135.                                                                         }else //TA >= 0°C
  136.        
  137.        
  138.                                         Temperature =  ( fogadottadat * 16 + (float)fogadottadat2 / 16 ) ;
  139.                                                                         sprintf(felsosor,"TEMP: %3.6f    " ,Temperature);
  140.                                        
  141.                                                                         LCDWriteString("homerseklet" ,1,1);
  142.                                                                         LCDWriteString(felsosor ,2,1);
  143.        
  144.                                                                         DelayMS(50);
  145.                                                                         LED_ON(LED1);
  146.                                                                         LED_ON(LED2);
  147.                                                                         LED_ON(LED3);
  148.                                                                        
  149.                                                                        
  150.                                                  
  151.                                                        
  152.                                                 }
  153.                
  154.                                         }


MCP9808
(#) sonajkniz válasza siemenstaurus hozzászólására (») Nov 25, 2015 /
 
A váltó rajzából kitűnik, hogy egy normál egyenáramú motorrol van szó. A másik, kézi rajz hibás. A motornak csupán 2 kivezetése van. Ha a váltó rajzán, az izzók között látható kapcsolót kiiktatod, a három vezetéket egybe kötöd, és a tápfesz helyére a váltó helyett egyenáramot kapcsolsz, az egyenáram polaritásától függöen a váltó hol egyik, hol másik állásba fog kapcsolni. Arra azomban ügyelj, hogy mivel 14-16V váltófeszt kér, egyenfeszültségböl még a 12V is sok lehet.
(#) KaiserA hozzászólása Nov 25, 2015 /
 
Működik a hőszenzorom, köszönöm a sok segítséget!
(#) Hp41C válasza KaiserA hozzászólására (») Nov 25, 2015 /
 
Írd meg, mi volt a hiba, hogy tanuljunk belőle.
Következő: »»   728 / 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