Fórum témák
» Több friss téma |
Fórum » CCS PIC Compiler
2 dolgot nem értek. Miért kell a megszakítást tiltani a megszakítás közben, ha nem kezel le semmit? Nem az lenne a lényeg, hogy érzékelje az összes megszakítási kérelmet? No, meg illik minél gyorsabban lekezelni a megszakítást... A másik, hogy a megszakítás belsejében nem kell törölni, azt majd a főprogramban kéne, ha tényleg lezajlott a visszatérés (és remélhetőleg) az általa okozott dolog dolog kérelmének a kiszolgálása. Én a megszakításban csak egy jelzőbitet szoktam átváltani és főprogramban kezelem le a hozzá tartozó dolgot majd csak ezután törlök. Persze ez viszonyfüggő...
Ez kód csak tesztelés majd lesz a megszakításban is remélem valami! Az érdekes számomra hogy a ccsc mikor belép a megszakításba magától tiltja a globalt, és ha vissza tér belőle akkor engedélyezi is azt.
Esetleg arra van ötleted, hogy az mplab miért ugrik a két megszakítás közé ahogy a képen látszik amit feltettem?
A globalt nem a CCSC tiltja, hanem az hardveresen van tiltva, amikor a programszámláló a megszakítást kiszolgáló rutinra ugrik.
Amúgy azért szöszölhet, mert a valóságban nincs minden megszakításforrás kezelésére külön cím, hanem csak egyetlen van, és abban kell ellenőrizni, hogy mi okozta a megszakítást. A CCSC ezt megcsinálja a háttérben, de meg kell csinálnia, és gondolom az INT_RB van a listában előrébb, és utána ellenőrzi, hogy az EXT_INT is fennáll-e.
Ez lehet amit írtál, mert megfigyeltem hogyha előre írom az EXT_int és utánna az int_rb megszakítást akkor végre sem tudja hajtani!
Ha már ennél a témánál vagyunk én is kipróbáltam az Mplab Sim-et. Eddig még nem használtam soha és csak egyszerűbb programokat írogattam. Most írtam egy egyszerűt és a szimulátorba nem lép be a Timer1-be, de élőbe teljesen jól működik a program. Ezt nem értem hogy miért van.
Akkor az valami hiba lehet valahol, gyanítom, hogy az MPLAB SIM-ben, ha a kontrollerben egyébként jól működik .
Erre is azt gyanítom, hogy az MPLAB és a CCS közötti együttműködés nem hibamentes. Valamelyik nap épp szimuláltam timert az MPLAB SIM-el XC8-at használva fordítónak, azzal szépen belefutott a megszakításba.
Szia megnéztem nálam is a kodot nálam belép jól működik.
Mplab--8.89 Ccsc----5.024
Megszereztem az CCSC-->5.015-öt azzal se jó még :S.
Sziasztok! Egy játék távirányítóját tuningolom fel kicsit, és oda kerültem, hogy az "ö" betüt kellene kiíratnom az LCD-re. A csatolt forráskódban ezt hogyan tudnám megoldani? Jelenleg ö betü helyett a görög nagy éta jeleneik meg az LCD-n. Az LCD meghajtó adatlapja szerint tudja az ö betüt, de mivel ST7066 máshol van.
Szia!
A main void előtt beszúrod ezt: //--------------------------Új karakterek dekrarálása--------------------------- char image[56] = { 4,4,14,1,15,17,15,0, /* 0 dik karakter 'á'*/ 4,4,14,17,31,16,14,0, /* 1 dik karakter 'é'*/ 10,0,14,17,17,17,14,0, /* 2 dik karakter 'ö'*/ 10,14,17,17,17,17,14,0, /* 3 dik karakter 'Ö'*/ 10,10,14,17,17,17,14,0, /* 4 dik karakter 'ő'*/ 4,14,17,17,17,17,14,0, /* 5 dik karakter 'Ó'*/ 10,0,17,17,17,19,13,0 /* 6 dik karakter 'ü'*/ }; A main voidba a konfigután: lcd_init(); //LCD inicializálása delay_ms(100); lcd_send_byte(0,0x40); // LCD belső memória kijelölése for (betu = 0; betu < sizeof(image); betu++)// új kar. letárolása az LCD-ben { lcd_send_byte(1,image[betu]); } printf(lcd_putc, "\f"); A programban pedig így használod a karaktereet: printf(lcd_putc,"H%cm%crs%cklet hiba",4,1,1); //Hőmérséklet hiba
Köszönöm szépen, most végre nem pákósan beszél a programom.
Én úgy oldottam meg, hogy karaktereket kiíró függvényt (ami nálam lcd8_putc névre hallgat) megfejeltem egy kis karakterkód-helyettesítéssel. Bővebben: Link
Sziasztok!
Ismét elkezdtem foglalkozni USB-n történő kommunikációval. A PIC-el egy virtuális soros portot hozok létre és így kommunikálok a számítógéppel. A kapcsolat létre is jön, minden rendben megy, azonban van egy kis problémám, amit már két napja nem tudok megoldani: Amikor egy terminál programmal küldöm az adatot (RealTerm) szépen kezeli a szoftveres Handshake-et, vagyis a 0x11-es és 0x13-as karaktereket és így megközelítőleg fél mbit/s sebességet értem el, azonban többségében nem terminál programon keresztül szeretnék kommunikálni a PIC-el, ezért írtam egy egyszerű C# programot és itt kezdődik a probléma. A C# programban a szoftveres kézrázásra nem reagál a program és a hardveres adatfolyam kezelést pedig a PIC-en nem tudom megvalósítani, vagyis nem tudom módosítani a CTS jelet és így a legnagyobb sebesség amit el tudtam érni 9600 baud volt. Esetleg volt itt közöttetek valaki, aki foglalkozott hasonlóval és tudja a megoldást, hogy felgyorsítsam egy kicsit az adatfolyamot? A válaszokat előre is köszönöm!
Sziasztok!
A kérdés már nem aktuális, rájöttem a megoldásra. A lényeg az egészben, hogy ha egy nagyobb elemszámú tömböt kell átküldeni soros porton, akkor ne egy for ciklussal küldjük ki külön-külön a tömb elemeit, hanem a serial.write függvénynek kell megadni a tömb elemszámát és ilyenkor kezeli az adatfolyamot rendesen. A CCS-ben pedig csak a DCD és a DSR lábakat tudtam billegtetni.
Sziasztok!
Van egy egyszerű kódom mely gyakorlás/próbálkozás céljából csinálgattam. Lényege annyi lenne hogy küld rs232-ön üzenetet és gomb nyomására világít a led s itt is küld egy üzenetet.
A problémám az lenne hogy az üzenetek nem értelmezhető módon jelennek meg. Ami még fontos az uarthoz a pickit2-őt használom.
S még egy olyan kérdésem lenne hogy és kapcsolatot nem jól írtam meg mert ennek a sornak a végrehajtása nem történik meg ( output_toggle(LED1&& LED2&& LED3) Itt úgy gondoltam a gomb lenyomásakor mind a 3 led világítana. De sajnos nem működik! Előre is köszönöm a segítséget! BUÉK! A hozzászólás módosítva: Dec 30, 2014
Szia!
Az ÉS kapcsolat ebben a formában nem is fog úgy működni, ahogy szeretnéd. Három külön sorba kell ezeket leírni és a zárójelbe csak egy LED-et beleírni. A másik, az output_toggle() parancs az aktuális kimenet állapotát változtatja meg, tehát ha magasban volt, GND-re húzza, ha alacsonyban volt tápfeszre emeli. Ebben az esetben így is teljesen jó, hiszen ha nincs lenyomva a gomb, akkor a kimenet ki van kapcsolva és gombnyomásra megváltozik az állapota, tehát a a LED világítani fog. De logikailag szerintem jobb lenne a kimenetek bekapcsolására az output_high() parancs.
Köszönöm szépen! Csak azt hittem hogy lehet ebben ilyet csinálni. Mert Suliba mi mspét tanultunk s abba lehetett ilyet csinálni!
Esetleg Uartra valami ötlet valakinek?
Szia!
Nem tudom, hogy már megfejtetted-e a problémát az UART-al kapcsolatban, de ha még nem, akkor ellenőrizd le, hogy a PIC valóban 20MHz-ről üzemel-e, mellesleg a 20MHz-hez már illik a HS fuse-t használni az XT helyett. Nézd meg, hogy a PicKit programjában megfelelően van-e beállítva a baud rate, illetve, hogy a RX és a TX lábakat jó helyre kötötted-e. Ha ezek is rendben vannak, akkor a PIC tápjához, minél közelebb a lábához tegyél be hidegítőkondikat, mondjuk 100µF + 100nF párost. Győződj meg róla, hogy az MCLR láb nem lóg-e a levegőben, amikor a PicKitet soros kommunikációra használod. Egyelőre ennyi jut eszembe, ha egyik tipp sem jött be, akkor írj és agyalok rajta még egy kicsit.
Szia!
Ki próbáltam mindent amit írtál nem segített. Viszont meg próbáltam azt hogy a programban átírtam a baud = 4800 Pickit 2 Uart toolban pedig véletlen 9600 hagytam és így működik nem tudom mi lehet a baj. Ha pedig a programba írok 9600 akkor az uart tool-ba kell 19200 állítani olyan mintha valami el lenne csúszva de nekem tippem sincs mi lehet a probléma. Próbáltam egy GPS modult a PICkit2-vől az tök jól működőt a 9600 baud rate értéken(Ez volt megadva az adatlapon). Szóval gondolom hogy a programban nem jó valami. Esetleg a kvarcal lenne valami probléma?
Ez tipikus órajel beállítási hiba. A konfig bitek környékén nézz szét.
A kvarc sebessége tuti a forrásban meghatározott?
A kvarcon ez áll: YIC 20.000 J1 és ez mellet a két kondenzátor melyen ez áll: NJ 22
A forrásban definiálva van a kvarc sebessége?
Ha igen akkor 20MHz van be írva? Illetve a soros periféria jól van konfigurálva? Milyen leosztott órajelet kap? Baudrate regiszterben jó érték van beírva? A konfig biteknél HS órajel van kiválasztva? Ebben az irányban keresd a hibát. Én is megszívtam egyszer már. Akkor a fordató viccelt meg. A hozzászólás módosítva: Jan 6, 2015
#use delay(clock = 20000000)
Így lenn a helyes 1db "0" kihagytál. Szerintem!! Ha nem javul meg írd meg.
Mi az oka annak, hogy nem ezt a formátumot használod?:
#use delay(clock=20MHz)
feco93 nevű fórumtárs használja ezt a programot.
Én csak segíteni próbálok neki |
Bejelentkezés
Hirdetés |