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   103 / 118
(#) feco93 válasza Peppe hozzászólására (») Jan 6, 2015 /
 
Köszönöm szépen a segítséget jó lett!
Kipróbáltam a másik formát de az nem működött gondolom nem mindegy milyen verziójú a fordító.
A hozzászólás módosítva: Jan 6, 2015
(#) sysy válasza feco93 hozzászólására (») Jan 6, 2015 /
 
Igen, 4.1x fölött működik azt hiszem.
(#) horcsab hozzászólása Jan 10, 2015 /
 
Üdv Mindenkinek!

CCS 5.025 fordítva a következő programot minidig warningot kapok.
A soros portról vár értéket ami pl **100+CR+LF. Ha néhányszor leküldöm egymás után akkor a program kiakad és újraindul, de nem találom, hogy miért!

Valaki rá tudna nézni?
Előre is köszi a segítséget!

PIC18F26K80
INTRC, NOWDT

  1. #include <main.h>
  2. #INCLUDE <stdlib.h>
  3. #INCLUDE <float.h>
  4.  
  5.  
  6. int8 r0, r1, h0, h1 = 0;
  7. int16 referencia, hiszterezis = 0;
  8. signed int16 fesz = 0;
  9. float feszki, hiszt,tmp1, temp =0;
  10. volatile int8 i =0;
  11. volatile float ref, refbe =0;
  12. volatile char retval;
  13. volatile char string [16];
  14.  
  15. #int_TIMER1
  16. void Timer1_isr(void)
  17. {
  18. //printf("%3.1g \r\n",feszki);
  19. }
  20.  
  21. #int_RDA
  22. void  serial_isr(void)
  23. {
  24.  
  25. for (i=0;i<10;++i)
  26. string[i]="";
  27.  
  28. i=0;
  29. retval = getc();
  30.  
  31. if (retval=='*')
  32.  {retval = getc();
  33.  if (retval=='*')
  34.    for (i=0;i<10;++i)
  35.     {retval = getc();
  36.       {
  37.       string[i]=retval;
  38.       }
  39.      if (retval==13)
  40.       i=9;
  41.       refbe = atof(string);
  42.       if ((refbe<50.0) || (refbe > 250.0))
  43.       {
  44.       ref = 140;
  45.       }
  46.       else
  47.       ref = refbe;
  48.    }
  49.  }  
  50.  
  51. /*
  52. if (retval=='%')
  53.   { retval = getc();
  54.    if (retval=='%')
  55.    for (i=0;i<10;++i)
  56.     {retval = getc();
  57.       {
  58.       string[i]=retval;
  59.       }
  60.       if (retval==13)
  61.       i=9;
  62.       hiszt = atof(string);
  63.       if ((hiszt<0.1) || (hiszt > 5.0))
  64.       {
  65.       hiszt = 1.0;
  66.       }  
  67.     }
  68.   }
  69.  
  70. if (retval=='s')
  71.    retval = getc();
  72.    {
  73.      if (retval=='a')
  74.        retval = getc();
  75.      {
  76.         if (retval=='v')
  77.         {
  78.         r0 = make8(referencia,0);
  79.         r1 = make8(referencia,1);
  80.        
  81.         h0 = make8(hiszterezis,0);
  82.         h1 = make8(hiszterezis,1);
  83.        
  84.        
  85.         write_eeprom(0x10, r0);
  86.         delay_ms(50);
  87.         write_eeprom(0x11, r1);
  88.         delay_ms(50);
  89.        
  90.         write_eeprom(0x20, h0);
  91.         delay_ms(50);
  92.         write_eeprom(0x21, h1);
  93.         delay_ms(50);
  94.        
  95.         printf("Saved\r\n");
  96.         }    
  97.      }
  98.    }
  99.    
  100. if (retval=='?')
  101.  {retval = getc();
  102.  if (retval=='U')
  103.    for (i=0;i<10;++i)
  104.     {retval = getc();
  105.       {
  106.       string[i]=retval;
  107.       }
  108.       if (retval==13)
  109.       i=9;
  110.       printf("Fesz: *%3.1g \r\n",feszki);
  111.       }
  112.   if (retval=='R')
  113.    for (i=0;i<10;++i)
  114.     {retval = getc();
  115.       {
  116.       string[i]=retval;
  117.       }
  118.       if (retval==13)
  119.       i=9;
  120.       printf("Ref: **%3.1g \r\n",ref);
  121.       }
  122.    if (retval=='H')
  123.    for (i=0;i<10;++i)
  124.     {retval = getc();
  125.       {
  126.       string[i]=retval;
  127.       }
  128.       if (retval==13)
  129.       i=9;
  130.       printf("Hisz: %%%3.1g \r\n",hiszt);
  131.       }      
  132.      
  133.   }
  134.   clear_interrupt(int_RDA);
  135. }
  136.  */
  137.  }
  138.    
  139.    
  140.    
  141.  
  142.  
  143.  
  144.  
  145.  
  146. void main()
  147. {
  148.    setup_oscillator(OSC_16MHZ|OSC_INTRC|OSC_PLL_ON);
  149.    setup_adc_ports(sAN0);
  150.    setup_adc(ADC_CLOCK_INTERNAL | VSS_4V096);
  151.    setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);      //32,7 ms overflow
  152.    setup_timer_3(T3_DISABLED | T3_DIV_BY_1);
  153.    setup_timer_4(T4_DISABLED,0,1);
  154.    setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
  155.  
  156.  // enable_interrupts(INT_TIMER1);
  157.  // enable_interrupts(INT_RDA);
  158.  // enable_interrupts(GLOBAL);
  159.  
  160.  hiszt=0.5;
  161.  
  162.  set_adc_channel(0);
  163.  r0 = read_eeprom(0x10);
  164.  r1 = read_eeprom(0x11);
  165.  
  166.  referencia = make16(r1,r0);
  167.  
  168.  
  169.  
  170.  h0 = read_eeprom(0x20);
  171.  h1 = read_eeprom(0x21);
  172.  
  173.  hiszterezis = make16(h1,h0);
  174.  
  175.  
  176. ref = (referencia / 10.0);
  177. hiszt = (hiszterezis / 10.0);
  178.  
  179. if ((ref<50.0) || (ref > 250.0))
  180.       {
  181.       ref = 140;
  182.       }
  183.      
  184. if ((hiszt<0.1) || (hiszt > 5.0))
  185.       {
  186.       hiszt = 1.0;
  187.       }  
  188.  
  189. ADCON0  =  0b00000001;
  190. ADCON1  =  0b10110000;
  191. ADCON2  =  0b10000111;
  192. ANCON0  =  0b00000001;
  193. ANCON1  =  0b00000000;
  194. CTMUICON = 0x00000011;
  195. CTMUCONH = 0b10000000;
  196. CTMUCONL = 0b00000001;
  197.  
  198.  
  199.  
  200.  
  201.  
  202. while(true)
  203.   {
  204.    ADCON0 =  0x75;  
  205.    ADCON1 =  0x00;
  206.    ADCON2 =  0xBE;
  207.    delay_us(10);
  208.    temp=read_adc();
  209.  
  210.    ADCON1  =  0b10110000;
  211.    ADCON2  =  0b10000111;
  212.    ADCON0  =  0b00000001;
  213.    delay_us(10);
  214.    fesz=read_adc();
  215.  
  216.  
  217.    feszki=((250/4095.0)*fesz);
  218.    restart_wdt();
  219.    tmp1= ref-feszki;
  220.  
  221.    referencia = (ref*10);
  222.    hiszterezis = (hiszt*10);
  223.  
  224.  
  225.    if (ferr==1)
  226.     {
  227.     sren=0;
  228.     }
  229.    
  230.    if (oerr==1)
  231.     {
  232.     sren=0;
  233.     }
  234.  
  235.  
  236.    /*printf("%3.1g \r\n",feszki);
  237.    printf("Hisz: %3.1g    ",hiszt);
  238.    printf("Ref:  %3.1g    ",ref);
  239.    printf("Temp: %3.1g \r\n",temp);
  240.    */
  241.    if ((tmp1 > hiszt) & (feszki > 50.0))
  242.    {
  243.       output_high(Kim_Le);
  244.       output_low(Kim_Fel);
  245.    }
  246.    
  247.    if  ((tmp1 < -hiszt) & (feszki > 50.0))
  248.    {
  249.       output_low(Kim_Le);
  250.       output_high(Kim_Fel);
  251.    }
  252.    
  253.    if ((tmp1 >= -hiszt) & (tmp1 <=hiszt))
  254.    {
  255.       output_low(Kim_Fel);
  256.       output_low(Kim_Le);
  257.    }
  258.    
  259.    if (feszki <= 50.0)
  260.    {
  261.     output_low(Kim_Fel);
  262.     output_low(Kim_Le);
  263.     output_high(Kim_Err);
  264.    }
  265.      
  266.    if (feszki > 50.0)
  267.    {
  268.     output_low(Kim_Err);
  269.    }
  270.  
  271.  
  272.   }
  273. }


>>> Warning 216 "main.c" Line 273(1,2): Interrupts disabled during call to prevent re-entrancy: (@ITOF)
>>> Warning 216 "main.c" Line 273(1,2): Interrupts disabled during call to prevent re-entrancy: (@DIVFF)
>>> Warning 216 "main.c" Line 273(1,2): Interrupts disabled during call to prevent re-entrancy: (@FLT)
>>> Warning 216 "main.c" Line 273(1,2): Interrupts disabled during call to prevent re-entrancy: (@MULFF)
>>> Warning 216 "main.c" Line 273(1,2): Interrupts disabled during call to prevent re-entrancy: (@ADDFF)
(#) potyo válasza horcsab hozzászólására (») Jan 10, 2015 /
 
Ha jól sejtem, akkor a getc() az ott vár, amíg nem jön valami karakter. Na az ilyeneket felejtsd el megszakítási rutinból használni. Ugyanígy az atof és társait is mellőzni kellene amennyire csak lehet egy hardveres lebegőpontos modullal nem rendelkező kontroller esetén. Megszakítási rutinba ilyet beletenni kb. az öngyilkossággal egyenlő. A megszakítási rutinod csak annyiból álljon, hogy beteszi egy pufferbe a vett karaktereket, majd amikor megjött az utolsó is (LF), akkor bebillent egy jelzőbitet, aminek hatására a főprogram feldolgozza a beérkezett adatot és törli a jelzőbitet.
(#) Lamprologus hozzászólása Jan 20, 2015 /
 
tudtam hogy minden kezdet nehéz ... na de hogy ennyire ...

Az alábbi kis "programot" próbálom lefordítani, CCS C compilerrel, és azt mondja undefined identifier porta (próbáltam PORTA, eredmény ugyanaz).

# include <16F887.h>

main ( )
{
porta = 0xFF;
}

Mi a fenét szúrtam el?
(#) Hp41C válasza Lamprologus hozzászólására (») Jan 20, 2015 /
 
PORTA = 0xFF;
(#) Lamprologus válasza Hp41C hozzászólására (») Jan 20, 2015 /
 
ugyan az ... már próbáltam!
(#) sysy válasza Lamprologus hozzászólására (») Jan 20, 2015 / 1
 
Attól, hogy hangosan mondod (nagybetűvel írod) a PORTA azonosítót, attól még nem fogja tudni, hogy mit is akarsz tőle.

Próbáld meg azt, hogy main előtt megmondod neki:

#byte PORTA = 0x05 // ha jól tudom, akkor a 16F877-nél ezen a címen van
(#) Hp41C válasza Lamprologus hozzászólására (») Jan 20, 2015 / 1
 
A # és az include között van betüköz? Nem kell oda.
@sysy: Pont azért hivatkozna a processzor definícióira, hogy ne neki kelljen az összeset megadnia...
A hozzászólás módosítva: Jan 20, 2015
(#) Lamprologus válasza sysy hozzászólására (») Jan 20, 2015 /
 
Konya PIC köny alapján próbálkoztam ...
Ott az van leírva hogy a C nyelv megkülönbözteti a kis és a nagy betűket.
Ott nincs külön definiálva a PORTA...

Közben megnéztem az MPLAB CX8 fordítója simán elfogadja, anélkül hogy előre definiálnám...

Jól gondolom hogy ez akkor azon múlik hogy az include után megadott fájlban ezt definiálták-e vagy sem?
(#) Hp41C válasza Lamprologus hozzászólására (») Jan 20, 2015 /
 
Idézet:
„Jól gondolom hogy ez akkor azon múlik hogy az include után megadott fájlban ezt definiálták-e vagy sem?”

Valóban arról van szó, hogy a felhasználás előtt már definiált-e a szimbólum. Jelen esetben a porta vagy a PORTA. (Ez nem kiabálás, hanem a C kisbetű - nagybetű érzékeny.)
A kontroller már elég régi, így kizártnak tartom, hogy a CCS -sel szállított 16F887.h -ban ne lenne a PORTA megadva. Inkább arra gondolok, hogy az incude directory nincs jól beállítva, az elérési út nem felel meg a programnak (ékezetes betűk vannak benne vagy túl hosszú), az állomány nem olvasható (jogosultság), stb. Ezek miatt a fordító nem találja meg. Nincs az undifined symbol előtt más hibajelzés. Jobb lenne, ha a fordító üzeneteit bemásolnád ide.
(#) Gyimate válasza Lamprologus hozzászólására (») Jan 20, 2015 /
 
Szia,

A helyes megoldás a következő:

#include <16f887.h>

void main ()
{
output_a (0xFF);
foir (; ; );
}

Ezzel a kóddal menni fog, mivel itt a kimenetre máshogy kell hivatkozni, mint az XC8-ban.
A hozzászólás módosítva: Jan 20, 2015
(#) Lamprologus válasza Hp41C hozzászólására (») Jan 20, 2015 /
 
ez az üzenet van csak:

*** Error 12 "main.c" line 18(10,15): Undefined identifier PORTA

Kicsit próbáltam belenézni a 16F887.h fájba, olyant hogy PORTA semmilyen formában nem találtam benne. ( néztem a CX8-at is ott sikerült megtalálnom ... sőt két fájl is van, pic16f887.h és a pic16f887.inc amiben benne van ... ) A CCS alapértelmezett könyvtárba lett telepítve nem hiszem hogy az elérési úttal igy gondja lehetne. Ráadásul 2 különböző verziót is kipróbáltam (4.104 és a 5.011) mindkettőnél ugyan az a helyzet.

Megoldás lehet Gyimate megoldása, de Én azt honnan tudhatnám hogy az adott compilernél mi a helyes megoldás?

Igazából ott tartok, hogy szeretnék kiválasztani egy fordítót amin elkezdek programozgatni, közben meg talán sikerül megismernem kellőképpen, abban bíztam hogy a C fordítók között ( forrás oldalon) nincs lényegi különbség, a forrás fájl ugyan úgy kell hogy kinézzen... de ezek után kezdek elbizonytalanodni.

Az microchip oldalról letölthető fordítók valamit reklamálnak hogy a free verzió valamit "irgum burgum" ... mennyire használhatók ezek?
(#) Tas84 válasza Lamprologus hozzászólására (») Jan 20, 2015 /
 
Itt a manualban minden megtalálsz!
(#) Hp41C válasza Lamprologus hozzászólására (») Jan 20, 2015 /
 
Gyimate -nek van igaza, output_a() fog működni.
(#) MPi-c válasza Lamprologus hozzászólására (») Jan 20, 2015 /
 
.. és sysy-nek is igaza van.
Ha úgy akarsz a regiszterekre vagy az egyes bitekre hivatkozni, ahogy a gyári vagy (régebbi) Hi-tech fordítokban, azt neked kell előtte a fordítónak megmondani. Lehetséges saját include fájlt is kreálni. Bővebben: egy régebbi hozzászólás sysy-től. Érdemes az eredmény ellenőrizni: egy régebbi hozzászólás tőlem.
(#) vilmosd válasza Lamprologus hozzászólására (») Jan 20, 2015 /
 
Na en igy szoktam inditani:
  1. #include <16F887.h>
  2. #device ADC=10
  3. #fuses INTRC_IO,NOWDT,PROTECT,NOMCLR
  4. //#fuses HS,NOWDT,PROTECT,NOMCLR
  5. #use delay(clock=4000000)
  6.  
  7. #pragma use fast_io(A)
  8. #pragma use fast_io(B)
  9. #pragma use fast_io(C)
  10.  
  11. #BYTE port_a = 5
  12. #BYTE port_b = 6
  13. #BYTE port_c = 7
  14. #BYTE port_d = 8
  15. #BYTE port_e = 9
  16. #BYTE intcon = 0x0B
  17. #BYTE option_r = 0x81
  18. #BYTE tris_a = 0x85
  19. #BYTE tris_b = 0x86
  20. #BYTE tris_c = 0x87
  21. #BYTE tris_d = 0x88
  22. #BYTE tris_e = 0x89
  23. #BIT  rec_s = port_a.4
  24. #bit  z_led=port_b.4
  25. #bit  t_led=port_b.5
  26. #bit  f_led=port_b.6
  27. #bit  d_led=port_b.7
  28. .
  29. .
  30. .
  31.                 port_a=0;
  32.                 port_b=0;
  33.                 port_c=0;
  34.                 port_d=0;
  35.                 tris_b=0b00001111;
  36.                 tris_c=0b10100000;
  37.                  .
  38.                 t_led=1;
  39.                 z_led=0;
(#) icserny válasza Lamprologus hozzászólására (») Jan 21, 2015 /
 
Idézet:
„honnan tudhatnám hogy az adott compilernél mi a helyes megoldás?”
A compilerhez kapott dokumentáció (Help, Referencia kézikönyv) és mintaprogramok tanulmányozásából.

Némelyik fordítóhoz szakkönyvek is jelentek meg, de ezek ritkán frissülnek, így lehet, hogy mire megjelenik, már nem mindenben aktuális... Bővebben: Link
(#) Lamprologus válasza icserny hozzászólására (») Jan 21, 2015 /
 
Köszönöm az eddigi válaszokat...
Sajnos az angollal elég hadilábon állok, de majd lesz valami!

Annyi már világosnak tűnik, hogy ki kéne választani egy compilert és abba beleásni magam ... de melyik legyen az? ( vagy melyik ne?) Tudnátok ebben tanácsot adni?
16F... 18F... PIC-ekben gondolkodom egyelőre, egy LPT portos égetővel.
A hozzászólás módosítva: Jan 21, 2015
(#) vilmosd válasza Lamprologus hozzászólására (») Jan 21, 2015 /
 
En a CCS C-re szavazok.
(#) sysy válasza Lamprologus hozzászólására (») Jan 21, 2015 /
 
Kb. mire szeretnéd használni?
Sok portja legyen? Nagy eeprom memória legyen benne. Sok perifériát találjál benne?
2 soros portja legyen? A/D átalkító 12bites legyen? 4 PWM portja legyen? stb...
(#) icserny válasza Lamprologus hozzászólására (») Jan 21, 2015 /
 
Ha ingyenes megoldás kell, akkor csak az XC8 jön számításba.
(#) Lamprologus hozzászólása Jan 22, 2015 /
 
5.011-es CCS Compilerben nem tudom beírni a #-et. Az Alt-Gr + x gombra a "Identifier Explorer" ablak nyílik meg. Le lehet ezt tiltani valahogy?
(#) Lamprologus válasza sysy hozzászólására (») Jan 22, 2015 /
 
Egyelőre szeretném jobban beleásni magam a témába ... Régebben foglalkoztam PLC programozással, és úgy látom hogy sok akkori feladat megoldható PIC-el, jóval olcsóbban... Sőőőt ezek a cuccok még többet is tudnak ...
A PIC kiválasztás szerintem menni fog a katalógusból.
(#) Tas84 válasza Lamprologus hozzászólására (») Jan 22, 2015 /
 
Options->Editor properties, és azon belül ha jól emlékszem a View lenyíló listában van az Identifier Explorer. Onnan kell kitörölni a hozzárendelést, de csak újraindításig marad úgy, utána megint be kell állítani!
(#) vicsys válasza Lamprologus hozzászólására (») Jan 22, 2015 /
 
Csatoltam
(#) Gyimate válasza Lamprologus hozzászólására (») Jan 22, 2015 /
 
Az tény és való, hogy otthoni körülmények között egy PIC vagy AVR olcsóbb, de ezeket nem használhatod ipari körülmények között, a PLC fel van készítve az ipari környezetben való használatra, amibe nem mennék itt bele, mert már így is off.
(#) Lamprologus válasza Tas84 hozzászólására (») Jan 22, 2015 /
 
Nem teljesen ott de megtaláltam ...
Az 5.011-es menüje kicsit más ...
Options / IDE ... Keyboard fül ... Action ablak / View - ID explorer ...
Meg még utána mire rájöttem hogy hogy lehet átírni az aktuális beállítást ...
De legalább nem felejti el újraindításkor.
Ja így jár aki nem tudja hogy az Alt-Gr = Alt + Ctrl
(#) Lamprologus hozzászólása Jan 24, 2015 /
 
Ha még kérdezhetek ...
Poject létrehozásakor van a PIC vizard (5.011-es verzió) ... ez nekem szépen automatikusan beilleszti a forrás fájlba a szükséges dolgokat (megszakítások, config bitek, stb ... ), ezt a varázslót kesőbb még elő lehet szedni valahonnan, ha módisítani szeretnék valalmit?
(#) Tas84 válasza Lamprologus hozzászólására (») Jan 24, 2015 /
 
Úgy tudom, hogy nem lehet már módosítani utána! Vagy a kézikönyvből nézed ki, hogy mit kell alkalmazni vagy megnyitod a wizardot, majd kimásolod a neked kellő változásokat.
Ennek a verziónak elég idegesítő a hibája, hogy letiltja a megszakításokat printf hívásakor és nem engedélyezi újra! Plusz volt még egy bug, de arra már nem emlékeszem.
Következő: »»   103 / 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