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   70 / 118
(#) vicsys válasza whalaky hozzászólására (») Ápr 1, 2012 /
 
Nem tudom, de nálam a
  1. sleep();
  2. #asm
  3. NOP
  4. #endasm

jól működik.
(#) whalaky válasza vicsys hozzászólására (») Ápr 1, 2012 /
 
Én is ezt vártam volna tőle, de nem....
  1. #define Nop() #asm nop #endasm

Ez így ránézésre ugyan az.....
(#) whalaky válasza whalaky hozzászólására (») Ápr 1, 2012 /
 
A dolog "megoldódni" látszik, bár érteni nem értem.
Ha az RB_isr() függvény - ez ébreszti a pic-et - nem tartalmaz semmi értelmes utasítást, egyszerűen a sleep() sem hajtódik végre. Ha csak egy x = input_b() van benne már megy, ha csak egy sima nop vagy az input_b() van értékadás nélkül, már nem megy. Ez valami CCS feature?
(#) potyo válasza whalaky hozzászólására (») Ápr 1, 2012 /
 
Én arra tippelek,hogy a sleep előtt bejön egy RB megszakítás,és a lekezelés hiánya miatt filyamatosan felébreszti a picet (a megszakításjelzö logika folyamatosan dolgozik,tehát a dolog még az elött megtörténhet,hogy engedélyezed a megszakítást,csak lekezelés hiányában ott marad). Az RB megszakításnál ki kell olvasnod a portot,nem elég csak az rbif bitet törölni. Adatlapot nézd meg. Az értékadás nélküli pedig vélhetöen azért nem müködik,mert a fordító kioptimalizálja azt a sort.
(#) whalaky válasza potyo hozzászólására (») Ápr 1, 2012 /
 
Így igaz! Működik! Köszi!
(#) messer hozzászólása Ápr 3, 2012 /
 
Sziasztok. SPI-vel "szenvedek"

valahol hibázok de nem rom hol
Az sck kimeneten nem jön meg az órajel, és az sdo-n az adatot sem látom.

íme a kód

  1. #include <12F1822.h>
  2. #device adc=8
  3.  
  4. #FUSES NOWDT                 //No Watch Dog Timer
  5. #FUSES INTRC_IO              //Internal RC Osc, no CLKOUT
  6. #FUSES NOCPD                 //No EE protection
  7. #FUSES PROTECT               //Code protected from reads
  8. #FUSES MCLR                  //Master Clear pin enabled
  9. #FUSES PUT                   //Power Up Timer
  10. #FUSES NOBROWNOUT            //No brownout reset
  11. #FUSES IESO                  //Internal External Switch Over mode enabled
  12. #FUSES FCMEN                 //Fail-safe clock monitor enabled
  13.  
  14. #use delay(clock=8000000)
  15.  
  16.  
  17.  
  18. #define LED PIN_A5  //CHANGE PIN_XX TO YOUR LED PIN NUMBER, EX: PIN_A5
  19.  
  20. void main()
  21. {
  22. setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_16);
  23.  
  24.  
  25.    
  26.    
  27.  
  28.     //Example blinking LED program
  29.     while(true){
  30. setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_16);
  31.  
  32.  
  33.  
  34. spi_write(0x80);
  35.    
  36.       output_low(LED);
  37.       delay_ms(1000);
  38.       output_high(LED);
  39.       delay_ms(1000);
  40.     }
  41.  
  42. }


Láttok benne valamit amit nem jól csinálok?

Segítségeteket köszönöm
(#) messer válasza messer hozzászólására (») Ápr 3, 2012 /
 
Béééééééna vagyok nagy volt az idő az adatok közt még jó hogy nem láttam......

így már látom a mozgást

  1. void main()
  2.     {
  3.     setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_16);
  4.    
  5.    while(true){
  6.  
  7.     spi_write(200);
  8. delay_us(100);
  9.        
  10.         }
  11.      
  12.     }
(#) messer hozzászólása Ápr 3, 2012 /
 
Amit viszont el kellene magyaráznotok mert adatlapból, manualbol nem jövök rá, hogy mi a különbség az SPI_setupra vonatkozóan az
Idézet:
„SPI_L_TO_H”
és SPI_XMIT_L_TO_H[/quote] között.
(#) vilmosd válasza messer hozzászólására (») Ápr 3, 2012 / 1
 
Pedig az adatlapbol derul ki. Azt jelenti, hogy a bemenetbol melyik elnel veszi a mintat, es hogy az adasnal melyik eńnel ervenyes a kimeno adat.

41413-238.pdf
    
(#) messer válasza vilmosd hozzászólására (») Ápr 3, 2012 /
 
Igen értem ott rontottam, hogy az elején csak "SPI_L_TO_H" definiáltam és ez a vételre vonatkozik mivel adni akartam "SPI_XMIT_L_TO_H? " is kell........

Még lenne kérdésem, hogyan csinálnátok meg a következőt ccsc-vel:

mcp4802-vel akarok feszültségeket létrehozni.
16biten kell címezni az eszközt. A feszültséget amit kiad azt a középső 8bit határozza meg (pontosabban még bele szól egy bit a 13. ez lényegtelen) tehát szeretném az eszközt címezni 2x8 bittel. valahogyan maszkolnom kellene de ötletem sincs... azt kellene elérnem hogy van egy 8bites értékem és ezt 2 nyolc bites értékkel akarom elküldeni mégpedig úgy hogy az első elküldött érték alsó 4bitje és a második elküldött érték felső 8bitje hordozza a 8bites adatot. Na ezt jól megbonyolítottam
(#) messer válasza messer hozzászólására (») Ápr 3, 2012 /
 
Ezt sikerült összehoznom működik:
  1. while(true){
  2.  
  3. value=93;
  4. msb=value&0b00001111;
  5. bit_set(msb,4);  //Output Shutdown Control bit
  6. lsb=value&0b11110000;
  7.  
  8.    
  9. output_low(cs);
  10.     spi_write(msb);
  11. spi_write(lsb);
  12. output_high(cs);
  13. delay_us(100);
  14.  
  15.        
  16.         }


A maszkolásra nem tudom van-e egyszerűbb megoldás?
(#) vilmosd válasza messer hozzászólására (») Ápr 3, 2012 /
 
Struct es union tipusu valtozokkal lehet ilyen varazslasokat csinalni.
(#) messer válasza vilmosd hozzászólására (») Ápr 3, 2012 /
 
Amit írtam nem is jó mert az lsb-t 4bittel tolni kell balra ajjaj asm-ben egyszerűbb lenne.....
(#) messer válasza vilmosd hozzászólására (») Ápr 3, 2012 /
 
Tudnál erre valami kis példát írni?
(#) vilmosd válasza messer hozzászólására (») Ápr 3, 2012 / 1
 
Probald meg az union es a struct hasznalatat. Egy pelda (nem a Te eseted)
  1. union  
  2. {
  3.    int16 prog;
  4.    struct
  5.    {
  6.    int porc    : 8;   //unit porcent
  7.    int time_p  : 7;   //unit time
  8.    int on_s : 1;   //unit on/off
  9.    };
  10. }progm;

Ebben az esetben egy unsigned int16 tipusu valtozot hoztunk letre, amiben van 3 kulonbozo hosszusagu valtozo, ugymint 1 8 bites, 1 7 bites, es 1 1 bites valtozo (16 bit osszesen). A belso valtozok kulon irhatok olvashatok, mig az egesz union hasznalhato ( EEPROMba iras SPI-n kuldes etc..) mint egy int 16. Valami ilyesmit kellene csinalnod, es nem kell akkor shiftelni, maszkolni es egyeb varazslasokat csinalni a programban, hanem sima ertekadassal megoldhato a dolog. Tisztabb, szarazabb erzes.
(#) messer válasza vilmosd hozzászólására (») Ápr 3, 2012 /
 
Jól hangzik de nem nagyon tudom átültetni az én esetemre még csak megérteni sem.....
(#) El_Pinyo válasza messer hozzászólására (») Ápr 3, 2012 /
 
Shift operátor C-ben is van << balra; >> jobbra.
Pl.:
  1. var = var << 4;    //Négy bittel balra léptet
(#) messer válasza El_Pinyo hozzászólására (») Ápr 3, 2012 /
 
Akkor marad ez a megoldás, aztán majd áttérek az elegánsabbra ha fel bírom fogni
(#) vilmosd válasza messer hozzászólására (») Ápr 3, 2012 /
 
pedig nem igen nehez, csak a valtozok neveit es a hosszusagot kell atirni.
  1. union  
  2. {
  3.    int16 Da_cntr;
  4.    struct
  5.    {
  6.    int a_b    : 1;   //bit a/b
  7.    int na1    : 1;   //bit void
  8.    int ga   : 1;   //bit gain
  9.    int shdn   : 1;   //bit shdown
  10.    int data_da  : 8;   //int DA Data
  11.    int na4  :4;   //4 bit void
  12.    };
  13. }da_cntrw;
  14.  
  15.  
  16.  da_cntrw.data_da=100;// data to DAC
  17. da_cntrw.a_b=0;// chanel A
  18. da_cntrw.ga=1;//gain 1x
  19. da_cntrw.shdn=1;// chanel a active
  20. spi_wr (da_cntrw.Da_cntr);write to MCP4802

Ugy kepzeld el, hogy a struktura megegyezik bitrol bitre a regiszter felepitesevel. Viszont resze az unionnak. Amikor valtoztatsz valamit az union int16 ertekenek a bitjeit valtoztatod.
(#) messer válasza vilmosd hozzászólására (») Ápr 3, 2012 /
 
Biztos, hogy jó így a szintaktika ahogy leírtad nekem? Mert sehogy sem bírom megetetni a fordítóval.
(#) potyo válasza messer hozzászólására (») Ápr 3, 2012 /
 
Arra gondolok, hogy a CCS esetleg nem szereti az anonim struktúrákat az unionban. Próbáld meg így

  1. union
  2. {
  3.    int16 Da_cntr;
  4.    struct
  5.    {
  6.    int a_b    : 1;   //bit a/b
  7.    int na1    : 1;   //bit void
  8.    int ga   : 1;   //bit gain
  9.    int shdn   : 1;   //bit shdown
  10.    int data_da  : 8;   //int DA Data
  11.    int na4  :4;   //4 bit void
  12.    } str ;
  13. } da_cntrw;
  14.  
  15. da_cntrw.str.data_da=100;// data to DAC
  16. da_cntrw.str.a_b=0;// chanel A
  17. da_cntrw.str.ga=1;//gain 1x
  18. da_cntrw.str.shdn=1;// chanel a active
  19. spi_wr (da_cntrw.Da_cntr);write to MCP4802


Vagy ha nem jó, akkor másold ide a hibaüzenetet.
(#) vilmosd válasza messer hozzászólására (») Ápr 3, 2012 /
 
Nem tudom mi a hibauzenet, de nalam eleg sok ilyen tipusu union szokott elofordulni, es a fordito meg nem vinnyogott sohasem.
(#) messer válasza vilmosd hozzászólására (») Ápr 3, 2012 /
 
Hmm nem akar össze jönni inkább mindent mutatok.
  1. #include <12F1822.h>
  2.     #device adc=8
  3.      
  4.     #FUSES NOWDT                 //No Watch Dog Timer
  5.     #FUSES INTRC_IO              //Internal RC Osc, no CLKOUT
  6.     #FUSES NOCPD                 //No EE protection
  7.     #FUSES PROTECT               //Code protected from reads
  8.     #FUSES MCLR                  //Master Clear pin enabled
  9.     #FUSES PUT                   //Power Up Timer
  10.     #FUSES NOBROWNOUT            //No brownout reset
  11.     #FUSES IESO                  //Internal External Switch Over mode enabled
  12.     #FUSES FCMEN                 //Fail-safe clock monitor enabled
  13.      
  14.     #use delay(clock=8000000)
  15.      
  16.      
  17.      
  18.     #define cs PIN_A5  //define cs
  19. unsigned int8 msb,lsb,value;
  20.  
  21. void main()
  22.     {
  23.     setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_16);
  24.  
  25.  
  26. union
  27.     {
  28.        int16 Da_cntr;
  29.        struct
  30.        {
  31.        int a_b    : 1;   //bit a/b
  32.        int na1    : 1;   //bit void
  33.        int ga   : 1;   //bit gain
  34.        int shdn   : 1;   //bit shdown
  35.        int data_da  : 8;   //int DA Data
  36.        int na4  :4;   //4 bit void
  37.        } str ;
  38.     } da_cntrw;
  39.      
  40.     da_cntrw.str.data_da=100;// data to DAC
  41.     da_cntrw.str.a_b=0;// chanel A
  42.     da_cntrw.str.ga=1;//gain 1x
  43.     da_cntrw.str.shdn=1;// chanel a active
  44.     spi_wr (da_cntrw.Da_cntr);write to MCP4802
  45.  
  46.  
  47.    while(true){
  48.  
  49. }
  50. }



Hiba üzenetek:


  1. Executing: "C:\Program files\Picc\CCSC.exe" +FM "learn.c" +DF +LN +T +A +M +Z +Y=9 +EA  #__12F1822=TRUE
  2. *** Error 35 "learn.c" Line 48(23,24): Number of bits is out of range
  3. *** Error 36 "learn.c" Line 49(17,20): Expecting a ; or ,
  4. *** Error 48 "learn.c" Line 50(14,17): Expecting a (
  5. *** Error 43 "learn.c" Line 51(5,6): Expecting a declaration
  6. *** Error 48 "learn.c" Line 51(7,15): Expecting a (
  7. *** Error 48 "learn.c" Line 53(5,13): Expecting a (
  8. *** Error 48 "learn.c" Line 53(14,17): Expecting a (
  9. *** Error 48 "learn.c" Line 53(18,25): Expecting a (
  10. *** Error 43 "learn.c" Line 53(26,29): Expecting a declaration
  11. *** Error 43 "learn.c" Line 53(29,30): Expecting a declaration
  12. *** Error 48 "learn.c" Line 54(5,13): Expecting a (
  13. *** Error 48 "learn.c" Line 54(14,17): Expecting a (
  14. *** Error 48 "learn.c" Line 54(18,21): Expecting a (
  15. *** Error 43 "learn.c" Line 54(22,23): Expecting a declaration
  16. *** Error 43 "learn.c" Line 54(23,24): Expecting a declaration
  17. *** Error 48 "learn.c" Line 55(5,13): Expecting a (
  18. *** Error 48 "learn.c" Line 55(14,17): Expecting a (
  19. *** Error 48 "learn.c" Line 55(18,20): Expecting a (
  20. *** Error 43 "learn.c" Line 55(21,22): Expecting a declaration
  21. *** Error 43 "learn.c" Line 55(22,23): Expecting a declaration
  22. *** Error 48 "learn.c" Line 56(5,13): Expecting a (
  23. *** Error 48 "learn.c" Line 56(14,17): Expecting a (
  24. *** Error 48 "learn.c" Line 56(18,22): Expecting a (
  25. *** Error 43 "learn.c" Line 56(23,24): Expecting a declaration
  26. *** Error 43 "learn.c" Line 56(24,25): Expecting a declaration
  27. *** Error 32 "learn.c" Line 57(13,21): Expecting a , or )
  28. *** Error 48 "learn.c" Line 57(22,29): Expecting a (
  29. *** Error 43 "learn.c" Line 57(30,31): Expecting a declaration
  30. *** Error 48 "learn.c" Line 57(37,42): Expecting a (
  31. *** Error 48 "learn.c" Line 60(4,11): Expecting a (
  32. *** Error 43 "learn.c" Line 60(9,10): Expecting a declaration
  33. *** Error 43 "learn.c" Line 60(14,15): Expecting a declaration
  34. *** Error 43 "learn.c" Line 60(14,15): Expecting a declaration
  35. *** Error 43 "learn.c" Line 60(15,16): Expecting a declaration
  36. *** Error 43 "learn.c" Line 62(1,2): Expecting a declaration
  37. *** Error 43 "learn.c" Line 63(1,2): Expecting a declaration
  38.       36 Errors,  0 Warnings.
  39. Halting build on first failure as requested.
  40. BUILD FAILED: Tue Apr 03 21:18:39 2012
(#) czinka hozzászólása Ápr 3, 2012 1 /
 
Sziasztok! Akinek még nincs meg CCS4.130 verzió. Üdv.
http://www.4shared.com/zip/6i9w_nzm/PCWHDv4130.html
(#) potyo válasza messer hozzászólására (») Ápr 3, 2012 /
 
Mondjuk a write to MCP4802 elé nem ártana //-t tenni, hogy azt kommentnek vegye a fordító.
(#) messer válasza potyo hozzászólására (») Ápr 3, 2012 /
 
Igen,de sajnos utána is marad a hiba rengetegem...
(#) vilmosd válasza messer hozzászólására (») Ápr 3, 2012 /
 
Na megvan. Nem akarja a Byte valtozot kettevagni. Tehat byte hatarra kell esnie a 8 bites valtozonak. Kulonben ejnye-bejnye. Itt a megoldas:
  1. union
  2. {
  3.    int16 Da_cntr;
  4.    struct
  5.    {
  6.    int data_da  : 8;   //int DA Data
  7.    int shdn   : 1;   //bit shdown
  8.    int ga   : 1;   //bit gain
  9.    int na1    : 1;   //bit void
  10.    int a_b    : 1;   //bit a/b
  11.    int na4  :4;   //4 bit void
  12.    
  13.    
  14.    };
  15. }da_cntrw;
  16.  
  17. da_cntrw.data_da=0x96;// data to DAC
  18. da_cntrw.a_b=1;// chanel A
  19. da_cntrw.ga=1;//gain 1x
  20. da_cntrw.shdn=1;// chanel a active
  21. n_set= (da_cntrw.Da_cntr)<<4;


Fordul, mukodik. Ja es a helyen van minden bit. (elvileg)
(#) messer válasza vilmosd hozzászólására (») Ápr 3, 2012 /
 
Ezen már tudok csmegézni nagyon köszönöm

A "da_cntrw" az milyen típusú változó hogyan jön a képbe?
(#) vilmosd válasza messer hozzászólására (») Ápr 3, 2012 /
 
Union. Elotte deklaraltad. Ja termeszetesen int16. Mert az union torzs valtozoja int16. De tedd be a Watch ablakba, es mindjart latszik.
(#) messer válasza vilmosd hozzászólására (») Ápr 3, 2012 /
 
Megzavart a dolog mert csak ezt látom "int16 Da_cntr;"
Következő: »»   70 / 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