Fórum témák
» Több friss téma |
Fórum » CCS PIC Compiler
Idézet: „Hehe... ez igaz. Ezt az aranyköpést néha kölcsönkérhetem?” Természetesen ![]()
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.....
"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
Könyörgöm valaki segítsen!
Megpróbáltam a hw uartot életrekelteni, de úgy tűnik esélyem nincs rá.
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! ![]()
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.
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.
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); }
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...
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.
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:
sysy: a programban bennemaradt a régi kód,
![]() két soros port használata, az egyik a hw usart, a másik szoftveres 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.
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
beállítással próbálkoztam,mivel a kvarc 20MHz-es. ![]() ![]() ![]() Miután beállítottam:
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! ![]()
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
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:
nem tördeli a program sorokat? sysy
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. 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.
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 // /////////////////////////////////////////////////
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.
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.
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.
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 ?
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ó!
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 ?
Próbáld meg ezeket. Nekem működnek.
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 |
Bejelentkezés
Hirdetés |