Fórum témák
» Több friss téma |
Fórum » CCS PIC Compiler
Van esetleg valami szellemes megoldásotok arra hogy pl egy gsm mosul küldi a csengetést ASCII-ben "RING" felirattal ezt hogyan kezdenétek el feldolgozni? Ennek az értéke " 52 49 4E 47 "
ha jól emlékszem akkor három bájtot pufferel el 16f877 uart modul ilyenkor mindig egyből menteni kell a kapott értékeket soros portról? Több karakterből álló sorokat szeretnék pic-el feldolgozni.
Ha printf-et használsz idézőjelekkel, akkor az az idézőjelek közötti string-et küldi ki ( azaz az ASCII kódot! )! Egy változó tartalmát írasd ki például és a változó tartalma legyen 1 !
PICkit 3 debugger funkció használatával kapcsolatban a kérdésem az hogy mit is kell beállítani ahhoz, hogy működjön? MPLAB IDE 8.92 alól CCS-C 5.046-os fordítóval prtóbáltam, PIC16F887-es PIC-el, de valami hibát jelez. Hogy milyen hibaüzenetet kapok azt csak este tudom mondani, de hátha tudtok így is segíteni... Config biteknél mit kell engedélyezni/tiltani, programba mit kell megadni?
A hozzászólás módosítva: Jún 12, 2015
ezt a hibaüzenetet kapom:
PK3Err0040: The target device is not ready for debugging. Please check your configuration bit settings and program the device before proceeding.
Egészen véletlenül nem az a helyzet, hogy csak az X támogatja a PK3-at? Próbáld ki X-el.
Sziasztok!
C nyelven programozok és lenne egy kérdésem az if parancsról. Ha a program egy if parancsban fut és az if feltétele idő közben megváltozik, akkor be fejezi-e az if parancsot a program, vagy ki ugrik belőle és megy tovább? Ha be fejezi, akkor hogyan lehet azt elérni, hogy amikor hamissá változik az if a program ki ugorjon belőle és az utánna következő programrészt folytassa?
Nem az MPLAB verzióval volt a gond ... az RB7/ICSPDAT, RB6/ICSPCLK lábakon engedélyezve volt a felhúzó ellenállás, azért nem működött a Debugger. Programozni tudta úgy is, de nyomkövetni nem.
Idézet: Nem, mikor az adott sorra ér, akkor vizsgálja, utána már nem találkozik a vizsgálatra vonatkozó utasítással mégegyszer ( hacsak be nem írod újra !) !„Ha a program egy if parancsban fut és az if feltétele idő közben megváltozik, akkor be fejezi-e az if parancsot a program, vagy ki ugrik belőle és megy tovább?” Idézet: „Ha be fejezi, akkor hogyan lehet azt elérni, hogy amikor hamissá változik az if a program ki ugorjon belőle és az utánna következő programrészt folytassa?” Megfelelő gyakorisággal nézed ÚJRA az if parancs végrehajtása közben ( és pl. egy while-al ) !
Szerintem ezért szokott szólni, mikor DEBUG módba akarsz lépni !?
Konkrétan nem tudom, de mikor egy PIC-nél nem felelt meg a konfigurációs szavak értéke a DEBUG üzemmódnak, akkor jelezte /PIC18F26K22 volt az alany, ha jól emlékszem!/ A hozzászólás módosítva: Jún 13, 2015
Az előbbi kérdést folytatva, goto parancsal hogyan tudok visszaugrani egy if parancshoz, hogy újra megvizsgálja?
( c nyelven ccsc-ben programozok)
Szólt ... de csak annyit, hogy ellenőrizzem a config biteket.
És arra egyből nem gondoltam, hogy a felhúzó ellenállások is bezavarják. Programot beírni, visszaolvasni úgy is simán tuda.
if() parancs sorába leteszel egy cimkét és a goto után azt írod oda hivatkozásul. Pl.:
loop: if(valami)... ......... goto loop; De én lebeszélnélek erről, mert ez így nem elegáns, és sok kellemetlenség is lehet miatta. Több, más programozási fogás van erre. pl. a continue használata A hozzászólás módosítva: Jún 14, 2015
Vannak erre ciklusutasítások, amikkel elegánsabban megoldható. for, while, do-while. Aztán ha minden kötél szakad, akkor még meg lehet fűszerezni break és continue utasításokkal, mondjuk ezek már majdnem goto-k, de nem egészen.
Értem, tehát így kell használni, de nem ajánlott.
Sziasztok! Egy eldurranó alaplap elküldte az örök elektronmezőkre a CNC vezérlőm PIC-jeit, a régi assemblerben íródott progi természetesen már nincs meg, szóval nekiálltam megírni a C-s megfelelőjét, de nem igazán akar működni. A lényege az, hogy a PC-től kap egy Step és egy Dir utasítást, és van 4 kimenet, amit futófény-szerűen eggyel odébb léptet a Step utasításra a Dir bemenet szintjétől függő irányba. A csatolt kód működik, de csak nagyon pici, kb. 20mm/min sebességig, ami úgy 25-30Hz-es frekvenciának felel meg az én gépemnél. Az assembleres elődje még a 600mm/mint-t is gond nélkül tudta, pedig az a progi csak 500kHz-el hajtotta a PIC-et, a mostanival pedig már elmentem 8 megáig kínomban. Ha valaki írt már hasonló elvű progit és megosztaná velem, azt megköszönném, még csak tanulgatom a C-t.
Szia,
Szerintem neked a INT megszakítást kellene használnod, azzal kellene lekezelni a step utasítást, mivel ahogy nézem a step jel a B0-ás bemenetre érkezik. Nem tudom, hogy mennyire vagy otthon a megszakítások kezelésében, ha gondolod, akkor segítek a megírásában.
Még tegnap este megírtam neked a programot. Bemásolom ide, hátha jó lesz még másnak is ez a program. Remélem, hogy ez már jól fog működni.
Üdv Máté A hozzászólás módosítva: Júl 12, 2015
Megköszönöm a segítséget, eddig még nem volt dolgom C nyelvben megszakításokkal. Assemblerben is totál autodidakta módon tanultam meg programozni, és a C nyelvvel is így vagyok. Igen, jól látod a B0-án kapja a léptető jelet a PC párhuzamos portjáról, ha a Step bemenet magas, akkor a Dir bemenet szintjétől függő irányban kell a 4 kimenet közül a magas szinten levőt eggyel odébb léptetnie. Unipoláris motorjaim vannak és egész lépéssel léptetem őket, a tekercsek középkivezetése + tápfeszen van, a négy szabad vég közül pedig mindig egy tekercsvéget húzok le testre.
Bekerült a program a 3 PIC-be, és tökéletesen működik Mégegyszer ezer hála, elképzelni sem tudod, hogy mekkora kakiból húztál ki, ezzel a géppel csinálok a munkámhoz alkatrészeket, és van egy hétfői határidős munkám, ami a program nélkül nem készült volna el.
Nagyon szívesen segítettem, ha netalántán máskor is probléma lenne vele, csak írj bátran!
Sziasztok!
Nem rég kezdtem el ismerkedni a PIC ccs-c programozási nyelvel. Szeretnék létrehozni egyedi karaktert egy 2x16 LCD-n, de nem sikerül. Az interneten talált program részletekből próbáltam össze hozni , de sajnos nem sikerül. Lefordul a program de mégsem jó. MPLAB 8.92+CCS-C párost használok LCD.c include-al. Tudna segíteni valaki egy működő példa programmal? Van a lcd.c-nek manuálja hogy melyik parancs mire való és hogyan kell használni? Üdv.
Szia, Találtam neked egy kódrészletet, ami talán segít. A lényege annyi, hogy az LCD-nek először el kell küldeni egy parancsot, amivel tudatod vele, hogy most egy új karakter információi érkeznek, majd elküldöd szépen sorban, fentről lefelé haladva a sorokat.
Ezzel a kóddal az új "karakter" egy üres kocka lesz.
A help-ben csak internal LCD találtam.
Szia.
Igen tudom, hogy először el kell küldeni a karakter információit és csak utána lehet használni. Ezzel próbálkozom: int8 i; const char LCD_CUSTOM_CHARS[16] = { // saját ékezetes betű 0x02,0x04,0x0E,0x01,0x0F,0x11,0x0F,0x00, // á 0x02,0x04,0x0E,0x11,0x1F,0x10,0x0E,0x00, // é }; void lcd_init_cgram(void) { lcd_send_byte(0,0x40); // kurzor a CGRAM elejére lcd_set_cgram_char(0,0); for(i=0; i<16; i++) { lcd_send_byte(0,LCD_CUSTOM_CHARS[ii]); // definiálható karakterek feltöltése } // ékezetes karakterekkel lcd_send_byte(0,0x80); // kurzor vissza, a DDRAM elejére } Helyesen küldöm az adatokat? Üdv.
Sikerült!
Köszönöm Neked és Buvarruha-nak. Üdv.
Ó hát az én részvétem igen csekély volt ebben a dologban.
Sziasztok!
GSM modullal kínlódok. Mikor megcsörgetem a modult a következő adat jön soros porton: <CR><LF>RING<CR><LF>. Pic el dolgoznám fel az adatot INT_RDA val. Természetesen nem működik. A <CR> és az <LF> megérkeznek a bufferbe de utána semmi,tehát a RING már nem. Az lenne a kérdésem hogy az <LF> lezárja az INT_RDA interruptot? |
Bejelentkezés
Hirdetés |