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   511 / 1221
(#) helltp válasza Hp41C hozzászólására (») Ápr 8, 2014 /
 
Jó szemed van nagyon, kijavítottam, mindent átírtam PORTC-rőll LATC-re, továbbra sem reagál semmit. Egyébként, a "^=" miben különbözik az "=" től?
(#) norbiv8 hozzászólása Ápr 8, 2014 /
 
Sziasztok!

PIC12F752: adatlap szerint konfiguráltam a PWM-et, de csak magasba megy a PWM kimenet és ennyi.

  1. ANSELA = 0x00;  //analog off
  2.     TRISA = 0x3F;   // all io input
  3.     PR2 = 0x03;     // 83,333kHz
  4.     CCP1CON= 0b00001100;  // PWM mode
  5.     CCPR1L = 0xC8;  // set duty cycle to 50%
  6.     TMR2IF = 0; // clear the TMR2 interrupt flag
  7.     T2CON = 0b00000100;   // Timer 2 ON, prescaler 0
  8.     TRISA2 = 0; // CCP1 pin output


Belső 1MHz oszcillátorról jár, egy másik kimenetet megbillegtetek, hogy lássam mikor futott le az init. Próbáltam 8MHz-re állítani az órajelet, de nincs változás.
Mi lehet a gond?
(#) tirisztortetróda válasza ktamas66 hozzászólására (») Ápr 8, 2014 /
 
Szia. Köszönöm a válaszodat, most úgy gondolom, hogy értem, aztán ha mégsem akkor írok még
(#) Hp41C válasza helltp hozzászólására (») Ápr 8, 2014 /
 
Indítsd be a szimulátort és nézd meg a regiszterek beállítását, tegyél töréspontot a következő sorokra: InitApp(); és if(TMR0IE && TMR0IF){
Nézd meg belép -e egyáltalán a megszakítási rutinba.
  1. LATC ^= 0xFF;

Tulajdonképen a LATC = LATC ^ 0xFF; a felnyil a bitenkénti kizáró vagy művelet jele.
(#) tirisztortetróda válasza Hp41C hozzászólására (») Ápr 8, 2014 /
 
Köszönöm a válaszod, megnézem az ajánlott oldalt.
(#) Hp41C válasza norbiv8 hozzászólására (») Ápr 8, 2014 /
 
Ha PR2 = 3, akkor 4 lépésből áll a ciklus, az 50% kitöltéshez CCPR1L = 2 tartozna.
(#) norbiv8 válasza Hp41C hozzászólására (») Ápr 8, 2014 /
 
Igen, félrevezetett a képlet. Én 50%-os kitöltést számoltam, pedig 0,5-öt kell. Így már szépen megy, csak 62,5kHz az a 83kHz, ugyanis ahogy írod 4 lépés ciklus.

Köszönöm a segítséget.
(#) fleta hozzászólása Ápr 9, 2014 /
 
Üdv Uraknak!
Attiny 2313-at szeretnék felprogramozni. Pony 2000 progi Test Failed hibauzeneted ad. Win7-el megy ez a progi?
A hozzászólás módosítva: Ápr 9, 2014
(#) matheattila válasza fleta hozzászólására (») Ápr 9, 2014 /
 
Ha választ szeretnél a kérdésedre akkor szerintem a következő topic-okban nézz szét, mert ez a PIC-ekről szól, mint azt a fejlécben is láthatod!
AVR - Miértek hogyanok
AVR égetők építése
(#) fleta válasza (Felhasználó 15355) hozzászólására (») Ápr 9, 2014 /
 
Az könnyen lehet, hová tudnék fordulni?
(#) fleta válasza matheattila hozzászólására (») Ápr 9, 2014 /
 
Köszi!
(#) don_peter hozzászólása Ápr 10, 2014 /
 
Srácok erősítsetek meg, hogy a P18F4550-nek csak 2 PWM kivezetése van az RC1, és RC2 lába illetve egy RB alternatív pontja.
Ezeket tudom kapcsolgatni külön-külön vagy mind három a PWM bekapcsolásával foglalódik?
Utóbbit csak mert nem látom, hol lehet szabályozni melyik lábon dolgozzon.
(#) icserny válasza don_peter hozzászólására (») Ápr 10, 2014 /
 
2 db független CCP modul van benne, melyek közül
- az első ECCP üzemmódban is tud működni (ekkor 4 kimenetet használ, pl. H-híd meghajtásra: RC2, RD5, RD6, RD7). Standard CCP módban csak az RC2 lábat használja.
- a második modul csak standard CCP módban működik, 1 kimenetet használ, amely a konfigurációs bitek beállításától függően vagy az RC1, vagy az RB3 láb.
A hozzászólás módosítva: Ápr 10, 2014
(#) don_peter válasza icserny hozzászólására (») Ápr 10, 2014 /
 
Thanks...
(#) frekivalto hozzászólása Ápr 10, 2014 /
 
Sziasztok.

Segítségre lenne szükségem...
PIC18F24K50 típust szeretnék PICKIT3-mal programozni, de nem ismeri fel.
Hol találok hozzá drivert-t, és mi a teendőm?
A microchip oldalon nem találtam, valszeg rossz helyen kerestem...

Köszönöm a segítséget.

Üdv,.
(#) eSDi válasza frekivalto hozzászólására (») Ápr 10, 2014 /
 
Üdv!

Nem kell hozzá semmilyen driver. Ha a PIC nem az áramkörből kapja a tápfeszt a programozás idejére, akkor a projekt beállításai között be kell állítani, hogy a PICkit3 szolgáltassa a tápfeszt.
(#) cross51 válasza frekivalto hozzászólására (») Ápr 10, 2014 /
 
A PICkit 3 tápja be van kapcsolva? Pontosan milyen hiba üzenetet ír ki a program?
(#) Hp41C válasza frekivalto hozzászólására (») Ápr 10, 2014 /
 
Utoljáta melyik programmal használtad? A PICkit3 Scripting Host -tal? Akkor vissza kell állítani az MpLab kompatibilis firmware -t.
(#) frekivalto válasza Hp41C hozzászólására (») Ápr 10, 2014 /
 
Eddig 16F családba tartozó PIC-eket programoztam vele, azzal nem volt gond.
Most minden ugyanúgy történt mind eddig.
Csatlakoztattam a PIC-et, majd indítottam PICKIT3-at. PIC-et nem ismerte fel. Manuálisan próbáltam megkeresni ezt az IC-t, de ez nem szerepel a listázott PIC-ek között.
Ezért gondoltam, hogy nincs fent a driver.
(#) DJozso hozzászólása Ápr 10, 2014 /
 
Kedves segítő rokonlelkek...
Van otthon egy keltetőm, amelyben mind a hőmérséklet, mind a páratartalom szabályzott, de szükségem lenne egy kontroll mérőre is (ellenőrzés céljából), és itt eset a választásom a DHT22 szenzor és a 16f887-es mikrovezérlő által alkotott kapcsolásra, mely egy 2 x 16 karakteres kijelzőn tolja az infót. A forráskód a következő:
  1. // LCD module connections
  2. sbit LCD_RS at RB4_bit;
  3. sbit LCD_EN at RB5_bit;
  4. sbit LCD_D4 at RB0_bit;
  5. sbit LCD_D5 at RB1_bit;
  6. sbit LCD_D6 at RB2_bit;
  7. sbit LCD_D7 at RB3_bit;
  8.  
  9. sbit LCD_RS_Direction at TRISB4_bit;
  10. sbit LCD_EN_Direction at TRISB5_bit;
  11. sbit LCD_D4_Direction at TRISB0_bit;
  12. sbit LCD_D5_Direction at TRISB1_bit;
  13. sbit LCD_D6_Direction at TRISB2_bit;
  14. sbit LCD_D7_Direction at TRISB3_bit;
  15. // End LCD module connections
  16.  
  17. sbit Data at RA0_bit;
  18. sbit DataDir at TRISA0_bit;
  19. char message1[] = "Temp = 00.0 C";
  20. char message2[] = "RH   = 00.0 %";
  21. unsigned short TOUT = 0, CheckSum, i;
  22. unsigned short T_Byte1, T_Byte2, RH_Byte1, RH_Byte2;
  23.  
  24. void StartSignal(){
  25.   DataDir = 0;     // Data port is output
  26.   Data    = 0;
  27.   Delay_ms(25);
  28.   Data    = 1;
  29.   Delay_us(30);
  30.   DataDir = 1;     // Data port is input
  31.  
  32. }
  33.  
  34. unsigned short CheckResponse(){
  35.   TOUT = 0;
  36.   TMR2 = 0;
  37.   T2CON.TMR2ON = 1;      // start timer
  38.   while(!Data && !TOUT);
  39.   if (TOUT) return 0;
  40.   else {
  41.    TMR2 = 0;
  42.    while(Data && !TOUT);
  43.    if (TOUT) return 0;
  44.    else {
  45.     T2CON.TMR2ON = 0;
  46.     return 1;
  47.    }
  48.   }
  49. }
  50.  
  51. unsigned short ReadByte(){
  52.   unsigned short num = 0, t;
  53.   DataDir = 1;
  54.   for (i=0; i<8; i++){
  55.    while(!Data);
  56.    TMR2 = 0;
  57.    T2CON.TMR2ON = 1;
  58.    while(Data);
  59.    T2CON.TMR2ON = 0;
  60.    /*
  61.     Itt alapból 100 volt a tmr2 ideje, 10 MHz-es kvarchoz, nekem 4Mhz-es van ezért állítottam 40-re.
  62.    */
  63.    if(TMR2 > 40) num |= 1<<(7-i);  // If time > 40us, Data is 1
  64.   }
  65.   return num;
  66. }
  67.  
  68. void interrupt(){
  69.   if(PIR1.TMR2IF){
  70.    TOUT = 1;
  71.    T2CON.TMR2ON = 0; // stop timer
  72.    PIR1.TMR2IF  = 0; // Clear TMR0 interrupt flag
  73.   }
  74. }
  75.  
  76. void main() {
  77.   unsigned short check;
  78.   ANSEL  = 0;                                      // Configure AN pins as digital
  79.   ANSELH = 0;
  80.   C1ON_bit = 0;                    // Disable comparators
  81.   C2ON_bit = 0;
  82.   TRISB = 0;
  83.   TRISA = 0b00000001;
  84.   TRISD = 0;                       // configure pins as input
  85.  
  86.   INTCON.GIE = 1;    //Enable global interrupt
  87.   INTCON.PEIE = 1;   //Enable peripheral interrupt
  88.   // Configure Timer2 module
  89.   PIE1.TMR2IE = 1;  // Enable Timer2 interrupt
  90.   T2CON = 0;        // Prescaler 1:1, and Timer2 is off initially
  91.   PIR1.TMR2IF =0;   // Clear TMR INT Flag bit
  92.   TMR2 = 0;
  93.   Lcd_Init();
  94.   Lcd_Cmd(_Lcd_Clear);
  95.   Lcd_Cmd(_LCD_CURSOR_OFF);
  96.  
  97.   do {
  98.     Delay_ms(1000);
  99.     StartSignal();
  100.     check = CheckResponse();
  101.     if (!check) {
  102.      Lcd_Cmd(_Lcd_Clear);
  103.      Lcd_Out(1, 1, "No response");
  104.      Lcd_Out(2, 1, "from the sensor");
  105.      Delay_ms(1000);
  106.     }
  107.     else{
  108.  
  109.      RH_Byte1 = ReadByte();
  110.      RH_Byte2 = ReadByte();
  111.      T_Byte1 = ReadByte();
  112.      T_Byte2 = ReadByte();
  113.      CheckSum = ReadByte();
  114.      // Check for error in Data reception
  115.      if (CheckSum == ((RH_Byte1 + RH_Byte2 + T_Byte1 + T_Byte2) & 0xFF))
  116.      {
  117.       message1[7]  = T_Byte1/10 + 48;
  118.       message1[8]  = T_Byte1%10 + 48;
  119.       message1[10] = T_Byte2/10 + 48;
  120.       message2[7]  = RH_Byte1/10 + 48;
  121.       message2[8]  = RH_Byte1%10 + 48;
  122.       message2[10] = RH_Byte2/10 + 48;
  123.       message1[11] = 223;     // Degree symbol use 223 if Greek letter appears
  124.       Lcd_Cmd(_Lcd_Clear);
  125.       Lcd_Out(1, 1, message1);
  126.       Lcd_Out(2, 1, message2);
  127.       }
  128.  
  129.       else{
  130.        Lcd_Cmd(_Lcd_Clear);
  131.        Lcd_Out(1, 1, "Checksum Error!");
  132.        Lcd_Out(2, 1, "Trying Again ...");
  133.       }
  134.     }
  135.  
  136.   }while(1);
  137. }

Itt a baj. A progit beégetve a hőmérséklet 1 fok, a pára 1.3%. Hogy tud rossz adatot beolvasni, mikor le is ellenőrzi magát a CheckSumm-al?Ha ráfújok a szenzorra, változik a pára, a hőmérséklet nem, de a pára is érdekes, mert ilyen 1.D%
Végül két kérdésem lenne:
1. LCD kijelzőn hogy tudom megjeleníteni a mondjuk "checkSumm" változót, mert így baromságokat irkál
  1. lcd_out (1, 1, checkSumm);
Gondolom valahogy char tipusú változót kellene kreálni belőle.
illetve az If (!check) az a check változó tagadását jelenti?
2.
  1. message1[7]  = T_Byte1/10 + 48;
Miért kell a +48;
Bocsánat a láma kérdésekért, de akárhogy küzdök az értelmezéssel, mindig elhasalok. A keltető tegnap elindult "kontroll" nélkül, és csak kellene ennek valahogy müködni..
A hozzászólás módosítva: Ápr 10, 2014
(#) frekivalto válasza cross51 hozzászólására (») Ápr 10, 2014 /
 
Ezt látom PK3-on belül.
A Device pont alatt nincs 18F24K50...
A tápfesz bekapcsolása rendben van, ha a PK3 adja a tápfeszt, akkor a táp megjelenik a PIC-en.
A kommunikációs teszt rendben lefut, kiírja hogy PICKIT connected.
És vele együtt kiírja, hogy ebben a családban nincs ez az IC.
(#) Bakman válasza frekivalto hozzászólására (») Ápr 10, 2014 /
 
A "Device Family" részen nem tudod csak a 18F családot kiválasztani? Ezt a PicKit 2 is el szokta játszani, ott ez a megoldás.
(#) icserny válasza DJozso hozzászólására (») Ápr 10, 2014 /
 
Idézet:
„A progit beégetve a hőmérséklet 1 fok, a pára 1.3%. Hogy tud rossz adatot beolvasni, mikor le is ellenőrzi magát a CheckSumm-al?”
A szenzor jó adatot küld, szerintem te értelmezed félre a kapott adatokat.

Így próbáld: RH = (256*RH_Byte1 + RG_Byte2)/10

Itt természetesen nem foglalkoztam vele, hogy nem float változóid vannak, értsd jól...
(#) frekivalto válasza Bakman hozzászólására (») Ápr 10, 2014 /
 
PIC18F2450 kiválasztás után, READ.
Ez a válasz jön rá: "Selected device not detected"
(#) Hp41C válasza frekivalto hozzászólására (») Ápr 10, 2014 /
 
1. Végy egy mély lélegzetet.
2. Lépj ki a programból.
3. Mentsd el a program könyvtárában levő Pk2DeviceFile.dat állományt. (Hátha jó lesz még valamire...)
4. Töltds le ezt.
5. Írd felül vele a program könyvtárában levő Pk2DeviceFile.dat állományt.
6. Indítsd újra a programot.
7. Válaszd ki a PIC18F_K_ családot. Váalszd ki a PIC18F24K50 -et.
(#) frekivalto válasza Hp41C hozzászólására (») Ápr 10, 2014 /
 
Hálás köszönetem.
Most már ki tudom választani, más kérédés hogy nem látja a PIC-et. Ellenőrizni kell még a bekötést, de az már holnapra marad.

Köszönöm a segítséget! Szép estét!
(#) Hp41C válasza frekivalto hozzászólására (») Ápr 11, 2014 /
 
Vcap láb és a föld közé 10µF low ESR karámia vagy tantál kondenzátor.

Esetleg, három mély lélegzetvétel után:
1 - MpLabX letöltése, telepítése,
2 - Integrated Programming Environment futtatása.
A hozzászólás módosítva: Ápr 11, 2014
(#) don_peter hozzászólása Ápr 11, 2014 /
 
Srácok, szükségem lenne egy memória IC használatára, de nem tudom mekkora méretűre lenne szükségem.
Milyen elven tudom kiszámolni, hogy mekkora memória IC kell nekem az adataim elmentésére?
Van erre valami szabály vagy számolási mód mellyel pontosan tudom mennyi memóriát fogyasztok?
Előre is köszi.
(#) nedudgi válasza don_peter hozzászólására (») Ápr 11, 2014 /
 
Ez valami vicc, vagy beugratós kérdés? Milyen adatokat akarsz menteni? Egy PIC nem Windows, itt nincs operációs rendszer, ami suttyomban használja a memóriát. Milyen adatokat akarsz menteni?
(#) Bakman válasza don_peter hozzászólására (») Ápr 11, 2014 /
 
Ezt ennyi adat ismeretében nem lehet megmondani. Miről van szó egyáltalán? Mellesleg egy nagyobb képhez már inkább Pendrive kell, mint egy mikrokontroller.
Egyébként kódolástól (tömörítéstől) függ, mennyi helyet foglal adott adat.
Következő: »»   511 / 1221
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