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   62 / 118
(#) sysy válasza potyo hozzászólására (») Aug 22, 2011 /
 
short lesz az.

Mindenki hordozható kódról beszél. Marhaság. A kódok nem hordozhatóak. Hacsak nem CCS 16C84-ről hordozod CCS 16F84-re, de még ebben az esetben sem biztos a dolog. Az UNIX forráskódot echte ANSI C-ben írták és egyetlen függvénye sem fordítható le sem Hi-Tech sem CCS, sem MicroC, sem Bang & Olufsen (vagy mi) fordítóval.
Ezt szerintem el kell felejteni, mint a véletlen elérésű memóriát. Itt a fórumban is biztosan százával vannak olyanok, akik az interneten talált Hi-Tech C kódot akarnak CCS kóddá alakítani és csak hosszas vérpisálás után indul el nekik a program.
Meg lehet cáfolni engem, ha valaki küld egy néhány száz soros programot bármilyen fordító (akár ANSI C) alól valamilyen PIC-re írva, és az lefordul pl. CCS alatt. Még a 3.xx és a 4.xx verziójú CCS sem kompatibilis önmagával. Innentől kezdve nem is értem, hogy miről beszélünk hordozható kód alatt.
Azt hiszem, hogy itt nem szabványos C programot akarnak írni, hanem működőt. És azt szerintem nem akarják sehova sem hordozni.

Uff, én beszéltem.
(#) szuperman válasza sysy hozzászólására (») Aug 22, 2011 /
 
Nagyon szépen köszönöm a short működik. Ha tudnád mekkora memória területet szabaditottál fel nekem...

Köszi!
(#) icserny válasza sysy hozzászólására (») Aug 22, 2011 /
 
Idézet:
„Itt a fórumban is biztosan százával vannak olyanok, akik az interneten talált Hi-Tech C kódot akarnak CCS kóddá alakítani és csak hosszas vérpisálás után indul el nekik a program.”
A hordozható kód lényege pont az, hogy minél kevesebb legyen a "vérpisálás". S pont erre találták ki az ANSI C-t.

Nyilván minden fordítónak megvan a saját rigolyája, de a programot célszerű úgy megírni, hogy ezek kezelése minél egyszerűbb legyen, s lehetőleg a "sajátos kezelést igénylő" részek legyenek elkülönítve.
(#) szuperman hozzászólása Aug 25, 2011 /
 
Valaki segítene megint.

Szükségem lenne egy timerre ,de nem tudom beállítani. 40Hz -en kellene hívogatni egy függvényt. 20Mhz kristály van a PIC en. Valaki segítsen ,llégyszi

Előre is köszi!
(#) sysy válasza szuperman hozzászólására (») Aug 25, 2011 /
 
Legegyszerűbben megszakításból lehet ilyeneket csinálni.
Valahogy így:

  1. #int_TIMER1
  2. void  TIMER1_isr(void)
  3. {
  4.         set_timer1(~0xF424);                                                            // a 40Hz beállítása  (0xFFFF-F424)        
  5.         Valami_40Hz();                                                                                  // itt hívod meg a függvényedet              
  6. }
  7.  
  8.  
  9.  
  10. void main()
  11. {
  12.  
  13.         setup_timer_1(T1_INTERNAL|T1_DIV_BY_2);         //26.2 ms overflow
  14.    enable_interrupts(INT_TIMER1);
  15.    enable_interrupts(GLOBAL);
  16.  
  17.  
  18. }
  19. /**********************************************/
  20.  
  21. void
  22. Valami_40Hz()
  23. {
  24. //              ide írod a függényt;
  25. //              amíg fut a függvényed;
  26. //              le lesz tiltva a megszakítás!;
  27. //              a futási időnek rövidebbnek kell lennie;
  28. //              mint 25ms. (40Hz)
  29.        
  30. }
  31. /**********************************************/

main.c
    
(#) szuperman hozzászólása Aug 25, 2011 /
 
Nem értem. Lehet bennem van a hiba ,de egyszer sem hívódik meg a függvényem. nem ,hogy 40Hz -n. Nem tudom mit ronthattam el, mert csak bemásoltam amit írtál és kész.
(#) szuperman hozzászólása Aug 25, 2011 /
 
Visszavonom. Én néztem el.

Nagyon szépen köszönöm a segítséget.

Kérhetnék egy kis magyarázatot? Ehhez a sorhoz:
setup_timer_1(T1_INTERNAL|T1_DIV_BY_2); //26.2 ms overflow

A zárójelben lévő beállítások mit jelentenek és honnét lehet ilyeneket kikeresni?
(#) sysy válasza szuperman hozzászólására (») Aug 26, 2011 /
 
Elsősorban a CCS helpben és a fordító leírásában lehet magát a parancsot megtalálni. A paraméterezését az adott proci.h filéjében taglalják és végül egészen egyszerűen, ahonnan én is kimásoltam, az a CCS IDE (Pcw.exe) alatt futtatható Project -> New ->PIC wizard varázsló, ahol be lehet állítani a kívánt paramétereket és máris írja a "programot" a varázsló.
(#) DecebaL hozzászólása Aug 26, 2011 /
 
Sziasztok!

Ezen az oldalon nézem, hogy történik a hőmérséklet kiolvasás a DS18B20 -ból mindent értek csak az alábbi feltételre nem tudom a választ. Hogy miért ad hozzá vagy kivon 8 -at?

if (temperature >= 0)
temperature = (temperature + 8)/16.0;
else
temperature = (temperature - 8)/16.0;
(#) icserny válasza DecebaL hozzászólására (») Aug 26, 2011 /
 
Idézet:
„miért ad hozzá vagy kivon 8 -at?”
Bizonyára azért, hogy az egész osztás ne csonkítsa, hanem kerekítse az értéket. A 8/16 az éppen 0.5, s ezzel az eltolással 0.5-től felfelé, azalatt pedig lefelé történik a kerekítés. Negatív számoknál pedig a lefelé és a felfelé fordítva van, ezért ott levonni kell, hogy ne a nulla felé kerekítsünk, hanem a mínusz végtelen felé.
(#) potyo válasza DecebaL hozzászólására (») Aug 26, 2011 /
 
A választ nem tudom, viszont ha a temperature változó valamilyen int típusú (és miért ne lenne az), akkor a 16-al osztás helyett értelmesebb négy hellyel jobbra léptetést csinálni. Tehát temperature = (temperature-8)>>16;

Közben most jutott eszembe, hogy ez szimpla kerekítés akar lenni.
(#) DecebaL válasza icserny hozzászólására (») Aug 26, 2011 /
 
Értem, akkor a kerekítés valamilyen szinten a pontosság rovására történik. Nem?
(#) icserny válasza DecebaL hozzászólására (») Aug 26, 2011 /
 
Nézőpont kérdése. Szerintem az egészosztásod megy a pontosság rovására (lehetne pl. tizedfokokban számolni, ami ugyanígy kezelhető egészaritmetikával, csak az eredmény kiírása komplikáltabb).

Az egyszerű csonkításhoz képest a kerekítés szerintem növeli a pontosságot (csökkenti a pontos értéktől való eltérést), hiszen így már nem fog a végeredmény rossz esetben 0.9999...-cel eltérni, legfeljebb 0.49999...-cel.
(#) DecebaL válasza icserny hozzászólására (») Aug 26, 2011 /
 
Igazad van, átgondoltam és utána is számoltam.
(#) brugo hozzászólása Szept 3, 2011 /
 
Hello,
ICD2- lehet használni CCS-alatt ?
(#) icserny válasza brugo hozzászólására (») Szept 3, 2011 /
 
MPLAB alatt, CCS fordítóval biztosan (a CCS FAQ szerint).
(#) brugo hozzászólása Szept 3, 2011 /
 
van PCWHD 4.106-os CCS-em, a Debugger / Enable Debugger alatt szerepel az ICD2 es ICD3 is szépen feketén nem szürkén mint a nem aktív objektumok ez bizsergette meg a fantáziámat ,érdemes szerezzek 1 ICD-ét ?
(#) icserny válasza brugo hozzászólására (») Szept 3, 2011 /
 
Az ICD2 már eléggé kifutott, inkább az ICD3 javasolható, de csak annak, aki lopja a pénzt, vagy más pénzét költi!
(#) kukac_24 válasza brugo hozzászólására (») Szept 12, 2011 /
 
Hali,
Honnan lehet szert tenni a 4.106-osra?
(#) trudnai válasza kukac_24 hozzászólására (») Szept 12, 2011 /
 
(#) szuperman hozzászólása Szept 19, 2011 /
 
Helló mindenki!

Valaki le tudná ,hogy lehet ccs -ben a pic -et rávenni ,hogy a belső kristályt használja az órajelhez? (PIC18F2550) Esetleg azt is megírhatná ,hogy ez az órajel mennyi?

Előre is köszi!
(#) vilmosd válasza szuperman hozzászólására (») Szept 19, 2011 /
 
Igy:
  1. #include <18F2550.h>
  2.     #fuses INTRC_IO,NOWDT,NOPROTECT,NOLVP,NODEBUG,CPUDIV1,VREGEN
  3.     #use delay(clock=16000000)
  4. .
  5. .
A fejlecben, majd a main() elso soraban a setup_oscillator(OSC_16MHZ) fveny hivasa. Ezzel 16 MHz lesz a belso oszci frekije.
  1. ////////////////////////////////////////////////////////////////// INTERNAL RC
  2. // Constants used in setup_oscillator() are:
  3. // First param:
  4. #define OSC_31KHZ   0
  5. #define OSC_125KHZ  0x10
  6. #define OSC_250KHZ  0x20
  7. #define OSC_500KHZ  0x30
  8. #define OSC_1MHZ    0x40
  9. #define OSC_2MHZ    0x50
  10. #define OSC_4MHZ    0x60
  11. #define OSC_8MHZ    0x70
  12. #define OSC_16MHZ   0x4060
  13. #define OSC_32MHZ   0x4070

valaszthato frekik a setup_oscillator() fveny szamara. A CCS telepito konyvtarban a 18F2550.h tartalmazza ezt az informaciot.
(#) szuperman válasza vilmosd hozzászólására (») Szept 19, 2011 /
 
Köszi szépen! Ezt a könyvtárat hol találom ?
(#) vilmosd válasza szuperman hozzászólására (») Szept 19, 2011 /
 
A CCS telepito konyvtaraban. Talalsz 3 alkonytarat ugymint : Devices, Drivers es Examples. A Devices tartalmazza a xxx.h device header fileket, a Drivers kulonbozo eszkozokhoz tartalmaz driver filet, es az Examples tartalmazza a mintapeldakat.
(#) szuperman hozzászólása Szept 19, 2011 /
 
Valaki tudna segíteni? Van ez a kód:
#include <18F2550.h>
#use delay(clock=32000000)

/*#define OSC_31KHZ 0 //választható órajelek setup_oscillator(); számára
#define OSC_125KHZ 0x10
#define OSC_250KHZ 0x20
#define OSC_500KHZ 0x30
#define OSC_1MHZ 0x40
#define OSC_2MHZ 0x50
#define OSC_4MHZ 0x60
#define OSC_8MHZ 0x70
#define OSC_16MHZ 0x4060*/
#define OSC_32MHZ 0x4070

main() {
setup_oscillator(OSC_32MHZ);

while(true){
output_toggle(PIN_B0);
delay_ms(1000);
}

}

Valamiért nem 1mp -t vár a delay_ms résznél ,hanem kb 3-4 -et. (tudom ,hogy nem túl pontos ez a fv ,de azé legalább nagyából 1 mp -t kéne várnia) Szimulátorban teljesen jó. Valóságban nem. Ez miért lehet?

Előre is köszi!
(#) vicsys válasza szuperman hozzászólására (») Szept 19, 2011 /
 
  1. #FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
  2. #use delay(clock=32000000)
  3.  
  4. void main()
  5. {
  6. ...
  7. ...
  8. ...
  9.    setup_oscillator (OSC_32MHZ) ;
  10. ...

Azokat a #define osc_XX részeket hagyd ki.
(#) potyo válasza szuperman hozzászólására (») Szept 19, 2011 /
 
Kapcsold ki a tápot és kapcsold be újra.
(#) szuperman válasza vicsys hozzászólására (») Szept 19, 2011 /
 
Azok kommentbe vannak, szal nem zavarhat semmit. Azért kiszedtem. Viszont ugyan az...
(#) szuperman hozzászólása Szept 19, 2011 /
 
Táp sem változtat semmi.
(#) potyo válasza szuperman hozzászólására (») Szept 19, 2011 /
 
Közben előkaptam az adatlapot, és ez nem tudja a belső oszcillátor órajelét a PLL-re vezetni. Vagyis belső órajelről 8MHz-en tud csak futni a kontroller. Szóval ez van.
Következő: »»   62 / 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