Fórum témák
» Több friss téma |
Fórum » CCS PIC Compiler
Feltettem az MPLAB X IDE-t ...
Még sok mindent nem találok meg benne ... De legalább a Debug megy!
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?
Szia! Én mikor soroson küldök idéző jelet akkor ezt használom : \x22 és működik.
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.
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?
Ha egy változót egy eljárásban deklarálsz, csak abban az eljárásban érhető el, "látható".
A két i változó egymástól független.
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
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?
Előre is köszönöm a segítségeket.
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:
Köszi szépen hogy válaszoltál. Délután megnézem hogy működik e.
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
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.
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!
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!
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é
UART komunikációval kapcsolatban kérdeznék.
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! )
Kipróbáltam ... valóban úgy működik, ahogy gondoltam!
Ü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?
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.
Ömm én más szofverre gondoltam.Konkrétan erre(képet mellékeltem).A figyelmeztetés pedig kiirja a működőre is.
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.
Mint ahogy leirtam egy teljesen működő program hex fájljára is kiirja.
Meglehet az is, hogy csak valamelyiket nem állítja be a kód, de a default értékével megy.
É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!
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 |
Bejelentkezés
Hirdetés |