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   115 / 118
(#) Lamprologus válasza Lamprologus hozzászólására (») Aug 5, 2016 /
 
Feltettem az MPLAB X IDE-t ...
Még sok mindent nem találok meg benne ...
De legalább a Debug megy!
(#) Lamprologus hozzászólása Aug 17, 2016 /
 
Soros portra szeretnék kiküldeni egy szöveget ami idézőjelet is tartalmaz n0.val="12345" ... nem igazán akar összejönni ... illetve igen, csak szerintem nem túl elegáns.

Idézőjelek nélkül így nézne ki:
fprintf(UART_PORT2,"n0.val=12345");

Próbáltam így is:
fprintf(UART_PORT2,"n0.val=""12345""");
de simán elhagyta az idézőjeleket.

Így működik:
fprintf(UART_PORT2,"n0.val=%c12345%c", 34, 34);

Létezik erre más megoldás?
(#) kissi válasza Lamprologus hozzászólására (») Aug 17, 2016 / 1
 
Szia!

Hátha segít Bővebben: Link !
(#) Dempsey válasza Lamprologus hozzászólására (») Aug 18, 2016 /
 
Szia! Én mikor soroson küldök idéző jelet akkor ezt használom : \x22 és működik.
(#) Lamprologus hozzászólása Szept 25, 2016 /
 
Amikor egy függvényen belül hozok létre egy változót, akkor a program futása során a függvényből kilépve a változó megszűnik, étréke elvész ...
Hogyan tudom azt megoldani, hogy az adott változó csak a függvényen belül legyen látható, de ha kilépek a függvényből megmaradjon, és az adott függvény következő futásakor tudja használni az előző futás során beállított változóértéket?
Azt tudom, ha a függvényen kívül hozom létre a változót globális változóként akkor működik a dolog, csak most kicsit kezdek belekeveredni a változóimba, és érdekelne nincs-e valami más lehetőség.
(#) Hp41C válasza Lamprologus hozzászólására (») Szept 25, 2016 / 1
 
(#) Lamprologus válasza Hp41C hozzászólására (») Szept 25, 2016 /
 
Köszönöm!
Jól gondolom, hogy különböző függvényekben használhatom ugyan azt a változónevet, akkor is ha statikus változóként hozom létre?
(#) Hp41C válasza Lamprologus hozzászólására (») Szept 25, 2016 / 2
 
Ha egy változót egy eljárásban deklarálsz, csak abban az eljárásban érhető el, "látható".
  1. int eljaras1()
  2. {
  3.  static byte i;
  4. }
  5.  
  6. int eljaras2()
  7. {
  8.  static byte i;
  9. }

A két i változó egymástól független.
(#) kurucz_peter hozzászólása Okt 7, 2016 /
 
Helló!

egy kis segítségre lenne szükségem.
PIC16F1509-es kontrollerrel dolgozom. Az RA5-öt szeretném digitális bemenetként használni, és egy lefutó élre megszakítást lekezelni.
Valami a port konfiguráció körül lehet rossz, de egyszerűen nem értem h mi.
a beállításaim:
#fuses INTRC_IO, ...

setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);

setup_nco(NCO_DISABLED,1);
set_tris_a(0b11111001);

clear_interrupt(INT_RA);
enable_interrupts(INT_RA5)

..

#INT_RA
void detect_ra_change(){
output_toggle(LED_RED_PIN); -- for test only
}

A jelenség az, hogy amikor egy H->L történik az RA5-ön akkor lefagy az egész alkalmazás, csak resetelni lehet. Az interrupt rutin nem hívódik meg.
A set és setup parancsok helyett már írtam direktbe is a megfelelő regisztereket, de az eredmény ugyanaz.
Esetleg van valakinek valami ötlete?

Köszi!

Üdv:
P
(#) Dempsey hozzászólása Okt 8, 2016 /
 
Sziasztok! PC-ről küldök számokat a PIC-nek ugye ezeket nem számként hanem karakterként ismeri fel. Ezeket a karaktereket számmá alakítom, ez a része simán működik a dolognak. Viszont még midig nem vágom ezeket a stringeket rendesen. Maximum 4 számjegyű számot fogok küldeni minimum pedig 3 számjegyűt. A fogadott számot printf-el visszaküldöm és monitorozni tudom. A probléma a következő: ha pl: azt küldöm hogy 1000 akkor szépen visszajön az 1000 a PC-re. Viszont ha ezután pl: azt küldöm hogy 300 akkor 3000 jön vissza PC-re. Tehát a tömbömben a 4. helyi értéken lévő szám ottmarad. Hogyan tudnám ezt elkerülni?
  1. #include <16F877A.h>
  2.  
  3. #FUSES NOWDT, HS, NOPUT, PROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG
  4. #use delay(clock=20000000)
  5. #use rs232(baud=9600, xmit=PIN_C6,rcv=PIN_C7,bits=8,parity=N,stop=1,ERRORS)
  6. #include <string.h>  
  7. #include <stdlib.h>
  8. #include <stdio.h>
  9.  
  10. int i=0;
  11.  
  12. char string[5]={};
  13.  
  14. int16 szam;
  15.  
  16. #int_rda
  17. void adat_isr(){
  18.  
  19.         string[i]=getc();
  20.         i++;
  21.  
  22.         }
  23.  
  24. void main()
  25. {
  26.  
  27.  
  28.           enable_interrupts(int_rda);
  29.           enable_interrupts(GLOBAL);
  30.    
  31. while(true){
  32.  
  33.  
  34.  
  35.         szam = atol(string);
  36.  
  37.         printf("Szam: %Lu",szam);
  38.  
  39.         i=0;
  40.  
  41.  
  42.         }
  43. }


Előre is köszönöm a segítségeket.
(#) Gyimate válasza Dempsey hozzászólására (») Okt 9, 2016 /
 
Szia!
A stringben benne marad az előzőleg küldött adat is, amikor te elküldöd ez "1000"-et, akkor a string a következő képen töltődik fel:
1. elem: '1' 2.elem: '0' 3. elem: '0' 4.elem : '0'
Amikor ezután elküldöd a 300-at, csak az első 3 karaktert írod felül, az utolsó helyen megmarad az előzőleg beérkezett szám, vagyis a 0 és ezért alakítja át 3000-nek.
Ezt úgy tudod kivédeni, hogy miután átalakítottad a stringet számmá, egy for ciklusban átírod a string elemeit 0-ra,vagyis 0x00-ra. Így fog kinézni a kódod vége:
  1. szam = atol(string);
  2. for (i=0; i<4; i++) string[i] = 0;
  3. printf("Szam: %Lu",szam);
  4.  
  5. i=0;
(#) Dempsey válasza Gyimate hozzászólására (») Okt 9, 2016 /
 
Köszi szépen hogy válaszoltál. Délután megnézem hogy működik e.
(#) Hp41C válasza Dempsey hozzászólására (») Okt 9, 2016 / 1
 
Az egész felépítés hibás...
Ugyanis, ha elég ritkán küldöd a karaktereket (pl. egyesével), a visszaküldött sorozat más és más lesz.
pl. ezt köldöd karakterenként: 1 0 0 0 2 0 0 0 A várt válasz 1000 és 2000helyett ez lesz a válasz: 1 , 10, 100, 1000, 2000 (a veszzőket nem küldi, csak az elválasztás miatt írtam).

Ha Gyimate ajánlását valósítod meg, a szam változó értéke sosem lesz 1000 ill. 2000, hanem sorban 1, 0, 0, 0, 2, 0, 0, 0...

Kell egy végjel, vagy meg kell számolni hány karaktert vett az UART.

A legjobb az, ha szervezel egy vételi és egy adási buffert, amibe a vételi megszakítási rutim elhelyezi a vett karaktereket és adminisztrálja, hogy hány karakter van a vételi bufferben, illetve az adási megszakítás kiveszi a soron levő adata és elküldi az UART -tal, csökkenti a bufferben levő adatok számát, ha nem talál küldendő adatot, letiltja az adási megszakítást. A főprogram figyeli a vételi bufferben levő karakterek számát, ha van feldolgozandő karakter, kiolvassa, csökkenti a számukat (primitív művelettel), feldolgozza. A választ az adási bufferbe írja, növeli a benne levő katakterek számát (primitív művelettel), engedélyezi az adási megszakítást. Ha így írod meg, még karakterenként is küldheted (akár fél óra / karakter) csak annyit fog visszaküldeni, amennyit előírtál neki. De a szám, amit elköldtél, még így sem lesz összerakható. Vagy mindig 4 karaktert kell küldeni vagy a szám végén egy végjelet (pl. CR ("\r", 0x0D), LF ("\n", 0x0A), stb.), amiből a föprogram tudja, hogy elért a szám végére.
A hozzászólás módosítva: Okt 9, 2016
(#) Dempsey válasza Hp41C hozzászólására (») Okt 9, 2016 /
 
Szia!Értem amit írsz talán meg is tudom csinálni. Amúgy ez a program egy szervo motort fog vezérelni (ha fog egyszer működni), úgy hogy telefonról küldöm neki az adatokat BT modulon keresztül.
(#) kurucz_peter hozzászólása Okt 16, 2016 /
 
Helló!

az 2016 okt 7-i hozzászólásomhoz írnám kiegészítésként.
A probléma az volt, hogy használom az INT_RA és INT_RB megszakításokat is. Mindkettőhöz megírtam az interrupt rutinokat, és engedélyeztem mindkét megszakítást.
A probléma az hogy csak az INT_RB isr hívódik fel, és igy az INT_RA interrupt flag sohasem törődik. Lefagy az egész.
Megoldás, az INT_RA-t is az INT_RB isr-ben kell implementálni.
Kérdés, hogy ez általában jellemző a CCS-re vagy csak egyszerűen rossz a compiler a 16F1509-nél.
Köszi!
(#) Gyimate hozzászólása Okt 27, 2016 /
 
Sziasztok!

Tudja valaki, hogy kell bekapcsolni a belső feszültségszabályzót az USB-hez egy dsPIC33EP családú mikrokontrolleren.

A válaszokat előre is köszönöm!
(#) Gyimate hozzászólása Nov 14, 2016 /
 
Sziasztok!

Mivel az előző kérdésemre sem érkezett válasz, ezért most sem tartom valószínűnek, de hátha léteznek még csodák...

A kérdésem a következő lenne: Találkozott már valaki olyannal, hogy dsPIC-nél nem lehet a set_timer paranccsal beállítani a timer értékét?
Nem sikerül sem interrupton belül, sem azon kívül beállítani a timer 1 kivételével a többi timer értékét. Tud erre valaki valami megoldást?

Üdv Máté
(#) Lamprologus hozzászólása Jan 17, 2017 /
 
UART komunikációval kapcsolatban kérdeznék.
  1. #USE_RS232(UART1,BAUD=9600,TRANSMIT_BUFFER=50,NOTXISR)
  2. printf(“Testing Transmit Buffer”);
  3. while(TRUE){
  4. putc_send();
  5. }

Ebben a kódrészletben a NOTXISR azt jelenti, hogy nincs hardveres CTS, és a főciklus minden lefutásakor, ha van a bufferben még el nemküldött karakter akkor elküldi azt?

Értelem szerűen akkor a TXISR használata esetén meg kell egy PIC láb ami fogadja a CTS jelet, és akkor küldi el a bufferből a következő karaktert, és sehol máshol nem kell fogalkoznom az adatküldéssel?

Tehát, ha van beállítva adási puffer, akkor az fprint parancs átküldi az adatokat a pufferbe, a főciklusba beírt putc_send() függvény pedig kiküldi egyesével ( minden főprogram ciklus alatt egyet) a karaktereket a pufferből?
Puffer beállítása nélkül pedig addig nem lép tovább a program az fprint parancstól amíg az utolsó karaktert is ki nem küldi az UART portra?

Jól gondolom én ezt így, vagy valahol nagyon eltévedtem?
( tudom ki kéne próbálni ... csak most nincs rá lehetőségem! )
(#) Lamprologus válasza Lamprologus hozzászólására (») Jan 22, 2017 /
 
Kipróbáltam ... valóban úgy működik, ahogy gondoltam!
(#) minicooper hozzászólása Jan 24, 2017 /
 
Üdv.! Épp a minap oltottam porig az MPLAB-ot és maradtam a CCS C programnál.Igencsak rég használtam most újra szeretnék PIC-ezni ám a Pickit(3) szoftverében ha beimportálom az (elvileg) hibátlan és leforditott HEX fájlt nem tölt be semmit vagyis nem irja ki a HEX fájl tartalmát ahogy szokja.Van egy régebbi egyszerű programom egy 8 bites (16F628A) kontrollerre amit betölt szépen ám a mostani (24F16KA101) kontrollerre irt program HEX fájlját nem mutatja ki ami valójában nem üres mert néztem HEX editorral.Mi lehet a gond?
(#) Dempsey válasza minicooper hozzászólására (») Jan 24, 2017 /
 
Szia!
Beimportálod aztán égetés ennyi az egész. Nekem sem ír ki semmit csak hogy be van load-olva. Mint a képen is látszik.

Névtelen.jpg
    
(#) Hp41C válasza Dempsey hozzászólására (») Jan 24, 2017 /
 
View / Program memory
(#) Dempsey válasza Hp41C hozzászólására (») Jan 24, 2017 /
 
Köszi lehet egyszer még jól jön.
(#) minicooper válasza Dempsey hozzászólására (») Jan 25, 2017 /
 
Ömm én más szofverre gondoltam.Konkrétan erre(képet mellékeltem).A figyelmeztetés pedig kiirja a működőre is.
(#) icserny válasza minicooper hozzászólására (») Jan 25, 2017 /
 
A HEX fájlba ki kellene íratni a konfigurációs bitek beállítását is. Ezeket a PICkit nem fogja kitalálni.
(#) minicooper válasza icserny hozzászólására (») Jan 25, 2017 /
 
Mint ahogy leirtam egy teljesen működő program hex fájljára is kiirja.
(#) Hp41C válasza icserny hozzászólására (») Jan 25, 2017 /
 
Meglehet az is, hogy csak valamelyiket nem állítja be a kód, de a default értékével megy.
(#) Lamprologus válasza minicooper hozzászólására (») Jan 25, 2017 /
 
Én is CCS-C-t használok, PIC KIT3-mal. Eleinte MPLAB 8.9 alól, sajnos voltak nyűgök nálam is ... néha nem ismerte fel a PICKIT-et, néha a PIC-et, néha csak a nyomkövetés nem ment ...
Aztán kipróbáltam a sokat szidott MPLAB-X-et ... azóta az alatt használom a CCS-C-t! Gyorsan lekopogom, de azóta simán megy, programozás, nyomkövetés ... minden!
(#) bazsamasza hozzászólása Ápr 29, 2017 /
 
Sziasztok.
Olyan kérdésem lenne felétek, hogy hogyan tudok lcdre kiíratni ékezetes betűt? A kontroller 18f25k80. De jó lenne ha ezt nem csak erre a kontrollerre tudnám használni. Pickit3-at és ccs c-t használok. A verziószámot nem tudom fejből, majd otthon megnézem.
Előre is köszönöm.
Üdv.: Balázs
Következő: »»   115 / 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