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   109 / 118
(#) messer hozzászólása Máj 26, 2015 /
 
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.
(#) kissi válasza messer hozzászólására (») Máj 26, 2015 /
 
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 !
(#) Lamprologus hozzászólása Jún 12, 2015 /
 
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
(#) Lamprologus válasza Lamprologus hozzászólására (») 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.
(#) Buvarruha válasza Lamprologus hozzászólására (») Jún 12, 2015 /
 
Egészen véletlenül nem az a helyzet, hogy csak az X támogatja a PK3-at? Próbáld ki X-el.
(#) zilahi hozzászólása Jún 13, 2015 /
 
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?
(#) Lamprologus válasza Buvarruha hozzászólására (») Jún 13, 2015 /
 
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.
(#) kissi válasza zilahi hozzászólására (») Jún 13, 2015 /
 
Idézet:
„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?”
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 !) !
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 ) !
(#) kissi válasza Lamprologus hozzászólására (») Jún 13, 2015 /
 
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
(#) zilahi válasza kissi hozzászólására (») Jún 14, 2015 /
 
Értem, köszönöm a választ.
(#) zilahi válasza kissi hozzászólására (») Jún 14, 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)
(#) Lamprologus válasza kissi hozzászólására (») Jún 14, 2015 /
 
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.
(#) sysy válasza zilahi hozzászólására (») Jún 14, 2015 /
 
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
(#) potyo válasza zilahi hozzászólására (») 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.
(#) zilahi válasza potyo hozzászólására (») Jún 14, 2015 /
 
Értem, tehát így kell használni, de nem ajánlott.
(#) kormika hozzászólása Júl 11, 2015 /
 
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.
  1. #include <16F818.h>
  2. #fuses NOWDT,PUT,INTRC_IO,NOMCLR,BROWNOUT,NOLVP,NOCPD,NOPROTECT
  3. #use delay(clock=8000000)
  4.  
  5. #define Step PIN_B0
  6. #define Dir  PIN_B1
  7. #define Init PIN_B2
  8.  
  9. void main(){
  10.  
  11.    int8 Out;
  12.    delay_ms(1500);
  13.    set_tris_a(0x00);
  14.    set_tris_b(0x07);
  15.    output_a(0x00);
  16.    output_b(0x04);
  17.    Out = 1;
  18.    delay_ms(1500);
  19.    output_b(0x01);
  20.    
  21.  while(TRUE){
  22.  
  23.   main:
  24.          if(Out==1){
  25.          output_b(0x10);
  26.          goto main;
  27.          }
  28.          if(Out==2){
  29.          output_b(0x20);
  30.          goto main;
  31.          }
  32.          if(Out==3){
  33.          output_b(0x40);
  34.          goto main;
  35.          }
  36.          if(Out==4){
  37.          output_b(0x80);
  38.          goto main;
  39.          }
  40.        if(input(Step)){
  41.          if(input(Dir)){
  42.            if(Out==4){
  43.              Out=1;
  44.              }
  45.            else{
  46.              Out=Out+1;
  47.            }
  48.            goto main;
  49.          }
  50.          if(!input(Dir)){
  51.            if(Out==1){
  52.              Out=4;
  53.             }
  54.            else{
  55.              Out=Out-1;
  56.            }
  57.            goto main;
  58.          }
  59.          goto main;
  60.        }
  61.        goto main;
  62.  }
  63. }
(#) Gyimate válasza kormika hozzászólására (») Júl 11, 2015 /
 
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.
(#) Gyimate válasza kormika hozzászólására (») Júl 12, 2015 /
 
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.

  1. #include <16F818.h>
  2. #fuses NOWDT,PUT,INTRC_IO,NOMCLR,BROWNOUT,NOLVP,NOCPD,NOPROTECT
  3. #use fast_io(A)
  4. #use fast_io(B)
  5.  
  6. #define Step PIN_B0
  7. #define Dir  PIN_B1
  8. #define Init PIN_B2
  9.  
  10. int out_pin = 0x10;
  11.  
  12. #INT_EXT
  13. void ext_interrupt ()
  14. {
  15.    if (input (Dir)) out_pin = out_pin >> 1;
  16.    else out_pin = out_pin << 1;
  17.    if (out_pin == 0x08) out_pin = 0x80;
  18.    if (out_pin == 0x00) out_pin = 0x10;
  19. }
  20.  
  21. void main ()
  22. {
  23.    setup_oscillator(OSC_8MHZ);
  24.    set_tris_a(0x00);
  25.    set_tris_b(0x07);
  26.    
  27.    enable_interrupts (INT_EXT);
  28.    ext_int_edge( L_TO_H );
  29.    enable_interrupts (global);
  30.    
  31.    for (;;)
  32.    {
  33.       output_b (out_pin);
  34.    }
  35. }


Üdv Máté
A hozzászólás módosítva: Júl 12, 2015
(#) kormika válasza Gyimate hozzászólására (») 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.
(#) kormika válasza Gyimate hozzászólására (») Júl 12, 2015 /
 
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.
(#) Gyimate válasza kormika hozzászólására (») Júl 12, 2015 /
 
Nagyon szívesen segítettem, ha netalántán máskor is probléma lenne vele, csak írj bátran!
(#) kormika válasza Gyimate hozzászólására (») Júl 12, 2015 /
 
Rendben, mégegyszer köszi.
(#) madazg77 hozzászólása Aug 6, 2015 /
 
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.
(#) Buvarruha válasza madazg77 hozzászólására (») Aug 6, 2015 /
 
A CCSC helpjében keresd.
(#) Gyimate válasza madazg77 hozzászólására (») Aug 6, 2015 /
 
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.

  1. lcd_send_byte (0,0x40);
  2.    
  3.    lcd_send_byte (1,0x00);  
  4.    lcd_send_byte (1,0x00);
  5.    lcd_send_byte (1,0x00);
  6.    lcd_send_byte (1,0x00);
  7.    lcd_send_byte (1,0x00);
  8.    lcd_send_byte (1,0x00);
  9.    lcd_send_byte (1,0x00);
  10.    lcd_send_byte (1,0x00);


Ezzel a kóddal az új "karakter" egy üres kocka lesz.
(#) madazg77 válasza Buvarruha hozzászólására (») Aug 6, 2015 /
 
A help-ben csak internal LCD találtam.
(#) madazg77 válasza Gyimate hozzászólására (») Aug 7, 2015 /
 
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.
(#) madazg77 válasza Gyimate hozzászólására (») Aug 9, 2015 /
 
Sikerült!
Köszönöm Neked és Buvarruha-nak.
Üdv.
(#) Buvarruha válasza madazg77 hozzászólására (») Aug 9, 2015 /
 
Ó hát az én részvétem igen csekély volt ebben a dologban.
(#) Dempsey hozzászólása Aug 14, 2015 /
 
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?
Következő: »»   109 / 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