Fórum témák
» Több friss téma |
Fórum » CCS PIC Compiler
Nem tudom, de nálam a
jól működik.
Én is ezt vártam volna tőle, de nem....
Ez így ránézésre ugyan az.....
A dolog "megoldódni" látszik, bár érteni nem értem.
Ha az RB_isr() függvény - ez ébreszti a pic-et - nem tartalmaz semmi értelmes utasítást, egyszerűen a sleep() sem hajtódik végre. Ha csak egy x = input_b() van benne már megy, ha csak egy sima nop vagy az input_b() van értékadás nélkül, már nem megy. Ez valami CCS feature?
Én arra tippelek,hogy a sleep előtt bejön egy RB megszakítás,és a lekezelés hiánya miatt filyamatosan felébreszti a picet (a megszakításjelzö logika folyamatosan dolgozik,tehát a dolog még az elött megtörténhet,hogy engedélyezed a megszakítást,csak lekezelés hiányában ott marad). Az RB megszakításnál ki kell olvasnod a portot,nem elég csak az rbif bitet törölni. Adatlapot nézd meg. Az értékadás nélküli pedig vélhetöen azért nem müködik,mert a fordító kioptimalizálja azt a sort.
Sziasztok. SPI-vel "szenvedek"
valahol hibázok de nem rom hol Az sck kimeneten nem jön meg az órajel, és az sdo-n az adatot sem látom. íme a kód
Láttok benne valamit amit nem jól csinálok? Segítségeteket köszönöm
Béééééééna vagyok nagy volt az idő az adatok közt még jó hogy nem láttam......
így már látom a mozgást
Amit viszont el kellene magyaráznotok mert adatlapból, manualbol nem jövök rá, hogy mi a különbség az SPI_setupra vonatkozóan az
Idézet: és SPI_XMIT_L_TO_H[/quote] között. „SPI_L_TO_H”
Pedig az adatlapbol derul ki. Azt jelenti, hogy a bemenetbol melyik elnel veszi a mintat, es hogy az adasnal melyik eńnel ervenyes a kimeno adat.
Igen értem ott rontottam, hogy az elején csak "SPI_L_TO_H" definiáltam és ez a vételre vonatkozik mivel adni akartam "SPI_XMIT_L_TO_H? " is kell........
Még lenne kérdésem, hogyan csinálnátok meg a következőt ccsc-vel: mcp4802-vel akarok feszültségeket létrehozni. 16biten kell címezni az eszközt. A feszültséget amit kiad azt a középső 8bit határozza meg (pontosabban még bele szól egy bit a 13. ez lényegtelen) tehát szeretném az eszközt címezni 2x8 bittel. valahogyan maszkolnom kellene de ötletem sincs... azt kellene elérnem hogy van egy 8bites értékem és ezt 2 nyolc bites értékkel akarom elküldeni mégpedig úgy hogy az első elküldött érték alsó 4bitje és a második elküldött érték felső 8bitje hordozza a 8bites adatot. Na ezt jól megbonyolítottam
Ezt sikerült összehoznom működik:
A maszkolásra nem tudom van-e egyszerűbb megoldás?
Struct es union tipusu valtozokkal lehet ilyen varazslasokat csinalni.
Amit írtam nem is jó mert az lsb-t 4bittel tolni kell balra ajjaj asm-ben egyszerűbb lenne.....
Probald meg az union es a struct hasznalatat. Egy pelda (nem a Te eseted)
Ebben az esetben egy unsigned int16 tipusu valtozot hoztunk letre, amiben van 3 kulonbozo hosszusagu valtozo, ugymint 1 8 bites, 1 7 bites, es 1 1 bites valtozo (16 bit osszesen). A belso valtozok kulon irhatok olvashatok, mig az egesz union hasznalhato ( EEPROMba iras SPI-n kuldes etc..) mint egy int 16. Valami ilyesmit kellene csinalnod, es nem kell akkor shiftelni, maszkolni es egyeb varazslasokat csinalni a programban, hanem sima ertekadassal megoldhato a dolog. Tisztabb, szarazabb erzes.
Jól hangzik de nem nagyon tudom átültetni az én esetemre még csak megérteni sem.....
Shift operátor C-ben is van << balra; >> jobbra.
Pl.:
Akkor marad ez a megoldás, aztán majd áttérek az elegánsabbra ha fel bírom fogni
pedig nem igen nehez, csak a valtozok neveit es a hosszusagot kell atirni.
Ugy kepzeld el, hogy a struktura megegyezik bitrol bitre a regiszter felepitesevel. Viszont resze az unionnak. Amikor valtoztatsz valamit az union int16 ertekenek a bitjeit valtoztatod.
Biztos, hogy jó így a szintaktika ahogy leírtad nekem? Mert sehogy sem bírom megetetni a fordítóval.
Arra gondolok, hogy a CCS esetleg nem szereti az anonim struktúrákat az unionban. Próbáld meg így
Vagy ha nem jó, akkor másold ide a hibaüzenetet.
Nem tudom mi a hibauzenet, de nalam eleg sok ilyen tipusu union szokott elofordulni, es a fordito meg nem vinnyogott sohasem.
Hmm nem akar össze jönni inkább mindent mutatok.
Hiba üzenetek:
Sziasztok! Akinek még nincs meg CCS4.130 verzió. Üdv.
http://www.4shared.com/zip/6i9w_nzm/PCWHDv4130.html
Mondjuk a write to MCP4802 elé nem ártana //-t tenni, hogy azt kommentnek vegye a fordító.
Igen,de sajnos utána is marad a hiba rengetegem...
Na megvan. Nem akarja a Byte valtozot kettevagni. Tehat byte hatarra kell esnie a 8 bites valtozonak. Kulonben ejnye-bejnye. Itt a megoldas:
Fordul, mukodik. Ja es a helyen van minden bit. (elvileg)
Ezen már tudok csmegézni nagyon köszönöm
![]() A "da_cntrw" az milyen típusú változó hogyan jön a képbe?
Union. Elotte deklaraltad. Ja termeszetesen int16. Mert az union torzs valtozoja int16. De tedd be a Watch ablakba, es mindjart latszik.
|
Bejelentkezés
Hirdetés |




