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   89 / 118
(#) nurseboy hozzászólása Júl 30, 2013 /
 
Mostmár tényleg segítsen valaki. Többször megpróbáltam már kijavítani és lefordítani a programot. Mindig hibaüzenetként irja kia a force HW-t. Próbáltam SW vel de ugy meg nem müködött az órám. Feltöltöm az összes fájt, kérlek valaki nézze már meg és ha tudja fordítsa le. Annyi változtatás kellene, hogy a main.c-ben a 197 sorban a hőmérsékletnél nem -5 hanem csak -3 kellene. Ez nem is lenne gond, de a ccs complierrel nem tudom lefordítani.

DCFOra.zip
    
(#) Gyimate válasza nurseboy hozzászólására (») Júl 30, 2013 /
 
Üdv,
Parancsolj, a mellékletben megtalálod a lefordított projectet, ja és a 197. sorban kijavítottam az 5-öt 3-ra.
A hozzászólás módosítva: Júl 30, 2013
(#) nurseboy válasza Gyimate hozzászólására (») Júl 30, 2013 /
 
nagyon köszönöm!!!

És el tudnád mondani, hogyan kellett?
(#) MPi-c válasza nurseboy hozzászólására (») Júl 30, 2013 /
 
Force_HW-hoz azokat a lábakat kell beállítáni, amin a PIC SCL, SDA vonalai vannak (C3 és C4 nem B4, B5!)
(#) Gyimate válasza nurseboy hozzászólására (») Júl 30, 2013 /
 
Üdv,
Nem volt vele sok tennivaló, annyit kellett beiktatnom, hogy FORCE_SW, ez megoldja a problémát.
(#) nurseboy válasza Gyimate hozzászólására (») Júl 31, 2013 /
 
A FORCE_SW-t én is próbáltam, de akkor nem irta ki a hőmérsékletet. Azért kipróbálom ezt ami le lett fordítva. Tudom, hogy a PIC lábai nem azok de azokat javítva sem müködött az óra próbáltam (sőt egy sor hibaüzenetet irt ki forditás közben ha megváltoztattam a lábakat). Nekem ez teljesen rejtély.
(#) Gyimate válasza nurseboy hozzászólására (») Júl 31, 2013 /
 
Megtudod mondani a fordító verzió számát? Nekem nem jelzett hibát fordítás közben, igaz, hogy még elvégeztem egy módosítást, ugyanis az include fájloknál azokat amiket te hoztál létre nem <> így jelöltem, hanem idézőjelek közé tettem, vannak fordítók amik csak ezt hajlandók elfogadni.
(#) nurseboy válasza Gyimate hozzászólására (») Júl 31, 2013 /
 
Csatolom a beégetett hex fájlt, ami tökéletesen müködik, csak 2 fokkal többet mutat a hőmérséklet kijelzésnél

main (1).hex
    
(#) Gyimate válasza nurseboy hozzászólására (») Júl 31, 2013 /
 
Ezek szerint azzal a hex-el amit fordítottam már megy az óra?
(#) nurseboy válasza Gyimate hozzászólására (») Júl 31, 2013 /
 
Versio- ccs c 5.006
(#) nurseboy válasza Gyimate hozzászólására (») Júl 31, 2013 /
 
nem azzal még nem tudtam kipróbálni, csak délután égetem be , mert dolgozok. Majd 4 után kipróbálom és irok, De FORCE_SW-vel nem müködött, bár lehet az include fáljoknál való módosítással menni fog. majd irok
(#) nurseboy hozzászólása Júl 31, 2013 /
 
Üdv Gyimate!

Köszi a fordítást, remekül müködik!!!

Tényleg csak a "" jel volt a probléma? Nem tudom elhinni, hogy ennyi az egész. Nekem a FORCE_SW-vel nem müködött, de lehet ez az idézőjeles probléma miatt. Mivel fordítottad?

Még egyszer kösz: Ati
(#) Gyimate válasza nurseboy hozzászólására (») Júl 31, 2013 /
 
Üdv,
Örülök, hogy segíthettem, én a CCS 4.130-as verziót használom, nekem eddig remekül bevált. Az igazság az, hogy ahogy megláttam azt, hogy az #include-okban ilyen jeleket használtál : <>, rögtön átírtam idézőjelekre reflexből, volt már pár érdekes tapasztalatom hasonlóval, igaz, hogy akkor windowsra írtam a programot és ott jött elő a hiba, de gondoltam ez is C az is C volt...
Ha esetleg másban is tudok segíteni, csak szólj!
A hozzászólás módosítva: Júl 31, 2013
(#) nurseboy válasza Gyimate hozzászólására (») Aug 1, 2013 /
 
Kipróbáltam a CCS 4.130 -al. Tényleg jobb. Minden további nélkül lefordította. Azért az idézőjeles tanácsodat megfogadtam.
Kösz mégegyszer!
(#) szuperman hozzászólása Aug 1, 2013 /
 
Helló mindnenki!

Egy PIC et szeretnék összekötni a PC -vel. USB-HID kapcsolathoz kellene egy vid meg egy hid. Ha minden igaz ezt a CCS -ben kell valahol beállítani. Valaki meg tudná mondani hol lehet ezt megtenni?

Előre is köszi!
(#) Gyimate válasza szuperman hozzászólására (») Aug 2, 2013 /
 
Üdv,
A példaprogramok között találhatsz példaprogramokat USB HID eszközök létrehozásához, én is annó onnan vettem az alap függvényeket, csak átalakítottam az igényeimhez. Ha szükséged van rá, akkor elküldhetek neked egy egyszerű programot, amit a számítógép sorosportként fog értelmezni.
(#) sysy válasza Gyimate hozzászólására (») Aug 2, 2013 /
 
Gyimatae!

Ez engem is érdekelne!

Előre is köszönöm.
(#) szuperman válasza Gyimate hozzászólására (») Aug 2, 2013 /
 
Sokat segítenél ,ha elküldenéd!

A példa programokkal az a gondom ,hogy nagyon sok összevisszaságot látok mindnek az elején, amivel nem tudok mit kezdeni. Esetleg a HID megoldáshoz nincs példád?
(#) Gyimate válasza szuperman hozzászólására (») Aug 2, 2013 /
 
  1. #include <18f4550.h>
  2. #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,PLL5, NODEBUG,CPUDIV1, USBDIV, VREGEN
  3. #use delay(clock=48M)
  4.  
  5. #include <pic18_usb.h>
  6. #include <usb_cdc.h>
  7.  
  8. void main ()
  9. {
  10.    int i;
  11.    char be[20];
  12.    
  13.    for (i = 0; i<40;i++)   // Itt ismeri fel a gép, úgy találtam, hogy ez volt a legstabilabb megoldás
  14.    {
  15.       usb_task();  
  16.       delay_ms (100);
  17.    }
  18.    usb_cdc_putc ("Ezt küldi el USB-n keresztül");
  19.    while (!usb_cdc_kbhit());  //Amíg nincs beérkező adat ellenőrzi, hogy van-e bejövő adat
  20.    be[i] = usb_cdc_getc();
  21. }


Ez egy virtuális COM portot hoz létre a számítógépben, szükséges a működéséhez, hogy telepítsük a drivert, amelyet a C:\Program Files (x86)\PICC\Drivers\NT,2000,XP,VISTA,7 mappában találunk meg. Nem megyek bele most a részletekbe, de ha érdekel titeket, hogy lehet átírni a kódot úgy, hogy például egy egeret lásson a gép szívesen elmondom azt is, csak sajnos most nincs túl sok időm belemenni a részletekbe.
(#) zoox hozzászólása Aug 15, 2013 /
 
Sziasztok!

PIC18F46K22 pic be szeretnék két soros portot használni.Ez elvileg nem nagy cucc mivel van benne 2 hardveres port.
Müködk is ISR-t használok a két olvasására ,de idönként az egyik uart port befagy azaz nem fut ki az ő IT vektorára ,de a mésik az jól müködik és nem tudom hogy hol keresgessem a problémát. Ujra inditom a PIC-et(reset) akkor megint jó 1 darabig.(akkor jön elő a hiba ha tul sok adatot küldök neki a PC-ről)
  1. #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7,ERRORS,TIMEOUT=0, stream=PC)//
  2. #use rs232(baud=2400, xmit=PIN_D6, rcv=PIN_D7,ERRORS,TIMEOUT=0, stream=RF_ID)//

....
  1. #int_RDA
  2. void PC_isr()
  3. {      
  4.   while(kbhit(PC))
  5.   {
  6.                 STATUS_adas=1,adas_kijelzesi_ido=4;
  7.                         buffer2=fgetc(PC);
  8.        
  9.                         tomb_pointer_PC=                buffer2=='{'    ?       0       :       ++tomb_pointer_PC;
  10.                         buffer_PC[tomb_pointer_PC]      =buffer2;
  11.                                                
  12.                         if (tomb_pointer_PC>sizeof(buffer_PC))          {tomb_pointer_PC=0;}    // tulcsordult a tömb számláló
  13.                         if      (buffer2=='}')
  14.                         {delay_us(1);} 
  15.         }      
  16. }
  17. #int_RDA2
  18. void RF_ID_isr2()
  19.  
  20. {
  21.         RF_ID_tombreset=0;     
  22.    while(kbhit(RF_ID))//(bit_test(PIR1,5))
  23.                 {
  24.                         buffer1=fgetc(RF_ID);
  25.                         RF_ID_cod[(pointer      =       (buffer1==0x55)?0:++pointer)]=buffer1 ;
  26.                         if(pointer==3)
  27.                                 {
  28.                                         if      (RF_ID_cod[1]==0x4D)
  29.                                         {;}
  30.                                         else
  31.                                         {pointer=0;}
  32.                                 }
  33.                                                        
  34.                 }
  35. }
(#) potyo válasza zoox hozzászólására (») Aug 15, 2013 /
 
Nem az a gond, hogy itt
  1. buffer_PC[tomb_pointer_PC]   =buffer2;

túlindexeled a tömböt és ezzel felülírsz valami mást?

Kicsit lejjebb akkor nullázod a tomb_pointert, amikor az már hattal egyenlő, viszont a buffer_PC csak 0..4 között indexelhető.
A hozzászólás módosítva: Aug 15, 2013
(#) zoox válasza potyo hozzászólására (») Aug 15, 2013 /
 
Igen törlöm a tomb_pointer_PC hogy ne tudjam tultölteni,de meg van a probléma,vagy is" én vagyok"mert ugye a C6 C7 porton van a uart pin-je és ugy gondoltam hogy a TRIS regisztert automatikusan beállitja a CCSC ha dekralálom az uart portot .Ez igaz is lehet csak közben a C0-C5-ig használom kimenetnek és ha irok a C PORTRA akkor byte(8 bit maszkolva) formában irok rá és a CCSC automatikusan átirja a TRIS regisztert kimenetre .Vissza kellett állitani bemenetre és már is jól müködik.:bonkOkulásul másoknak ).Csak 2 napot szenvedtem vele és pont az alapokat nem néztem meg.
(#) Dempsey hozzászólása Aug 15, 2013 /
 
Sziasztok!
Van egy egyszerű programom. Az lenne a kérdésem hogy miért van az, hogy néha a RB1 es kimenetem magas szinten marad. Ez a jelenség nagyon ritkán de előfordul. Annyi a lényeg hogy a progi egy gombnyomás után nagyjából 20s-ig magas szinten tartja az RB1 et aztán kikapcsolja.
  1. #include "16f628a.h"
  2.  
  3. #fuses intrc,nowdt,noput,nolvp,nobrownout,nocpd,noprotect
  4. #use delay(clock=4M)
  5.  
  6. int i=0;
  7. boolean j=false;
  8.  
  9. #int_ext
  10. void RB0_ISR(){
  11. if (!input(pin_B0)){
  12. output_high(pin_B1);
  13. j=true;
  14. }
  15. else j=false;
  16. }
  17.  
  18. #int_TIMER1
  19. void timer1_isr(){
  20. if(j==true){
  21. i=i+1;
  22. }
  23. }
  24. void init (void){
  25.  
  26. set_tris_b(0b00000001);
  27. enable_interrupts(int_ext);
  28. ext_int_edge(H_TO_L);
  29. enable_interrupts(int_timer1);
  30. setup_oscillator(osc_4Mhz);
  31. setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_8 );
  32. enable_interrupts(global);
  33. }
  34.  
  35. void main (){
  36. init();
  37.  
  38. for(;;){
  39. switch (i){
  40. case 38: output_low(pin_b1); //i=38 kb 20s időzítésnek felel meg
  41. i=0;
  42. j=false;
  43. break;
  44. default: break;
  45.  
  46. }
  47. }
  48. }

Próbáltam switch helyett if(i==38)......, akkor is maradt már magas szinten. Van valakinek ötlete, hogy mitől van ez a bizonytalanság?
A hozzászólás módosítva: Aug 15, 2013
(#) tomat5 válasza Dempsey hozzászólására (») Aug 16, 2013 /
 
Szia
Írd azt hogy
  1. if(i>=38)
Lehet, hogy valamiért néha 39 lesz az i, ilyenkor nem fut le switch és az
  1. if(i==38)
utáni rész sem.
A hozzászólás módosítva: Aug 16, 2013
(#) tomat5 válasza tomat5 hozzászólására (») Aug 16, 2013 /
 
Olyankor lehet, amikor még a vizsgálat és j=false előtt beesik a timer megszakítás.
(#) Hp41C válasza Dempsey hozzászólására (») Aug 16, 2013 /
 
Szia!
Meg kell nézni az assembly kódot. Ez csak akkor lehet, ha a switch(i) és a case 38: vagy az if(i==38) többször olvassa ki a i értékét. Az i változó egy többértékű szemafor, amit két folyamat állít / vizsgál. A vizgálatnak és a beállításnak primitív műveletnek kell lennie - azaz a megszakítás nem választhatja szét a művelet lépéseit. A megszakítási rutinban ez automatikusan teljesül, de a főprogramban lehet, hogy nem teljesül. Ha a fordított assembly listában nem teljesül a megszakíthatatlanság, akkor ezt a részletet GIE = 0 és GIE = 1 közé kell tenni.

Egyszerűbb az élet, ha i helyett egy bináris szabafort / jelzőbitet használsz, amit a megszakítási rutin állít be, ha i == 38. A főprogram figyeli a jelzőbitet, ha 1, akkor kikapcsol és törli a jelzőbitet. A törlést egy BCF utasításra kellene fordítani...
A hozzászólás módosítva: Aug 16, 2013
(#) Dempsey válasza Hp41C hozzászólására (») Aug 16, 2013 /
 
Szia!
Sajnos lövésem sincs az ASM-hez. Csatolom a ASM es output fájlt ebbe találtam olyasmit amit írtál. Nézd már meg légyszíves hogy az van e benne aminek kell?. De mindenesetre megpróbálom amit mondtál hogy i helyett mást rakok be. Ha esetleg leírnád hogy CCS nyelven hogyan írjam át úgy hogy a GIE=0 és GIE=1 közé essen az is jó lenne, mert legalább tanulnék belőle. Mert tényleg ritkán fordul elő hogy beragad a kimenetem, de sose szabadna neki mert ha egyszer is beragad az baj lesz . Köszi a segítséget.

progi.lst
    
(#) kormika hozzászólása Aug 20, 2013 /
 
Sziasztok! Most kezdtem el a C-nyelvű PIC programozást, eddig assemblerben programoztam, de most elakadtam a C-vel. Azt hogyan tudom C-ben megvalósítani, hogyha vizsgálok egy gombnyomást if-fel, akkor ha nem nyomták le a gombot, akkor visszaugorjon az if-hez, és ezt addig csinálja, amíg a gomb meg nem lessz nyomva? Assemblerben ezt egy egyszerű Goto $-2 utasítással elintéztem, de C-ben nem tudom, hogy ezt hogyan tudnám megoldani. Előre is köszönöm a segítséget.
(#) szitko válasza kormika hozzászólására (») Aug 20, 2013 / 1
 
Ne if-el vizsgáld a gombot, hanem egy "while" ciklussal! Így addig nem megy tovább a program, míg meg nem lett nyomva a gomb.
(#) kormika válasza szitko hozzászólására (») Aug 20, 2013 /
 
Köszönöm a segítségedet, tökéletesen működik a progi
Következő: »»   89 / 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