Fórum témák

» Több friss téma
Fórum » PIC programozása C nyelven, C-Compiler
Lapozás: OK   112 / 153
(#) tomi52 válasza potyo hozzászólására (») Ápr 25, 2015 /
 
cpp -> c++
Objektum orientált c-ben a forrás kiterjesztése.
A hozzászólás módosítva: Ápr 25, 2015
(#) devergo74 hozzászólása Máj 3, 2015 /
 
Sziasztok.
Mplabot szeretném használni, azon belül is a c-programozást. Ha ez lehetséges, akkor le kell külön tölteni valami beépülő modult?
(#) Lucifer válasza devergo74 hozzászólására (») Máj 3, 2015 /
 
Az Mplab (a régi és az X is) beépítetten támogatja a C nyelvű fejlesztést. C fordítót külön kell telepíteni ha erre irányult kérdésed.
(#) devergo74 válasza Lucifer hozzászólására (») Máj 3, 2015 /
 
Igen erre. De azt hogyan, és honnan tudom telepíteni.
(#) Lucifer válasza devergo74 hozzászólására (») Máj 3, 2015 /
 
Milyen processzorhoz kell?
(#) devergo74 hozzászólása Máj 3, 2015 /
 
Pic16f877a, ha erre gondoltál.
(#) icserny válasza devergo74 hozzászólására (») Máj 3, 2015 /
 
A Microchip Development Tools Home Page oldaláról kiindulva mindent megtalálsz.
1. MPLAB (X) IDE a fejlesztői környezet, azt kell előbb telepíteni
2. Compilers (XC8, XC16 és/vagy XC32)

Az MPLAB 8 IDE és a fordítók régebbi (nem X) változatai már csak az archívumban találhatók meg. Pl. ezen az oldalon a Downloads Archive fülre kell kattintani.
A hozzászólás módosítva: Máj 3, 2015
(#) devergo74 válasza icserny hozzászólására (») Máj 3, 2015 /
 
Köszi az infót.
Nem nagyon vágom még a pic-programozást, csak ismerkedem velük. Akkor úgymond mindegyik pic családhoz külön le kell tölteni a beépülő modulokat? És mikor melyiket programozza az ember, azt kell betölteni? Nincs egységes beépülő, ami mindegyikhez jó? Vagy melyiket érdemes?
Bocsi, ha sok láma kérdést tettem fel.
A hozzászólás módosítva: Máj 3, 2015
(#) Lucifer válasza devergo74 hozzászólására (») Máj 3, 2015 /
 
Még mindig nem értem mit értesz modulok alatt. A fordító az a tool ami a forráskódot lefordítja binárissá. A PIC-ek családokra vannak bontva, azokhoz külön-külön fordító jár.

Ha hardvert absztraháló kódot keresel (ugyanaz a kód forduljon több kontrollerre is) akkor a fordítókkal adnak könyvtárakat amikkel pld. UART-ot lehet nagyjából egyformán kezelni több proci között.
(#) tomi52 válasza devergo74 hozzászólására (») Máj 3, 2015 /
 
- Telepíted az MPLAB-ot
- Telepíted a C fordítót. Ebből több is van, van a 8, a 16 és a 32 bites PIC-ekhez. Elég azt, amilyen PIC családdal (hány bites) foglalkozni akarsz, de lehet akár mindegyiket is telepíteni.

Az így telepített fejlesztő környezet már ismeri a különböző PIC-eket, neked egy-egy új projekt indításkor csak meg kell adnod, milyen típusú PIC-re akarod írni a programot, és persze ahhoz passzoló fordítót kell megjelölnöd a projektben. Betöltögetni nem kell már semmit.
(#) devergo74 válasza tomi52 hozzászólására (») Máj 3, 2015 /
 
Köszönöm mostmár kezdem érteni. Csak az előbb rosszul tettem fel a kérdést, és modulnak neveztem a fordítókat. Akkor semmi gond nem lesz ha mind a három fordítót telepítem. Utána már csak a megfelelőt kell kiválasztani. Ez egy kicsit azért nekem mint kezdőnek, bonyolultabnak tűnik így elsőre mint a Mikroc.
(#) icserny válasza devergo74 hozzászólására (») Máj 3, 2015 /
 
Idézet:
„Ez egy kicsit azért nekem mint kezdőnek, bonyolultabnak tűnik így elsőre mint a Mikroc.”
Ennek történelmei okai vannak. Eredetileg a PIC10-12-16-hoz a Microchip nem is készített C fordítót. Később felvásárolta a Hitech céget, onnan lett C fordító ezekhez. De addigra már kész volt egy C18 fordító a PIC18 termékcsaládhoz, s egészen más alapokról kiindulva (GCC) készült fordító a dsPIC30/PIC24/dsPIC33 termékcsaládhoz (C30 néven) is, majd egy hasonló fordító a PIC32-höz (C32 néven) is. Ezekből lett összegyúrva az XC8, XC16 és az XC32, de egységes fordító egyhamar nem várható, mert pl. sem a C18, sem a HTC C nem GCC alapú, többek között ezért sem lehet egykönnyen összehozni a belőlük készített XC8-at az XC16-tal.
A hozzászólás módosítva: Máj 3, 2015
(#) killbill válasza usane hozzászólására (») Máj 7, 2015 /
 
Ha az _XTAL_FREQ nincs definialva, akkor mas hibat kell adjon, hiszen, akkor ertelmetlen a sor:
us = (x)/(12000000/)|1;

Viszont, ha az _XTAL_FREQ nagyobb, mint 12000000, akkor csinalhat ilyet.
(#) usane válasza killbill hozzászólására (») Máj 7, 2015 /
 
Véletlenül kitöröltem módosítás helyett az előző hsz-t.
Viszont igazad van, tesztelés közben átírtam az xtal-t és úgy maradt.
(#) Horvath-b89 hozzászólása Máj 7, 2015 /
 
Üdv!
Tudtok nekem linkelni egy működő programozó szoftvert?
Vagy az Mplab x-hez c nyelvű kiegészítőt. Már letöltöttem rengeteg verziót és mind demo.
(#) icserny válasza Horvath-b89 hozzászólására (») Máj 8, 2015 /
 
Idézet:
„Már letöltöttem rengeteg verziót és mind demo.”

Nem demo, hanem "evaluation" verzió. Ez azt jelenti, hogy 60 napig PRO kiadásként használható, utána pedig a korlátozott optimalizálású ingyenes verzióra vált. Ha ez zavar (vagy komolyabb célra kell), a ChipCAD-től megveheted a Standard vagy a PRO változatot. De arra készülj fel, hogy "nem két fillér, de két tallér kell ide pajtás"!
(#) kissi hozzászólása Jún 9, 2015 /
 
Sziasztok!
18-as PIC-el szeretnék SD kártyát olvasni és wav fájlból zenét lejátszani. Láttam, hogy a Microchip-nek vannak Microchip Libraries Application-jai, de ezekből csak a régebbiek támogatják az SD kártyát 18-ason, vagy láttatok-e valami lehetőséget, ami elkerülte a figyelmemet ?!
Bővebben: Link
A 2013.06.haviban még van SD kártya használat a 18-asokra, de az újabb verziókban már nem...!
Használt valaki ilyet, ill. tudnátok valami iránymutatást adni ?!
Előre is köszönöm a segítséget!
(#) pipi válasza kissi hozzászólására (») Jún 10, 2015 /
 
Szia!
És mi a baj a 2013-assal? szerintem használd nyugodtan, én is ezt használom, bár pic32-ön
mplab 89x alatt
(#) kissi válasza pipi hozzászólására (») Jún 10, 2015 /
 
Szia!
Köszi a hozzászólást.
Kevés PIC-re van elkészítve és nem tudom, mennyire korrekt a file kezelés, illetve, mennyire gond valami másik 18-asra "átgyúrni" ...? Zene lejátszásához kellene és mennyire dolgozik gyorsan 18-ason, ez is fontos lenne számomra!
A 24-es és nagyobb PIC-reknél úgy láttam, hogy sok lehetőséget leprogramoztak ( nyilván több a lehetőség ), viszont a 18-asokkal megálltak, lehet, hogy kissé zsákutca ?!
A hozzászólás módosítva: Jún 10, 2015
(#) pipi válasza kissi hozzászólására (») Jún 10, 2015 /
 
18ban kevés a flash, kevés a ram, lassú.
Szerintem ha nem használsz valami cél hang ICt akkor nem fog menni.
Pl a VS1011 tud mp3/wav-ot
(#) kissi válasza (Felhasználó 15355) hozzászólására (») Jún 10, 2015 /
 
Igen, ilyenre gondoltam, köszi ! Ezek szerint megoldható, elég a sebessége és a memóriája !
(#) kissi válasza pipi hozzászólására (») Jún 10, 2015 /
 
Köszi, megnézem ezt is !
(#) hpmaster hozzászólása Jún 19, 2015 /
 
Üdvözletem az Uraknak!

Némi segítségre lenne szükségem. Adott egy MCP3425A típusú 16bites ADC.
A rendelkezésre álló proci egy PIC24FJ64GA004.
A problémám az, hogy nemigen sikerül életre keltenem az ADC-t.

Kaphatnék némi segítséget? PIC-ekben nem nagyon vagyok jártas, mint ahogyan a C nyelv rejtelmeiben sem. AVR-eket proramozok inkább basic-ben.

  1. #include <i2c.h>
  2.  
  3. unsigned int adc;
  4.  
  5. ...
  6.  
  7. OpenI2C1(I2C_ON & I2C_IDLE_STOP & I2C_CLK_REL & I2C_IPMI_DIS & I2C_7BIT_ADD & I2C_SLW_DIS & I2C_SM_DIS & I2C_GCALL_DIS & I2C_STR_DIS & I2C_ACK & I2C_ACK_DIS & I2C_RCV_DIS & I2C_STOP_EN & I2C_RESTART_DIS & I2C_START_DIS, 79);
  8.  
  9.                StartI2C1();
  10.         IdleI2C1();
  11.         MasterWriteI2C1( 0xd0 );               
  12.         IdleI2C1();
  13.         MasterWriteI2C1( 0x08 );               
  14.         IdleI2C1();
  15.         StopI2C1();
  16.         IdleI2C1();
  17.  
  18.                StartI2C1();
  19.         IdleI2C1();
  20.         MasterWriteI2C1( 0xd1 );               
  21.                IdleI2C1();
  22.         adc = MasterReadI2C1();
  23.         AckI2C1();
  24.         IdleI2C1();
  25.         adc <<= 8;
  26.                adc = MasterReadI2C1();
  27.         NotAckI2C1();
  28.         IdleI2C1();
  29.  
  30.         StopI2C1();
  31.         IdleI2C1();
  32.  
  33.         CloseI2C1();


Az ADC a proci 1-es és 44-es lábaira van akasztva a megfelelő módon (ellenállások a helyükön).
A hozzászólás módosítva: Jún 19, 2015
(#) apromax hozzászólása Júl 3, 2015 /
 
Egy (DsPIC -es FFT) példa kódban az alábbi constans tömb definíciót találtam. Nekem kicsit bonyolultnak tűnik. El tudná valaki magyarázni hogy kell értelmezni?

  1. const fractcomplex twiddleFactors[] __attribute__ ((space(auto_psv), aligned (FFT_BLOCK_LENGTH*2)))=
  2.         {
  3.         0x7FFF, 0x0000, 0x7F62, 0xF374, 0x7D8A, 0xE707, 0x7A7D, 0xDAD8,
  4.         0x7642, 0xCF04, 0x70E3, 0xC3A9, 0x6A6E, 0xB8E3, 0x62F2, 0xAECC,
  5.         0x5A82, 0xA57E, 0x5134, 0x9D0E, 0x471D, 0x9592, 0x3C57, 0x8F1D,
  6.         0x30FC, 0x89BE, 0x2528, 0x8583, 0x18F9, 0x8276, 0x0C8C, 0x809E,
  7.         0x0000, 0x8000, 0xF374, 0x809E, 0xE707, 0x8276, 0xDAD8, 0x8583,
  8.         0xCF04, 0x89BE, 0xC3A9, 0x8F1D, 0xB8E3, 0x9592, 0xAECC, 0x9D0E,
  9.         0xA57D, 0xA57D, 0x9D0E, 0xAECC, 0x9592, 0xB8E3, 0x8F1D, 0xC3A9,
  10.         0x89BE, 0xCF04, 0x8583, 0xDAD8, 0x8276, 0xE707, 0x809E, 0xF374
  11.         } ;
A hozzászólás módosítva: Júl 3, 2015
(#) zilahi hozzászólása Júl 30, 2015 /
 
Sziasztok!
A következő kódot írtam pic12F628-ra ccsc-ben. Most ismerkedem a megszakításokkal, de nem nagyon akarnak működni. Pl.: ha a timer0-t vagy timer1-et vagy timer2-t használom nem működik a megszakítás, de ha a timer0-t használom rtcc névvel akkor igen, de ha mellette a külső megszakítást is használom ismét nem működik.
Mi lehet a baj?
Másik kérdésem az, hogy a külső megszakításnál, hogyan lehet beállítani, hogy pl.: csak a 0. láb állapotváltozása generálja a megszakítást?
A segítségeket köszönöm.

  1. #include "C:\Users\��dám\Desktop\Autó\autó 12.h"
  2. int16 i;
  3. int16 j;
  4.  
  5. #int_RTCC
  6. void  RTCC_isr(void)
  7. {
  8. j=j+1;
  9. if (j == 1000)
  10. {
  11. output_toggle (pin_a2);
  12. j=0;
  13. }}
  14. int_EXT
  15. void  EXT_isr(void)
  16. {
  17. output_high (pin_a3);
  18. }
  19. void main()
  20. {
  21. i=0;
  22. j=0;
  23.  
  24. setup_adc_ports(NO_ANALOGS|VSS_VDD);
  25. setup_adc(ADC_OFF);
  26. setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4);
  27. setup_timer_1(T1_DISABLED);
  28. setup_timer_2(T2_DISABLED,0,1);
  29. setup_ccp1(CCP_PWM);
  30. set_pwm1_duty(0);
  31. setup_comparator(NC_NC);
  32. setup_vref(FALSE);
  33. enable_interrupts(INT_RTCC);
  34. enable_interrupts(INT_EXT);
  35. enable_interrupts(GLOBAL);
  36. setup_oscillator(OSC_4MHZ);
  37.  
  38. while (TRUE)
  39. {
  40.  
  41. }}
(#) AZoli hozzászólása Aug 16, 2015 /
 
Sziasztok!

Van egy néha állandó, néha random módon változó változóm, "uInt Deg" ami egy szög érték, 0-359°. Ezt átadom egy fg. paraméterként.
Szeretném, ha ezt az értéket "követné" egy másik, olyan módon, hogy maximum 45° -al térhet el az előző értéktől. Ez lenne a fg. visszatérési értéke.
Tehát a cél az, hogy ha nagyot ugrik Deg változó, akkor fg. hívásonként 45° -os lépésekben kövesse azt a visszatérési érték, majd utolsó lépésben a maradék. Nem tudom ez így mennyire
érthető..
A gond ott van, hogy ennek "nullátmenetnél" is működnie kéne, tehát ha az előző visszatérési érték 340° volt, a új fg. paraméter pedig 20°, akkor a simán visszatérhet a 20°-al, mert a 340° és a 20° között kisebb a különbség mint 45°. (Ne menjen körbe)
Nem konkrét kódot várok, az algoritmust nem találom..
Ilyesmivel próbálkoztam eddig:
  1. uInt Diff = 0;
  2.     static uInt Deg_Last = 0;
  3.     if (Deg < Deg_Last)
  4.     {
  5.         Diff = Deg_Last - Deg;
  6.         if ((Diff < 315) && (Diff > 45)) //Ha 315° -nál nagyobb, vagy 45° -nál kisebb, akkor hagyhatjuk.
  7.         {
  8.             if (Deg > 45) Deg = Deg - 45; //egyébként max 45° -al lehet kevesebb
  9.             else Deg = 360 - Deg;
  10.         }
  11.     }
  12.     else
  13.     {
  14.         Diff = Deg - Deg_Last;
  15.         if ((Diff < 315) && (Diff > 45)) //Ha 315° -nál nagyobb, vagy 45° -nál kisebb, akkor hagyhatjuk.
  16.         {
  17.             Deg = Deg + 45; //egyébként max 45° -al lehet több
  18.             if (Deg > 360) Deg = 360 - Deg;
  19.         }
  20.     }
  21.     Deg_Last = Deg;    
  22.         return Deg;
(#) kriszrap hozzászólása Aug 18, 2015 /
 
Sziasztok
Hát ahogy nézem nagyon alapkérdés lesz a többihez képest
Első a villogonál azt szeretném hogy 5x(ki-be) vilog és tovább lép (gyorsaságot hogy lehet beállítani??)

Hát ez egy picit bonyolult lesz a "jatek2"
Első forral azt szeretném hogy hányszor menjen végig az anim és persze milyen gyorsan.
A második for az egyszerűsítés képen van ott mert nem szeretném használni CRT+c CRT+v.
Ha breaket nem használom ismétel és nem lép tovább(for ciklus végtelen esz) ezért így kellet megoldanom de sztem erre van más megoldás.
Köszönöm előre a segítségeteket.

  1. void jatek1() //villog
  2. {
  3.        k(0b00001111,0b11111111,ido5);
  4.        k(0b00000000,0b00000000,ido5);
  5.        jatek = 6;
  6. }
  7.  
  8. void jatek2()
  9. {
  10.  for(i=0; 0<=5000;i++)
  11.  {
  12.   for(e=0; 0<2;e++)
  13.   {
  14.     k(0b00001111,0b00010001,ido10);
  15.     k(0b00001110,0b10010010,ido10);
  16.     k(0b00001110,0b01010100,ido10);
  17.     k(0b00001110,0b00111000,ido10);
  18.   }
  19.     if(i=5000)break;
  20.   }
  21.  
  22.   jatek = 3;
  23. }
  24.  
  25. void main() {
  26.    TRISB = 0;
  27.    TRISA = 0;
  28.    jatek = 1;
  29.    while(1)
  30.    {
  31.      switch(jatek)
  32.      {
  33.      case 1:jatek1();
  34.      case 2:jatek2();
  35.      default: jatek = 1;
  36.      }
  37.    }
  38. }
(#) usane válasza kriszrap hozzászólására (») Aug 18, 2015 /
 
1.- Ez így totál hiányos, értelmetlen és működésképtelen.Kicsit több info kellene, erre így senki sem fog válaszolni.
2. - Ha valamit 5x akarsz, hogy lefusson azt ugyebár ciklusba célszerű szervezni.
Gyorsaságot időzítéssel lehet módosítani. Időzítésre több megoldás létezik, a legegyszerűbb a delay(), delayms() és hasonlók (fordítótól függ), a legjobb pedig a timeres megszakításos módszer.
3. - A másodiknál fogalmunk sincs mit akarsz, a CRT egy monitor típus, az általad belinkelt kódrészletben semmi jele nem látható.
A for jó hogy végtelen lesz mivel olyan feltételt adtál meg
Idézet:
„0<=5000, 0<2”

Ezek mindig igazak, de ha mondasz példát mikor nem teljesül akkor megemelem a nem létező kalapom.

Továbbá ez alapján a jatek változó sosem lesz 2, vagy ez csak tesztelésre van?
Ha a függvényben átállítod a jatek változót az vajon mitől adódna át a főprogramnak, merthogy a függvény void típusú, nincs visszatérési értéke.
Ezeket gondold át aztán jelentkezz kicsit több infoval és lesz aki válaszol, mert van ám itt nálam sokkal nagyobb C guru.
(#) kriszrap válasza usane hozzászólására (») Aug 18, 2015 /
 
Hát meg van a hiba és jól működik
Kedves usane
Rávilágított a problémára. Kis figyelmetlenség
0<2 helyet i<2 kell
(#) usane válasza kriszrap hozzászólására (») Aug 18, 2015 /
 
Akkor gratulálok, ám abban a for-ban "e" változó van, az "i" az első for-ban van, ne keverd össze.
A hozzászólás módosítva: Aug 18, 2015
Következő: »»   112 / 153
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