Fórum témák

» Több friss téma
Fórum » CCS PIC Compiler
 
Témaindító: (Felhasználó 1542), idő: Ápr 3, 2006
Lapozás: OK   114 / 118
(#) zenetom válasza zenetom hozzászólására (») Feb 22, 2016 /
 
Na ez a plugin nem tartalmaz fordítót, csak berakja az MPLAB-ban a fordítók közé (feltéve, hogy föl van telepítve a fordító..). És most meg a weboldalon csak azt találom, hogy 45nap a demo, pedig valahol olvastma, hogy 2k.. Aztán lehet hogy a 45 nap után lekorlátozódik 2k-ra..
(#) Gyimate válasza __Chris__ hozzászólására (») Feb 23, 2016 /
 
Szia,
Ha lejár a 45 nap, egyszerűen nem indul el a program, de addig teljes értékűként tudod használni.
(#) messer hozzászólása Feb 24, 2016 /
 
Sziasztok?

Idézet:
„#define bkbhit1 (next_in1!=next_out1)”


Ez a sor most mit jelent a bkbhit1 akkor lesz igaz ha next_in1 nem egyenlő next_out1-el??
(#) zenetom válasza messer hozzászólására (») Feb 24, 2016 /
 
Szia!
Szerintem ezzel a bkbhit1 szócskának adsz egy ilyen definícót:
next_in1!=next_out1, vagyis csak simán amikor a bkbhit1-t használod, akkor a next_in1!=next_out1 kifejezést használod.
(#) messer hozzászólása Feb 24, 2016 /
 
Idézet:
„next_in1!=next_out1”


!= ezt nem igazán értem
(#) Hp41C válasza messer hozzászólására (») Feb 24, 2016 /
 
A "!=" egy elemi C operátor: nem egyenlő. KERNIGHAN-RITCHIE: A C programozási nyelv
(#) messer hozzászólása Feb 28, 2016 /
 
Sziasztok.

Idézet:
„#use rs232(baud=9600,parity=N, xmit=PIN_C6,rcv=PIN_C7,bits=8)”


ezzel a sorral tettre kész a pic az usart adatok fogadására..

Van egy olyan problémám hogy program futás közben még nincs szükségem az adatokra,mivel jönnek tele pakolja a pik bufferét azt szeretném, hogy amíg nem akarok az adatokkal foglalkozni az ne töltse a buffert mivel lehet tiltani?
(#) Lamprologus hozzászólása Ápr 9, 2016 /
 
A CCS-C example mappában találtam egy USB-soros átalakítót (Examples\ex_usb_to_serial.c), ezt használnám fel egy programomban...

Ha jól értelmezem a progit akkor át tudja állítani az uart sebességét, annak megfelelően, hogy az USB porton mit olvas ki a PC felől.

  1. newBaud = usb_cdc_line_coding.dwDTERrate;
  2.          
  3.       if (newBaud != currBaud)
  4.       {
  5.          if (newBaud == 115200)
  6.          {
  7.             setup_uart(115200, STREAM_UART1);
  8.          }
  9.          else
  10.          {
  11.             switch(newBaud)
  12.             {
  13.                case 300:   setup_uart(300, STREAM_UART1);   break;
  14.                case 1200:   setup_uart(1200, STREAM_UART1);   break;
  15.                case 2400:   setup_uart(2400, STREAM_UART1);   break;
  16.                case 4800:   setup_uart(4800, STREAM_UART1);   break;
  17.                default:
  18.                case 9600:   setup_uart(9600, STREAM_UART1);   break;
  19.                case 19200:   setup_uart(19200, STREAM_UART1);   break;
  20.                case 38400:   setup_uart(38400, STREAM_UART1);   break;
  21.                case 57600:    setup_uart(57600, STREAM_UART1);   break;
  22.                case 58600:    setup_uart(newBaud, STREAM_UART1);   break;          
  23.            
  24.             }
  25.          }
  26.       }


Nekem a kódban lévőknél tőbb sebesség kéne ( nem szabvány értékek is), ráadásul a switch résznél nem is fogad el 65536-nál nagyobb értéket...
Miért nem így állítja át az uart sebességét?
  1. if (newBaud != currBaud)
  2.       {
  3.             setup_uart(newBaud, STREAM_UART1);
  4.        }
(#) Lamprologus hozzászólása Máj 23, 2016 /
 
Most kezdek ismerkedni a PIC24FJ256GB106-al ...

Hogy tudom pl. az RPINR0 regiszter tartalmát írni?
( magyarul azt akarom megadni, hogy melyik (RP) lábhoz rendelje hozzá az INT1 megszakítást)
(#) icserny válasza Lamprologus hozzászólására (») Máj 23, 2016 /
 
Olvasd el a "Control Register Lock" című szekciót az adatlapban! Normál körülmények között az RPINRx regiszterekbe történő írás le van tiltva, a feloldáshoz/visszazáráshoz az IOLOCK bitet kell matatni. Ez sem egyszerű dolog, egy speciális feloldási szekvenciát kell lejátszani. Nálam most egy másik PIC24 adatlap van kéznél, úgyhogy nálad egyes részletek másképp nézhetnek ki:
Idézet:
„To set or clear IOLOCK, a specific command sequence must be executed:
1. Write 0x46 to OSCCON<7:0>.
2. Write 0x57 to OSCCON<7:0>.
3. Clear (or set) the IOLOCK bit as a single operation”
(#) Lamprologus válasza icserny hozzászólására (») Máj 23, 2016 /
 
Akkor hogyan lehet hozzárendelni valamelyik RP lábat, az INT1 megszakításhoz?
(Ill. bármelyik RP lábat hozzárendelni olyan perifériához aminek nincs kivezetése)
És ez CCS-C ben konkrétan hogy is néz ki?
(#) Lamprologus válasza Lamprologus hozzászólására (») Máj 23, 2016 /
 
Lehet hogy így:

#pin_select INT1=PIN_B3 ?
(#) usane válasza Lamprologus hozzászólására (») Máj 23, 2016 /
 
Elolvastad amit icserny írt?
Old fel az IOLOCk-ot, azután írhatod. Az RPINRx és RPORx regiszterek 6 bitesek. A bitek állapota határozza meg melyik RP lábra kerül a funkció. Esetedben ha RP0 lábra akarod tenni, akkor az értéke 0, stb..

Nem tudom ez a "#pin_select" micsoda , ha a ccs belső függvénye akkor biztos így van de én sosem használom, egy fordítónak sem a belső függvényeit.
Direktben megadom hogy:
RPINR0 = 0;
(#) icserny válasza Lamprologus hozzászólására (») Máj 23, 2016 /
 
Idézet:
„Akkor hogyan lehet hozzárendelni valamelyik RP lábat, az INT1 megszakításhoz?”
CCS C-hez nem értek. C30 alatt (a korábbi hozzászólásomban említett unlockolás után) így nézne ki:

  1. RPINR0bits.INT1R = pin;


Ahol pin a kipécézett RPn láb sorszáma. Például az RP6 jelű láb esetén 6-ot kell írni.
(#) Lamprologus válasza icserny hozzászólására (») Máj 23, 2016 /
 
Sajnos hibaüzenetet ad rá fordítások.
undefined identifier RPINR0bits
A hozzászólás módosítva: Máj 23, 2016
(#) Lamprologus válasza usane hozzászólására (») Máj 23, 2016 /
 
RPINR0 = 0;
szintén undefined identifier ...

viszont a #pin_select INT1=PIN_B3 -t simán lefordítja.
(#) usane válasza Lamprologus hozzászólására (») Máj 23, 2016 /
 
Igen, úgy néz ki a CCS másképp adta meg ezen regiszterek elérését.
Működik is amit lefordított?
(#) icserny válasza Lamprologus hozzászólására (») Máj 23, 2016 /
 
Idézet:
„Sajnos hibaüzenetet ad rá fordításkor.”
Ezt fölösleges volt ideírni, hiszen írtam, hogy a C30-hoz való szintaxist adtam meg. Az más fordítóhoz nyilvánvalóan nem jó.

Hasznosabb lett volna a CCS PCD fordító referencia kézikönyvben rákeresni az RPINR vagy INT1 kulcsszavakra! Én ezeket találtam Pin konfigurálás témakörében:

#PIN_SELECT function=pin_xx (137. oldal)

vagy

pin_select(peripheral_pin, pin, [unlock]],[lock]); (186. oldal)

Az utóbbi függvény menet közbeni átállítást tesz lehetővé. Az unlock/lock alapértelmezetten TRUE, tehát a feloldás majd visszazárás automatikusan megtörténik. Kiírni csak akkor kell, ha pl. nem akarod visszazárni.
A hozzászólás módosítva: Máj 23, 2016
(#) Lamprologus válasza icserny hozzászólására (») Máj 23, 2016 /
 
Hát most alaposan át kell gondolnom hogy mit írjak mert nem szeretnék senkit sem megbántani, pláne nem azokat akik próbálnak segíteni...

Természetesen amennyire tőlem telik próbálom tanulmányozni a Fordító referencia kézikönyvét is, és a PIC leírását is. Erre szolgáljon bizonyítékul, hogy 10:01 hozzászólásomban már én is emlitettem a #PIN_SELECT function -t.

Közben már kicsit előbbre gondolkodva, szerettem volna megtudni, hogy hogyan lehet a regisztereket "közvetlenül" is elérni.

Valahol már mintha láttam volna az álltalad írt formátumot is, gondoltam hátha ... És kipróbáltam usane álltal javasolt módot is, de mindkettőre hibaüzenetet kaptam.

Szóval akkor a kérdésem, hogyan hivatkozhatok CCS-C alatt közvetlenül a regiszterekre?
(#) usane válasza Lamprologus hozzászólására (») Máj 23, 2016 / 1
 
MC és XC fordítóknál meg szoktam nézni, hogy az adott PIC include(header) fájljában mi van megadva (pl: "pic24fj256gb110.h" vagy valami hasonló) és az abban megadott névre hivatkozok. Gondolom a CCSC-ben is van adott mikrovezérlőre vonatkoztatott include fájl, abban nézd meg mi van megadva.
A hozzászólás módosítva: Máj 23, 2016
(#) icserny válasza Lamprologus hozzászólására (») Máj 24, 2016 /
 
A lábkiosztás konfigurálása kapcsán nem javaslom a közvetlen regiszterírást, mert:
1. Egy RPINRx regiszter több (kettő) periféria bemenetet is konfigurálhat, emiatt nem regisztert, hanem annak csak egy bitcsoportját szabad írni.
2. A módosítani kívánt bitcsoport nem feltétlenül a legalsó helyiértéken található (a fent említett kettőből értelemszerűen csak az egyik lehet ott), ezért a helyiérték eltolásokkal is bűvészkedni kell.
3. Volt már olyan a fórum történetében, hogy a CCS C fordító a feloldási szekvenciába beszúrt valami fölösleges utasítást, és így sikertelen lett a feloldás.

Ezért a lábkiosztás konfigurálására biztonságosabb a #pin_select direktíva, vagy a pin_select() függvény használata.
A hozzászólás módosítva: Máj 24, 2016
(#) Lamprologus válasza usane hozzászólására (») Máj 24, 2016 /
 
Közben azt hiszem rájöttem a dolog nyitjára.

CCS-nél alapból nincsenek meg a header fájlban a regiszterek.

A regisztereket tartalmazó fájlt létre kell hozni a Device Table Editor programmal ( még választani is lehet, ki, hogy szeretne hivatkozni a regiszterekre).

Ha nem is a lábkiosztás változtatásához, de máshoz úgy látom jól lehet majd használni ezt a lehetőséget ...

Köszönöm a segítséget mindenkinek!
(#) madazg77 hozzászólása Jún 19, 2016 /
 
Sziasztok!

I2c kommunikációt szeretnék megvalósítani egy pic és egy gyorsulás mérő között, de valamiért meg se nyikkannak a kimenetek. PICkit2 logikai analizátorával figyelem a portot. Felhúzó ellenállások beépítve. Az SPI működik. Próbáltam i2c_init()-el is de semmit nem változtatott. Betöltöttem időzítések nélkül is de úgy sem hozott eredményt. Mit ronthatok el?

Köszönöm.
A hozzászólás módosítva: Jún 19, 2016

main.c
    
(#) Buvarruha válasza madazg77 hozzászólására (») Jún 19, 2016 /
 
Az adat és órajel lábak biztos, hogy pontosan vannak megadva? Fast módban próbáltad?
(#) madazg77 válasza Buvarruha hozzászólására (») Jún 19, 2016 /
 
Igen, próbáltam fast módban is. A lábakat adatlapból többször is ellenőriztem. Próbáltam i2c_init()-et is, de hiába.
(#) Buvarruha válasza madazg77 hozzászólására (») Jún 19, 2016 / 2
 
És, ha kihagyod a force_hw-t? Ahogy nézem a korábbi programjaimat én is kihagytam és emlékszem is, hogy volt valami anomália akkoriban. Amúgy nem lehet, hogy beragad valahol a program? Szedd ki az olvasás részt, azt amúgy is interruptba kellene rakni.
(#) madazg77 válasza Buvarruha hozzászólására (») Jún 19, 2016 /
 
Kihagytam a force_hw-t és így megjelent a sck jel és sda az analizátoron.
Köszönöm!
(#) Lamprologus hozzászólása Aug 4, 2016 /
 
Nem akar menni az Mplab alatt a nyomkövetés ... PIC24FJ256GB106
A program egyébként működik.
Ezt a hibaüzenetet kapom:
Idézet:
„PK3Err0040: The target device is not ready for debugging.
Please check your configuration bit settings and program
the device before proceeding.”

  1. #include <24FJ256GB106.h>
  2.  
  3. #device ICSP=1
  4.  
  5. #fuses HS          //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
  6.  
  7. #fuses PLL5        //Divide By 5(20MHz oscillator input)
  8. #fuses PR_PLL      //Primary Oscillator with PLL
  9. #fuses ICSP1       //ICD uses PGC1/PGD1 pins
  10.  
  11. #FUSES DEBUG
  12.  
  13. #use delay(clock=32MHz,crystal=20000000, USB_FULL)
  14.  
  15. #FUSES NOWDT                    //No Watch Dog Timer
  16. #FUSES WINDIS                   //Watch Dog Timer in non-Window mode
  17. #FUSES NOWRT                    //Program memory not write protected
  18. #FUSES NOPROTECT                //Code not protected  reading
  19. #FUSES NOJTAG                   //JTAG disabled
  20. #FUSES DISUVREG                 //Internal USB 3.3V Regulator disabled
  21. #FUSES IOL1WAY                  //Allows only one reconfiguration of peripheral pins
  22. #FUSES NOOSCIO                  //OSC2 is clock output
  23. #FUSES CKSFSM                   //Clock Switching is enabled, fail Safe clock monitor is enabled
  24. #FUSES IESO                     //Internal External Switch Over mode enabled
  25. #FUSES WPFP                     //Write/Erase Protect Page Start/End Location, set to last page or use WPFP=x to set page
  26. #FUSES WPDIS                    //All Flash memory may be erased or written
  27. #FUSES NOWPCFG                  //Configuration Words page is not erase/write-protected
  28. #FUSES WPEND                    //Flash pages WPFP to Configuration Words page are write/erase protected
  29.  
  30.  
  31. #use FIXED_IO( B_outputs=PIN_B15,PIN_B14,PIN_B13,PIN_B12 )
  32. #use FIXED_IO( D_outputs=PIN_D5 )
  33. #use FIXED_IO( F_outputs=PIN_F5,PIN_F4 )
  34.  
  35. #define PGD   PIN_B0
  36. #define PGC   PIN_B1
  37. #define IO4_   PIN_B2
  38. #define IO3_   PIN_B3
  39. #define IO2_   PIN_B4
  40. #define IO1_   PIN_B5
  41. #define LED1   PIN_B12
  42. #define LED2   PIN_B13
  43. #define LED3   PIN_B14
  44. #define LED4   PIN_B15
  45. #define LCD_D5   PIN_E0
  46. #define LCD_D4   PIN_E1
  47. #define LCD_E   PIN_E2
  48. #define LCD_RW   PIN_E3
  49. #define LCD_RS   PIN_E4
  50. #define SCL_   PIN_E6
  51. #define SDA_   PIN_E7
  52. #define NEXT_TX   PIN_D1
  53. #define NEXT_RX   PIN_D2
  54. #define MINUSZ   PIN_D3
  55. #define ENTER   PIN_D4
  56. #define LCD_A   PIN_D5
  57. #define ESC   PIN_D6
  58. #define PLUSZ   PIN_D7
  59. #define TINY_RTC_SDA   PIN_D9
  60. #define TINY_RTC_SCL   PIN_D10
  61. #define TINY_RTC_SQ   PIN_D11
  62. #define LCD_D7   PIN_F0
  63. #define LCD_D6   PIN_F1
  64. #define LED5   PIN_F4
  65. #define LED6   PIN_F5
  66. #define ESP_TX_   PIN_G6
  67. #define ESP_RX_   PIN_G7
  68.  
  69.  
  70. #pin_ U1TX=PIN_G6
  71. #pin_ U1RX=PIN_G7
  72. #use rs232(UART1, baud=9600, stream=UART_PORT1)
  73.  
  74. #pin_ U2TX=PIN_D1
  75. #pin_ U2RX=PIN_D2
  76. #use rs232(UART2, baud=9600, stream=UART_PORT2)
  77.  
  78. #use i2c(MASTER, I2C1, FAST, stream=I2C_PORT1)
  79. #use i2c(MASTER, I2C3, FAST, stream=I2C_PORT2)
  80.  
  81. #pin_ OC1=PIN_D5
  82.  
  83.  
  84. #bit U1OTGSTAT_SESVD=getenv("BIT:SESVD")
  85. #define USB_CABLE_IS_ATTACHED()  (U1OTGSTAT_SESVD)
  86. #define USB_CONFIG_BUS_POWER 500
  87. #define USB_STRINGS_OVERWRITTEN
  88.  
  89. char USB_STRING_DESC_OFFSET[]={0,4,14};
  90.  
  91. char const USB_STRING_DESC[]={
  92.    //string 0 - language
  93.       4,  //length of string index
  94.       0x03,  //descriptor type (STRING)
  95.       0x09,0x04,  //Microsoft Defined for US-English
  96.    //string 1 - manufacturer
  97.       10,  //length of string index
  98.       0x03,  //descriptor type (STRING)
  99.       'L',0,
  100.       'A',0,
  101.       'M',0,
  102.       'P',0,
  103.    //string 2 - product
  104.       22,  //length of string index
  105.       0x03,  //descriptor type (STRING)
  106.       'L',0,
  107.       'A',0,
  108.       'P',0,
  109.       'M',0,
  110.       '_',0,
  111.       'P',0,
  112.       'I',0,
  113.       'C',0,
  114.       '2',0,
  115.       '4',0
  116. };
  117.  
  118. #include <usb_cdc.h>
  119.  
  120. #build(stack=1024)
  121.  
  122. // eddig a gyári varázsló //////////////////


Mit nem veszek észre?
A hozzászólás módosítva: Aug 4, 2016
(#) Dempsey válasza Lamprologus hozzászólására (») Aug 4, 2016 /
 
Szia!
Át van állítva Debugra vagy Release-en hagytad az MPLAB-ot?
(#) Lamprologus válasza Dempsey hozzászólására (») Aug 4, 2016 /
 
Át állítottam Debugra.
A hozzászólás módosítva: Aug 4, 2016
Következő: »»   114 / 118
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