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   706 / 1210
(#) zotyimotyi válasza icserny hozzászólására (») Okt 9, 2015 /
 
Köszönöm a hasznos infót !
Egyébként meg ÉN vagyok kezdő (full kezdő ), például ezidáig nem tudtam, hogy mi a különbség egy PIC (programmable IC, ha jól tudom) és egy "mikrovezérlő" között (most sem tudom, de azt már sejtem, hogy nem ugyanaz.) Írok privátban. Mégegyszer köszönöm a segítséget !
(#) Pali79 válasza zotyimotyi hozzászólására (») Okt 9, 2015 /
 
A PIC egy mikrovezérlő! De több gyártó is készít mikrovezérlőt, amiket egy előre megírt programmal tudunk munkára fogni. Több mikrovezérlőt, több programnyelven lehet programozni. A full kezdőknek ajánlható programok a ledvillogók, futófények, nyomógombok kezelése kezdésnek. Egy ilyen szerkezet vezérlőprogramja akár több ezer sor is lehet. Van a PIC-ek között is olyan amiban van beépített USB vezérlő is. Tehát a feladat nem megoldhatatlan, de házilag felejtős.
(#) Droot hozzászólása Okt 9, 2015 /
 
Sziasztok!

Az e-bayes PICkit3 klón is kompatibilis az MPLAB-al?
(#) Hp41C válasza Droot hozzászólására (») Okt 9, 2015 /
 
Ha nem lenne kompatibilis, vajon el tudná adni? Hány pozitív visaszajelzést kapna az eladó?
(#) olahtamas hozzászólása Okt 9, 2015 /
 
Sziasztok!
Van itthon elfekvőben egy 128x64 dot matrix lcd kijelzőm, valamint 16f877A PIC-em, valamint egy rakás elszántságom, hogy ebből kihozzak valami hasznosat. Első szempont hőmérséklet figyelése, óra/dátum kijelzése aztán meg amit ki lehet hozni. Van-e véletlen valakinek kapcsolásai esetleg valamiféle tervei amit megosztana velem? Válaszát előre is köszönöm
(#) nagym6 válasza olahtamas hozzászólására (») Okt 9, 2015 /
 
Csak akkor tud valaki segíteni, ha ismert a dot matrix kijelzőben lévő vezérlő ic.
(#) Pali79 válasza olahtamas hozzászólására (») Okt 9, 2015 /
 
Amit felvázoltál az több különálló feladat: 1. LCD kezelése, 2. óra, 3. dátum, 4. hőmérséklet, stb. Ehhez kb semmilyen terv nem kell, mert maga a kapcsolás annyira egyszerű, hogy egy lyukraszteres panelon simán összeállítható. Itt a program a nagy kérdés, főleg a grafikus kijelző kezelése.
Szóval mi a kérdés?
A hozzászólás módosítva: Okt 9, 2015
(#) olahtamas válasza Pali79 hozzászólására (») Okt 9, 2015 /
 
Akkor a kapcsolást megoldom. A programozással meg majd szenvedek egy kicsit, ja meg be kell szereznem 1 égetőt is hozzá.
(#) Pali79 válasza olahtamas hozzászólására (») Okt 9, 2015 /
 
Itt mindig kapsz segítséget, de egy konkrét problémát próbálj megfogni egyszerre. Ha programozód sincs akkor gondolom tapasztalatod se sok, akkor ez így nem fog menni. Ez kb olyan mint minden felkészülés nélkül nekiindulni a maratonnak. Olvasd el a Nulláról a robotokig című cikksorozatot, válasz egy programozási nyelvet (assembly ajánlott) és ha az ott leírt programokat megérted és magadtól is tudsz hasonlót írni akkor kell egy ilyen komplex dologba belefogni, különben annyi kudarc fog érni közben, hogy beleunsz az egészbe. Pedig a PIC egy csodálatos kütyü, a felhasználásnak csak a fantázia szab határt, de nem szabad beleugrani a sűrűjébe.
(#) sonajkniz válasza olahtamas hozzászólására (») Okt 9, 2015 /
 
Szia!
Itt egy kis kedvcsináló. Ha akarod, a kapcsolási rajzát is elküldhetem hétfőn. De tartok tőle, hogy ha egyből ezzel akarod kezdeni, nem "kicsit" fogsz a programozással szenvedni.
(#) matheattila válasza zotyimotyi hozzászólására (») Okt 9, 2015 /
 
Valóban egy Programozható IC de a valódi neve Peripheral Interface Controller
(#) olahtamas válasza sonajkniz hozzászólására (») Okt 9, 2015 /
 
4. éve tanulok C-t. Tudtommal lehet ezt a PICet Cben programozni, csak kell hozzá forditó+égető. Természetesen a segítséget elfogadom, és hálás is lennék érte.
A hozzászólás módosítva: Okt 9, 2015
(#) sonajkniz válasza olahtamas hozzászólására (») Okt 10, 2015 /
 
Természetesen lehet. PICkit2-vel vagy 3-al célszerű. Valamint MPLabbal, vagy MPLab X-el. Persze vannak egyéb lehetőségek is. Én a PIC 18-as szériát ajánlanám. Könnyebb programozni. Grafikus kijelzőhöz nem árt kicsit több RAM. A PIC18F26K22 kezdetnek épp megfelelő. Én a C-ben nem tudok segíteni. Meggyőződéses asm.-es vagyok.
Üdv.
(#) Pali79 válasza olahtamas hozzászólására (») Okt 10, 2015 /
 
A hez nem tudok hozzászólni én sem, de ahogy másoktól hallottam C-ben programot írni és PIC-et programozni nagyon nem ugyanaz.
(#) matheattila válasza Pali79 hozzászólására (») Okt 10, 2015 /
 
Nem értem mi a gond a C-vel, amióta az eszemet tudom C-ben írok programot PIC-ekre és más mikrovezérlőkre és eddig soha nem volt gondom vele. A C sokkal áttekinthetőbb és hardver függetlenebb az asm-nél és megfelelő beállításokkal azt csinálja amit akarsz akárcsak az asm. Egy C programot kisebb módosításokkal pillanatok alatt át lehet vinni teljesen más mikrovezérlőre amit asm-nél nem tudsz megtenni...
(#) Pali79 válasza matheattila hozzászólására (») Okt 10, 2015 /
 
Nem mondtam, hogy gond lenne vele, csak ahogy hallottam, olvastam a számítástechnikában elterjedt C nyelv és a PIC C-je elég messze áll egymástól. A másik, hogy ha van egy működő PIC-ed amiből kiolvasod a HEX-et, azt csak asm-be tudod visszafejteni C-be soha. A másik ami az asm mellett szól, hogy ha én megírok egy 1000 soros programot akkor az 1000 helyet foglal el a memóriából, ha megírsz C-ben egy 1000 sorost az mennyi helyet foglal el?
(#) zenetom válasza Pali79 hozzászólására (») Okt 10, 2015 /
 
Bár hozzáteszem, én is asm párti vagyok, de van olyan helyzet, mikor a C fordító bizony hatékonyabb gépi kódot csinál, mint az ember (főleg a pointer kezelés miatt). Nem hiába vannak már az új PIC-ek adatlapjaiban ott hogy "Optimized for C compilers". Ugyanis annyi periféria meg BANK meg kutyafüle van benne, hogy asm-ben már szinte követhetetlen ugyanannyi idő alatt, mint C-ben. Ráadásul lehet hogy a fordító megalázóan jobb kódot csinál. Nem beszélve a bonyolult perifériákról, mint pl. az USB. Azt asm-ben már igencsak kihívás megvalósítani.
(#) olahtamas válasza sonajkniz hozzászólására (») Okt 10, 2015 /
 
Erre a "projektre" nem szándékoztam sokat költeni, meg nem is várok el sokat tőle. Ezt a grafikus kijelzőt épp hajtja a PIC szóval azért gondoltam átszerkeszteni, hogy hasznosabb legyen számomra.
Sajnos egyetem mellett nem sok időm van
A hozzászólás módosítva: Okt 10, 2015
(#) Hp41C válasza zenetom hozzászólására (») Okt 10, 2015 / 2
 
Alkalmam volt több kontrollerre megírni ugyan azt a programot assembly -ben és Hitech C későbbi nevén XC8 16Fxxx és 16F1xxx kontrollerekre. Az assembly program hossza egységnyi, akkor a free módu program hossza 8 egység fölött van, a pro -é pedig 2..3 egység. A hosszabb kód még esetleg elfogadható (csak egy kicsit lassabban fut), de az már nem, hogy egy 16F628 -ra assembly -ben megírható program ne férjen el a midrange kontrollereken maximálisan rendelkezésre álló 8K -ban.

C18. A PICkit2 gyári C firmware tele van assembly betétekkel, hogy beleférjen a18F2550 -be. A gyári C -ben írt USB bootloader nem fér el a 2k -s boot blokkban, pedig már írtak titkosítassal rendelkező USB bootloader assembly -ben rá, ami belefért a boot blokkba.

A C30 -cal fordított kód (gondolom nem pro optimalizálással fordult) tele van fölösleges, ismételt utasításokkal.

Ahhoz, hogy a C program közelítse azt, amit az assembly megoldás tud, közel ugyanannyi időt kell az optimalizálással foglalkozni, mint az assembly megírása.... Vagy egyszerűen venni egy nagyobb kontrollert...
A hozzászólás módosítva: Okt 10, 2015
(#) zenetom válasza Hp41C hozzászólására (») Okt 10, 2015 /
 
Akkor mikor én foglalkoztam az asm - C generált kóddal, valószínűleg túl sokra becsültem a C-t. De akkor most visszavonom, és örülök, hogy 8 biten még mindig jobb az asm
(#) Pali79 válasza olahtamas hozzászólására (») Okt 10, 2015 /
 
A 877-ben elég nagy memória van csak tudni kell kezelni. Egy ekkora kijelzőre egy szép órát, dátumot bőségesen meg lehet csinálni belőle.
(#) Pali79 válasza zenetom hozzászólására (») Okt 10, 2015 /
 
Biztosan van az a PIC amit már talán nem érdemes asm-ben programozni, de én attól nagyon messze vagyok. Az, hogy a kód mennyire lesz optimális, az nagyon gyakorlatfüggő. Már többször lehettünk tanúi itt a fórumon, hogy ha egy kezdő feldob egy problémát amire kigondolt egy 20-30 soros megoldást, az igazán gyakorlottak megmutatják, hogy meglehet azt csinálni 5 sorból is. Épp nemrégiben beszéltük ezt sonajkniz kollégával, hogy amit kezdőként megírt 2000 sorból, azt most megcsinálja 500-ból is.
(#) morzsa15 hozzászólása Okt 10, 2015 /
 
Sziasztok!

Van egy hőmérőm 16f628-as pic-el meg szerettem volna csinálni hogy ki írja a maximum hőmérsékletet de valamiért nem a maximumot írja ki hanem a jelenlegit. Mit ronthattam el?

Segítségeket előre is köszönöm!

  1. // LCD connections definitions
  2. sbit LCD_RS at RA0_bit;
  3. sbit LCD_EN at RA1_bit;
  4. sbit LCD_D4 at RB4_bit;
  5. sbit LCD_D5 at RB5_bit;
  6. sbit LCD_D6 at RB6_bit;
  7. sbit LCD_D7 at RB7_bit;
  8. sbit LCD_RS_Direction at TRISA0_bit;
  9. sbit LCD_EN_Direction at TRISA1_bit;
  10. sbit LCD_D4_Direction at TRISB4_bit;
  11. sbit LCD_D5_Direction at TRISB5_bit;
  12. sbit LCD_D6_Direction at TRISB6_bit;
  13. sbit LCD_D7_Direction at TRISB7_bit;
  14. // End LCD connections definitions
  15.  
  16. // String array to store temperature value to display
  17. char *temp = "000.00";
  18.  
  19. // Temperature Resolution : No. of bits in temp value = 9
  20. const unsigned short TEMP_RES = 9;
  21.  
  22. // Variable to store temperature register value
  23. unsigned temp_value=0;
  24. unsigned temp_max=0;
  25. unsigned temp_min=0;
  26.  
  27.  
  28. void Display_Temperature(unsigned int temp2write) {
  29.   const unsigned short RES_SHIFT = TEMP_RES - 8;
  30.  
  31.   // Variable to store Integer value of temperature
  32.   char temp_whole;
  33.  
  34.   // Variable to store Fraction value of temperature
  35.   unsigned int temp_fraction;
  36.   unsigned short isNegative = 0x00;
  37.  
  38.   // check if temperature is negative
  39.   if (temp2write & 0x8000) {
  40.      temp[0] = '-';
  41.      // Negative temp values are stored in 2's complement form
  42.      temp2write = ~temp2write + 1;
  43.      isNegative = 1;   // Temp is -ive
  44.      }
  45.  
  46.   // Get temp_whole by dividing by 2 (DS1820 9-bit resolution with
  47.   // 0.5 Centigrade step )
  48.   temp_whole = temp2write >> RES_SHIFT ;
  49.  
  50.  
  51.   // convert temp_whole to characters
  52.  if (!isNegative) {
  53.      if (temp_whole/100)
  54.    // 48 is the decimal character code value for displaying 0 on LCD
  55.      temp[0] = temp_whole/100  + 48;
  56.      else
  57.      temp[0] = '0';
  58.   }
  59.  
  60.   temp[1] = (temp_whole/10)%10 + 48;             // Extract tens digit
  61.   temp[2] =  temp_whole%10     + 48;             // Extract ones digit
  62.  
  63.   // extract temp_fraction and convert it to unsigned int
  64.   temp_fraction  = temp2write << (4-RES_SHIFT);
  65.   temp_fraction &= 0x000F;
  66.   temp_fraction *= 625;
  67.  
  68.   // convert temp_fraction to characters
  69.   temp[4] =  temp_fraction/1000    + 48;         // Extract tens digit
  70.   temp[5] = (temp_fraction/100)%10 + 48;         // Extract ones digit
  71.  
  72.   // print temperature on LCD
  73.   Lcd_Out(2, 5, temp);
  74. }
  75.  
  76. void main() {
  77.   CMCON  |= 7;                       // Disable Comparators
  78.   Lcd_Init();                                    // Initialize LCD
  79.   Lcd_Cmd(_LCD_CLEAR);                           // Clear LCD
  80.   Lcd_Cmd(_LCD_CURSOR_OFF);                      // Turn cursor off
  81.   Lcd_Out(1, 3, "Homerseklet:   ");
  82.   // Print degree character, 'C' for Centigrades
  83.   Lcd_Chr(2,11,223);
  84.  // different LCD displays have different char code for degree
  85.  // if you see greek alpha letter try typing 178 instead of 223
  86.  
  87.   //--- main loop
  88.   do {
  89.     //--- perform temperature reading
  90.     Ow_Reset(&PORTB, 0);      // Onewire reset signal
  91.     Ow_Write(&PORTB, 0, 0xCC);   // Issue command SKIP_ROM
  92.     Ow_Write(&PORTB, 0, 0x44);   // Issue command CONVERT_T
  93.     Delay_ms(600);
  94.     // If this delay is less than 500ms, you will see the first reading on LCD
  95.     //85C which is (if you remember from my article on DS1820)
  96.     //a power-on-reset value.
  97.  
  98.     Ow_Reset(&PORTB, 0);
  99.     Ow_Write(&PORTB, 0, 0xCC);    // Issue command SKIP_ROM
  100.     Ow_Write(&PORTB, 0, 0xBE);    // Issue command READ_SCRATCHPAD
  101.  
  102.     // Read Byte 0 from Scratchpad
  103.     temp_value =  Ow_Read(&PORTB, 0);
  104.     // Then read Byte 1 from Scratchpad and shift 8 bit left and add the Byte 0
  105.     temp_value = (Ow_Read(&PORTB, 0) << 8) + temp_value;
  106.  
  107.     //--- Format and display result on Lcd
  108.     Display_Temperature(temp_value);
  109.      if(temp_value>temp_max) temp_value == temp_max ;
  110.  
  111.            /// Gomb
  112.  
  113.         if(PORTB.RB3 == 1){  //if push button is pressed
  114.         Lcd_Out(1, 3, "Maximum:   ");
  115.         Lcd_Chr(2,12, temp_max);   //Maximum
  116.  
  117.        /*wait till button released as press of a buttons take time  and processor is too fast */
  118.         }
  119.         else{
  120.        Lcd_Out(1, 3, "Homerseklet:   ");
  121.        Lcd_Chr(2,12,'C');
  122.        Lcd_Chr(2,12,'C');
  123.         };
  124.     } while (1);
  125.  
  126.   }
(#) rolandgw válasza Pali79 hozzászólására (») Okt 10, 2015 /
 
Irigylem a türelmeteket és szorgalmatok,régebben én sokat programoztam asm-ben,de valami nagyon nem kerek azzal a C fordítóval,ami Hp41C fórumtárs által említett arányokat produkálja.Az ingyenes GCC is általában megáll 5-10% plusz körül.Nyilván meg kell tanulni az adott fordítóra jellemző optimalizálási trükköket,de ez meg sem közelíti azt a ráfordított időt,amit egy 2-3ezer soros asm átlátása kíván.Ha meg minden kötél szakad,csak csatolom az asm részt.Természetesen nem gyártó hitvitát szeretnék provokálni a GCC említésével !
(#) icserny válasza olahtamas hozzászólására (») Okt 10, 2015 / 1
 
Idézet:
„4. éve tanulok C-t.”

Azt is bmeg kell tanulni mellé hogy a beágyazott rendszerek programozása (hardverközeli programozás) mindig az elektronikua kapcsolással összhangban történik és értelmes. Meg kell tehát tanulni a PIC felépítését és működését, a hozzá kapcsolt külső elemek működését (pl. SPI, I2C eszközök) és magának a kapcsolási elrendezésnek a működését.
(#) sonajkniz válasza rolandgw hozzászólására (») Okt 10, 2015 /
 
Írjál C-ben karakteres LCD-re 50-60 soros szöveget. Képes megtölteni egy kisebb PIC teljes programmemóriáját. Míg asm.-ben csak annyit, ahány karaktered van.
(#) Hp41C válasza rolandgw hozzászólására (») Okt 10, 2015 /
 
A gyártó honlapján az összehasonlító ábra - csak az assembly hiányzik róla.... Azaz a free négyszer akkora kódot generál, mint a pro...
A hozzászólás módosítva: Okt 10, 2015
(#) olahtamas válasza icserny hozzászólására (») Okt 10, 2015 /
 
Tavaly foglalkoztam ilyenekkel, remélem nem lesz nagy gondom vele.
(#) rolandgw válasza Hp41C hozzászólására (») Okt 10, 2015 /
 
Régebben foglalkoztam PIC-ekkel,most AVR,ezért írtam a GCC-t és az utolsó mondatot.Csak rácsodálkoztam erre az arányszámra,de mint írtam nem provokáló célzattal !
(#) kissi válasza morzsa15 hozzászólására (») Okt 10, 2015 /
 
Szia!

A 109-es sort nézd meg szerintem !
Következő: »»   706 / 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