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   10 / 118
(#) potyo válasza sysy hozzászólására (») Feb 11, 2008 /
 
Idézet:
„Hehe... ez igaz. Ezt az aranyköpést néha kölcsönkérhetem?”


Természetesen
(#) whalaky válasza sysy hozzászólására (») Feb 11, 2008 /
 
Köszi mindent! Sajnos csak most estem haza, így ma már nem sok minden lesz a dologból.
Valóban csak 2, max 4 bytot akarok átvinni (na persze az embernekmenet közben jönnek meg az igényei) temészetesem manchester kódolással. Itt viszont az is gázos lehet, hogy a tervezett cucc a legrosszabb esetben 80-100ms-enként kell hogy küldjön egy csomagot - lesz miko percekig semmit, de hát a legszűkebb keresztmetszetben kell gondolkodni, azaz a 2400 bps-en manchesterrel 70ms alatt átvihető bytok száma így gyors fejszámolással kb 40 byte. Ha igaz amit a fórumokon írnak, hogy a vevőnek küldeni kell egy-két "jóreggelt" byteot UU - vagy manchesterrel 0xF, paritásbittel, stopbittel igencsak beszűkül a biztonsággal átvihető adadtok mennyisége.
Ezzel az RTOS dologgal felcsigáztál, utána nézek hogy mi is ez, hátha mégjól jöhet valamikor.
Mégegyszer köszönök mindent, holnap uart, aztán látjuk mi lesz belőle....
Valoban a C közelebb áll hozzám mint az ASM.
Anó (huszon éve) asm-oztunk PC-re, mert az XT-ken még számottevően gyorsabb kódot lehetett gyártani mint bármi más magasszintű programmal, de mára elkényelmesedtem.....
(#) sysy válasza whalaky hozzászólására (») Feb 12, 2008 /
 
"Anó (huszon éve) asm-oztunk PC-re, mert az XT-ken még számottevően gyorsabb kódot lehetett gyártani mint bármi más magasszintű programmal, de mára elkényelmesedtem....."

Így ötven felett már én is így vagyok vele. Akkor utáltam meg igazán az ASM-et mikor folyamtirányítási rendszert kellett CAMAC (i8080) gépeken írni és nem lett elég a 64K memória. Az halál volt. Az XT-ken szinte újgyakorlat volt a szállodai foglalási rendszer, szintén ASM-ben, mert a Basic program tetülassan dolgozott.
Hja, a régi szép idők...

sysy
(#) whalaky válasza sysy hozzászólására (») Feb 12, 2008 /
 
Könyörgöm valaki segítsen!
Megpróbáltam a hw uartot életrekelteni, de úgy tűnik esélyem nincs rá.
  1. #include <16F87.h>
  2. ....
  3. #use delay(clock=20000000)
  4. #use rs232(baud=2400,parity=N,xmit=PIN_B5,rcv=PIN_B2,bits=8,ERRORS,stream=radio)
  5. #use rs232(baud=9600,parity=N,xmit=PIN_A0,rcv=PIN_A1,bits=8,force_sw,stream=console)
  6. .....,
  7. #int_RDA
  8. void  RDA_isr(void)
  9. {
  10.    char Ch;,
  11.    Ch=getc(radio);,
  12.    putc(Ch,console);
  13. }
  14. ....
  15.    enable_interrupts(INT_RDA);
  16.    enable_interrupts(GLOBAL);
  17. ....

Bárakármit csinálok, az RDA megszakítás az nem akar megtörténi. Ha a kbhit()-el a main-ben kezelen a radio stream-en bejövö adatokat, igaz ugyan hogy csak űrszemetet, de legalább valamit továbbechoz a consolra. Egyenlőre nem is rádión van összekötve a két PIC hanem két dróttal, így a rádió hibája kizárva.
Véresre olvastam a szemem, amit találtam mindent végigpróbáltam és SEMMI.
Osszátok meg velem az okosságot!
(#) MPi-c válasza whalaky hozzászólására (») Feb 13, 2008 /
 
A PIC-ek jól vannak összekötve? (Tx-Rx valamint a test közös?)
Nem tudom a CCS mennyire rugalmas, de a stream-hez fgetc és fputc van írva, de ettől még megszakításnak kellene lennie.
(#) whalaky válasza MPi-c hozzászólására (») Feb 13, 2008 /
 
Az összekötéssel nem igen lehet baj, mert mint említettem kbhit()-el beesik valami vagy baudrate hibás, de inkább bitveszeteséges cucc. A megszakítás gondolom csak hardveres uart-al következik be, ezért gondolom hogy nem használja.
(#) sysy válasza whalaky hozzászólására (») Feb 13, 2008 /
 
Nem egészen így kell csinálni az USART olvasását, ahogy te írtad:

#int_RDA
void RDA_isr(void)
{
char Ch;,
Ch=getc(radio);,
putc(Ch,console);
}



Az USART által levett karakter az RCREG nevű regiszterében várakozik a kiolvasásra.
én így csinálnám:
[/code]
#int_RDA
void RDA_isr(void)
{
char Ch;
#byte RCREG = 0x1A;

Ch=RCREG;
putc(Ch,console);
}

  1. A getch() ravasz függvény, ha nem jön semmi akkor beleragad a program és az idők végezetéig várni fog a bejövő karakterre.
  1.  
(#) whalaky válasza sysy hozzászólására (») Feb 13, 2008 /
 
Idézet:
„A getch() ravasz függvény, ha nem jön semmi akkor beleragad a program és az idők végezetéig várni fog a bejövő karakterre.

Rosszúl gondolom hogy hiába furfangoskodik, a megszakítás azért van, mert van várakozó adat a pufferben? Így semmi oka beragadni, mert az tutti ott van, bár ki tudja...
(#) sysy válasza whalaky hozzászólására (») Feb 13, 2008 /
 
Hát nem. A getch() azzal kezdi, hogy kiüríti a buffereket és feltételezi, hogy majd csak ezután fog beérkezni a karakter. Ez a baja neki.
És nem haszálja a megszakításokat sem, hanem pollingolja a flag biteket. Letiltott megszakítás mellett is működik. Szóval, a getch()-t a karakter megjövetele előtt illik meghívni. Ez van.
(#) whalaky válasza sysy hozzászólására (») Feb 13, 2008 /
 
Újfent tanultam valamit. Köszi!
(#) whalaky válasza sysy hozzászólására (») Feb 13, 2008 /
 
Tanulság képpen mindenkinek, a probléma megoldódott.
A PIC16F87 alapban nem használja az usart-ot, azt külön be kell kapcsolni, addig nem megy a megszakításkezelése.
A hihetetlen bonyolult kódja:
  1. setup_uart(true);


sysy: a programban bennemaradt a régi kód,
  1. #int_RDA
  2. void  RDA_isr(void)
  3. {
  4.    char Ch;
  5.    Ch=getc(radio);
  6.    putc(Ch,console);
  7. }
és kiválóan műküödik vele. Azért megpóbálom amit javasoltál, hátha csak szerencsém volt (ideje)

két soros port használata, az egyik a hw usart, a másik szoftveres
  1. #use rs232(baud=2400,parity=N,xmit=PIN_B5,rcv=PIN_B2,bits=8,ERRORS,stream=radio)
  2. #use rs232(baud=9600,parity=N,xmit=PIN_A0,rcv=PIN_A1,bits=8,force_sw,stream=console)


Mégegyszer köszönöm mindenkinek a segítőkészséget, most fogok hozzá kitalálok valami jó protokollt, megírom a manchester kódolást (vagy átveszem valakiét mert kellően lusta vagyok) és referálok a dologról.
(#) m2attila válasza potyo hozzászólására (») Feb 14, 2008 /
 
Nem volt időm eddig folytatni de tegnap sikerült.
Az USB-s CDC végre muxik.

A CCS mintapéldával tényleg működik. Átnéztem a config biteket és rájöttem hogy mi volt a baj.

Én mindíg
  1. #use delay(clock=20000000)

beállítással próbálkoztam,mivel a kvarc 20MHz-es.


Miután beállítottam:
  1. #use delay(clock=48000000)

Minden rendbe jött a régebben problémás programokban.

Van amikor az ember mindenre gondol csak azt nem nézi meg ami magától érthetődő alap dolog. Mert az "ugy is jó",hát nem mindig.

Köszönöm a segítségedet potyo!
(#) ccs hozzászólása Feb 16, 2008 /
 
Sziasztok !

Átnéztem minden CCS C-hez tartozó EEPROM helpet, a Netet, de nem találtam megoldást.
Tudna valaki segíteni 2 kérdésben ?

1. Itt egy programrészlet amely az indulásnál az addigi bekapcsolások számát írja ki LCD-re, a futás végén pedig 1-et hozzáad a változóhoz és visszaírja az EEPROMba:
Az elején csak azért kell a vizsgálat, mert égetés után biztos FF lesz a 0. bájt és ne azzal kezdje, hogy 255. indítás.

counter = read_EEPROM (0x2100); //Kiolvassuk az EEPROM 0. bájt tartalmát
if (counter == (0xFF)) //Ha ez az érték 255, akkor
{
counter=(0x01); //beállítjuk 1 re
write_eeprom(0x2100,counter);//és beleírjuk az EEPROM 0. bájtjába.
}
printf(LCD_PUTC,"\f %u. INDITAS\n",counter); //LCDR-re az EEPROMban levő szám
....
....

A program végén pedig:

counter++; //A látogatószámot egyel növeljük
write_eeprom(0x2100,counter); //és beírjuk az EEPROMba

Ezt hogy tudom átalakítani, hogy a 0. és 1. bájtot olvassa ki és ha az pl. 05 FF akkor mint 1535 írja ki az LCD-re, majd a végén az EEPROM tartalom egyel növelve 06 00 legyen.
Viszont azt sem tudom, hogy a hexa olvasás itt is fordítottan működik-e, mint általában, tehát FF05 nek olvassuk ?

2. mivel szükös a 16F628a memóriája ezért bizonyos szöveget itt tárolok és innen is olvastatom ki. Így:

#rom 0x2101= {'S','z','i','a',' ','k','i','s','b','a','r','a','t','o','m'}
....
....

lcd_putc("\f"); //képernyőtörlés
for (ee=1; ee<16; ee++) //és az üvözlőszöveg kiiratás
{printf(lcd_putc,"%c", read_eeprom(ee));} //EEPROM(0x2101)-(0x211F)
kesleltet();

Ezt lehet egyszerűbb módszerrel kiolvastatni és kiiratni ? Mert sajnos még így sem fér el programom...

Köszönettel
CCS
(#) sysy válasza ccs hozzászólására (») Feb 17, 2008 /
 
Bocs, hogy beleszólok, de...

read_EEPROM (0x2100);

Mekkora EEPROM van a 16F628-ban, hogy 0x2100 címe is van? Nem próbáltam még így címezni, de szerintem egyszerűbb 0-0x7F-ig címezgetni. Szerintem így kell megcímezni az első byte-ot:

read_eeprom (0x00);
write_eeprom(0x00,counter);

Az EEPROM-ot bytonként lehet írni és olvasni. Tehát ha te 0xFE,0xFF, értékeket teszel le a 00,01 memória címekre, akkor 0xFE,0xFF értéket fogsz kiolvasni. Ez nem Intel micro! Ha 16 bitesen akarod kezelni az értékeket, akkor definiálj egy 16bites változót és annak a HI ill. Lo byte-ját írogasd az egymásutáni címekre. pl.:


long Valtozo; //ebben van a 16 bitesz adat
int Buffer; //ebbe másolod az éppen aktualis byte-ot

Buffer=Valtozo>>8;
write_eeprom(Buffer,0); //felső byte
Buffer=Valtozo;
write_eeprom(Buffer,1); //also byte[/code][/code]


Ha meg kiolvasni akarod a 16 bites adatot, akkor ezt csinálhatod:

  1. Valtozo=read_eeprom(0);   //felső byte kiolvasása
  2.   Valtozo<<=8;                      //elshifteled balra 8 helyiértékkel
  3.   Valtozo+=read_eeprom(1);  //és hozzáadod az also byte-ot



nem tördeli a program sorokat?
sysy
  1.  
(#) ccs válasza sysy hozzászólására (») Feb 17, 2008 /
 
Köszi a választ !

Már előre látom, hogy nagyobb memóriájú PIC-et kell beszereznem. Csak ne volna az az 1000 Ft-os postaköltség

A read_EEPROM (0x2100); és a read_EEPROM (0x00); is ugyanazt az erdményt adja a program futtatásánál. De igazad van, így átláthatóbb.

Nagyobb memória kellene, mert sajnos az általad kínált "LO és HI megoldás" több memóriát fogyaszt, mint amit a jelenlegi programrész. Igaz, most csak 1 bájtot olvasok és írok.

No meg a feltételvizsgálat is akkor egész másként alakulna a 0. és az 1. bájtra, mint jelenleg csak a 0. bájtra.

Mert ugye égetés után alapból FF FF lenne az első 2 bájt.
Indításnál a program megnézné, hogy a 0. és 1. bájt ha FF FF, akkor írja át 01 00-ra és írja ki LCD-re majd a futás végén 1-et hozzáadva írja vissza 02 00-ra.
(#) MPi-c válasza ccs hozzászólására (») Feb 17, 2008 /
 
Idézet:
„Indításnál a program megnézné, hogy a 0. és 1. bájt ha FF FF, akkor írja át 01 00-ra és írja ki LCD-re”

Használd a #ROM pre-processort és akkor programzásnál az eeprom adott címére a kívánt értéket írhatod, tehát lehet ott egyből 0x00 is.
(#) ccs válasza MPi-c hozzászólására (») Feb 17, 2008 /
 
Köszi !

Erre illett volna rájönnöm.

Ugyanis közben megoldottam a 2. kérdésemet is.
Ott is előre írom be az üdvözlőszöveget a #ROMba.
"#rom 0x2100={' ','S','z','i','a',' ','I','Q',' ','b','a','j','n','o','k',' '}"
....

Eddíg a #ROM 00-3F-ig feltöltött szöveg esetén fordításnál 35 bájttal túlléptem a memória méretét, most viszont átszerveztem a ciklusokat és fordításnál 85%-os lett a memória foglaltság.

Eddíg ezt csinálta :

lcd_putc("\f");
for (ee=0; ee<16; ee++)
{printf(lcd_putc,"%c", read_eeprom(ee));}
lcd_putc("\n");
for (ee=16; ee<32; ee++)
{printf(lcd_putc,"%c", read_eeprom(ee));}
kesleltet();

lcd_putc("\f");
for (ee=32; ee<48; ee++)
{printf(lcd_putc,"%c", read_eeprom(ee));}
lcd_putc("\n");
for (ee=48; ee<64; ee++)
{printf(lcd_putc,"%c", read_eeprom(ee));}
kesleltet();

Most pedig:
/////////////////////////////////////////////////
// 2x lesz 2 sorba kiiratva az EEPROM tartalom //
// 0x00 - 0x3F-ig //
// c= a 2 x kétsoros ciklus számlálója //
// cc= ez már csak a kettő sorért felel //
// e= az EEPROM címek számlálója //
// ee= az EEPROM címeket 16-osával olvassuk be //
// ennek az elején már 0 érték van adva //
/////////////////////////////////////////////////

  1. for(c=0; c<2; ++c)               //fő ciklus - 2x lesz...
  2. {                      
  3. lcd_putc("\f");                  //képernyőtörlés
  4.    for(cc=0; cc<2; ++cc)         //azért, hogy majd kettő sort olvasson
  5.     {                            //először pl. 00-0F és 10-1F-ig
  6.      for(e=ee; e<(ee+16); ++e)   //EEPROM bájtok növelése
  7.       {                          //induló bájt ee=0
  8.        printf(lcd_putc,"%c", read_eeprom(e)); //kiratás LCD-re karakteres formában
  9.       }
  10.      lcd_putc("\n");             //újsor
  11.      ee=ee+16;                   //EEPROM bájt 16-al növelve
  12.     }                            //most szalad vissza a második sorért
  13. kesleltet();                     //várunk 5 másodpercet
  14. }                                //vissza a főciklusba, ha még nics teljesítve
(#) MPi-c válasza ccs hozzászólására (») Feb 17, 2008 /
 
A kódot szépen be tudod illeszteni a válaszodba (mint itt) ha a "Kód" gomb megnyomása után megjelenő "[code=c]"-ba a "]" jel elé még beteszel egy "=c"-t (Így "code=c". A végét a "Kód*" gombbal zárhatod.
(#) ccs válasza MPi-c hozzászólására (») Feb 17, 2008 /
 
Köszönöm.
Már úgyis kérdezni akartam, hogy másoknak mitől olyan szépek a kódrészleteik.
Ezentúl így teszek.
(#) sysy hozzászólása Márc 10, 2008 /
 
A CCS fiúk meghozták a 4.068 verziót. Ez már az MPLAB-hoz illesztett eszközök közül az ICD2 debuggert és a PM3 égetőt is kezeli már, a sajátjai mellett.

sysy

Bővebben: Link

Uraim, az a szó, amit önök keresnek: köszönöm.
(#) Norberto válasza sysy hozzászólására (») Márc 10, 2008 /
 
Köszi a nép nevében
(#) whalaky válasza sysy hozzászólására (») Márc 11, 2008 /
 
Hála és köszönet!
(#) ccs válasza sysy hozzászólására (») Márc 11, 2008 /
 
Köszönöm ! :yes:
(#) m2attila válasza sysy hozzászólására (») Márc 11, 2008 /
 
Köszönöm!
(#) deguss válasza sysy hozzászólására (») Márc 16, 2008 /
 
Köszönjük!
(#) brugo hozzászólása Márc 16, 2008 /
 
Sysy akkora KIRÁLY, hogy Ti el se tudjátok képzelni ! A tavaly elküldte nekem CD-én Erdélybe (ami legalább 3vizitdíjába kerűlt) az akkor legmenőbb 4.038-as compilatort minden jóval teletűzdelve .
Lenne 1 kérdésem, ha az utóbbi MPLAB-ok már tartalmazzák a CCS Compilátort akkor még érdemes külön felrakni ?
(#) sysy válasza brugo hozzászólására (») Márc 16, 2008 /
 
Csak egy csökkentett verziót tartalmaz, nem lehet minden PIC családra fordítani vele. Ezért kell installálni a full verziót.

sysy

Hajrá Brugó!
(#) brugo hozzászólása Márc 16, 2008 /
 
Sysy az általad megadott linkről letőltöttem a 4.068-as verziót de telepítés után kéri a CRG file-okat. A Key File Generatorral le is generáltam a3 filet és behúztam őket a C: Program files/PICC alkönyvtárba de semmi változás csak tiltakozik, hogy neki hiányoznak a CRG file-i ?
(#) sysy válasza brugo hozzászólására (») Márc 16, 2008 /
 
Próbáld meg ezeket. Nekem működnek.
(#) brugo hozzászólása Márc 16, 2008 /
 
Nem hiába mondtam, hogy Király vagy !!!Beindult!!!
csak van egy kis szépség hibája , ha ráklikkelek az ikonra megjelenik egy kis Warning üzenet : IDE Installation incomplete. The IDEUTILS must be downloaded and installed from CCS web site ,de ha erre entert adok minden oké és teljes szépségében beindúl a program
Következő: »»   10 / 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