Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Köszi a választ! Igen ismerem a delays.h hadert, de nekem nem tetszenek, mert ciklus a "mértékegység".
Aztán sok olyan rövid időzítés kéne, aminél továbbtart a függvény meghívása. Kipróbáltam a \ karaktert, és műkszik. érdekes, hogy nem lehet elválsztani a do és a { karaktert, azoknak egy sorba kell kerülniük, szemben a rendes kóddal, ahol egymás alá is kerülhetnek. Tehát így nem fordul:
csak így:
Gondoltam én is a Wait_ms(ms) megoldáson, már használtam hasonló "macrot", de igazából alig kell néhány idő, amit így is meg lehet oldani. Mégegyszer köszi a segítséget! Ja igen, a NOP. Így oldottam meg:
Az OPTION regiszter RBPU(7-es) bitjét kell 0-ba tenned. Nem tudom milyen fordítót használsz...
MCLR-t? Az nem a PORTB-n van! (felhúzó ellenállás, csak a portb--n van! ADATLAP!)
Ez még asm-ban is elég húzós, ha nincs PWM modul(itt van, de annak nem a B0 a kimeneti lába)!
Ha megszakításban akarnád ezt megoldani, akkor 20, ill 30 uS -onként kéne megszakítást generálnod. A láb lekezelése is idő és a külső programrészek is időt igényelnek. Szerintem ez C-ben semmiképpen(esetleg asm betétekkel), asm-ban pedig igencsak egyedi programmal oldható meg. számoljunk. (nem tudom milyen az oszcid, de 20MHz ide igencsak szükséges). Tehát 20MHz/4 => 200nS Ami azt jelenti, hogy 20uS-be 100 programlépés fér bele. Ha rendesen lekezeled a megszakítás mentéseit, az elvesz ~18 lépést, ha megoldod 30 lépésben a láb lekezelését, akkor 40 lépés marad a többi programrészre. Ez elveszi az egész időd 60%-át. Érdemesebb inkább a PWM modullal ismerkedni...
Üdv!
2 külön problémáról van szó, a lábak felhúzása kilőve, marad az ellenállás. A másiknál 20 MHz es az oszci (kvarc), az egész program csak anyit csinálna, hogy kiköp 20KHz et, egy légmagos trafót akarok meghajtani vele (propeller clock hoz hasonlót (pri 150, sec 100 menet 0,3 as huzal), egy feten keresztül.. A progi azért lenne jó c be mert ahoz többet értek mint az asm hoz (ha jóa freki akkor a progit át szeretném írni egy 12f629 be. Idézet: „A progi azért lenne jó c be mert ahoz többet értek mint az asm hoz” Most mondjam azt, hogy akkor itt az alkalom megtanulni az asm-et? Ne használd a C beépített cuccait, hanem vedd elő az adatlapot a Timer résznél, és állítsd be az előosztókat, kezdőértéket, stb. a timerhez. A megszakításban ellentétesre fordítod a láb állapotát (XOR művelettel), majd a láb állapotától függ, hogy mennyi lesz a Timer következő kezdőértéke. Ha jól sejtem, itt nem kritikus sem a pontos frekvencia, sem a pontos kitöltési tényező, csak úgy kb. legyen annyi. Amúgy miért nem csinálod mindjárt a 12F629-en? Ez a megírom egyikre, majd átírom másikra, nem szokott jó módszer lenni.
Üdv!
Azért kell 2 fajta pic be mert a freki 2 helyre is kell ![]() Az adatlapot néztem de nem lettem okosabb asm ügybe. Az asm nak neki fogok állni de kevés az időm ![]() Először valami ilyesmire gondoltam c be: delay output high delay output low a delayokat viszont hiába állítgattam, max 2,5V ot sikerült kicsikarni a tekercsből, a propeller clockhoz való progival simán megy 10V is.
Miért nem használsz ilyen helyre 555-öt pl...?
Üdv!
Próbáltam de nem vált be. A freki belövésénél nemárt ha gyorsan tudok rajta módosítani (egyszerűbb átírni a progit mint másik kondit és ellenállást beforrasztani). Idézet: „(egyszerűbb átírni a progit mint másik kondit és ellenállást beforrasztani).” Nem akarok gonoszkodni, de mi egyszerűbb? ![]()
Mondjuk ez egy érdekes jelenség, de én is egy rakás helyre teszek kontrollert, ahová épp nem lenne lényeges. Ha kicsi a hely, akkor általában jobban el lehet férni egy 78L05+pici kontrollerrel, mint egy analóg áramkörrel. Pl. autóba az ablaktörlő relé helyére vagy a belső világításhoz kontrollert raktam.
Igen, de Te meg tudod bele írni a progit, és neked tényleg egyszerűbb. (erről írtam, hogy nem akarok gonoszkodni.)
Hogy ne csak gonoszkodjak, csatoltam egy megoldást asm-ban. (teljes project, csak csomagold ki és szimuláld le a működését, elvileg működik)
Még annyit, hogy ez tényleg csak a frekit csinálja meg, semmi mást nem írhatsz hozzá, mert az egész bukik! Természetesen a frekit és a kitöltést módosíthatod a várakozási rutinokban lévő értékek módosításával.
Próbálkoztam én is , de a lentebb említett dolog, a delayos nem akar menni.
Ami a helyet illeti, az van bőven, viszont ha lehet 555 helyett inkább a pic mellett matadok, ebből az esetből is tudok tanulni, ha mást nem akkor azt, hogy delay és high / low utasításokkal nem fog menni :S De ha nem azzal kellene akkor mivel? Már végigpróbáltam vagy 40 variációt de egyikkel se ment 3V fölé a fesz ![]() Idézet: „ha mást nem akkor azt, hogy delay és high / low utasításokkal nem fog menni :S” Igen, azt megtanulhatod belőle, hogy a delay tipusú dolgokat el kell felejteni (vagy legalábbis kicsit nagyobb körültekintéssel kell használni, de szinte minden feladat megoldható enélkül is). Használd a Timert, az van ilyen célra kitalálva. Hogy ne írjak kész kódot, mert akkor abból nem tanulsz, viszont segítsek valamit, itt a módszer, hogyan kellene csinálni:
Szia,
Részben értem csak amit írsz. Annyit tudok, hogy nincs a 4550-en bootloader, PicKit-tel programoztam fel, tehát elvileg csak az a program van rajta, amit én ráteszek. Az "elkülönített programrész" dolgában kérlek homályosíts fel! ![]()
Szia,
Az Mplab 8.0-ás verziójú, ez is ismeri a 4550-et. Azt, hogy rossz helyre mutat a pointer, azt meg onnan tudom, hogy - működő debugger hiányában - úgy tesztelem az értékét, hogy kiküldöm egy LCD-re (amúgyis azt fejlesztem). A kiírás működik, és látszik, hogy egy katyvasz a tartalma... :S És mint említettem, Mplab Sim-mel megy, élesben a PIC-en nem... ha van bármi ötleted, köszönöm előre is!
Még annyit hozzáteszek, hogy természetesen nem "nyersen" küldöm az integer értékét karakterként az LCD-re, mert az kijelölne egy akármilyen karaktert, hanem természetesen előbb 0x30-at hozzáadok (onnan indulnak az ASCII számok), és így 0-9 közötti értékre tudom tesztelni. De ha stringgé alakítom itoa vagy sprintf segítségével, úgy is katyvasz lesz belőle a kijelzőn, élesben.
Üdv!
A hex működik, van elég fesz. Gondoltam meglesem a progit, megnyitottam mplabbal és mindenféle átírás nélkül próbáltam fordítani, eredményt csatolom mert ha beillesztem akkor fél oldal ![]() Elég ritkán használok mplab ot (elég negy baj, de magyar leírást amin el lehetne sajátítíni a használatát nem találtam). Mi nem stimmel? Hogy tudom orvosolni?
Bocsi, rosszul fogalmaztam. Tehát pont arra gondltam, hogy csak a Te programod van-e a PIC-ben, vagy más firmware mellé teszed kiegészítésként.
Szóval akkor ha nem titok, csatold fel a forrást, hátha többet látunk...
Az elérési út hosszabb mint 64 karakter! Helyezd át a projectet rövidebb elérésre!
Egyébként csak 1 hiba van, a többi csak üzenet, ami arra vonatkozik, hogy néhány regiszter nem a 0-s bankban van.
Szuper! Akkor most nincs más hátra, mint megérteni mi miért van(nagyon egyszerű!), és a vázból kiindulva más programokat is fel tudsz építeni. Az asm parancsokat szépen részletezve megtalálod az adatlapban. Ha engem kérdezel az asm egyszerűbben kezelhető, mint bármelyik C. Persze ezzel lehet, hogy nem mindenki ért egyet.
Az tény, hogy asm ban nincs amit ne lehetne megoldani, persze a parancsok ismeretével és kellő tapasztalattal
![]() A C nekem átláthatóbbnak tűnik, nyilván mert senki nem magyarázta el, írta le érthetően az asm ot, legalábbis nagyon a legelejét nem. Itt arra gondolok, hogy pl pascalnál az elején le volt írva, hogy uses crt, graph... al kezdődik, utánna változók, konstansok deklarálása, begin end. Aztán jöttek az egyes parancsok, mit csinálnak, mire alkalmasak. Na ilyen leírást nem találok az asm hoz pedig nagyon jó lenne. Amiket találtam azok a"fél szavakból is megérted" kategória. .... mov al valami dx izé ... de, hogy mi micsoda és mire kell azt sehol ![]()
Mint emítettem adatlapban benne van az összes, példákkal. Ezek annyira egyszerű utasítások, amiket nem kell elmagyarázni külön. Elég, ha megnézed mi mit okoz és mivel. És ezek az infók ott vannak...
pl. ezen mit kéne magyarázni, hogy: MOVLW 0x30 MOVWF PORTB ??? vagy: BSF PORTB,2 ???
Megépítettem az oshon féle pic égetőt. Ráadtam a stabil 5/13,2 voltot és mind a két led világított. Ez normális vagy valami nem ok? Pic-et még nem próbáltam vele programozni.
Szia Seele,
C18-ban fejleszted, ugye? Tudod csatolni a forrast? Ha azt eppen nem amin dolgozol akkor csinalj egy nyulfarknyi demot ami csak a problemara koncentral (tehat hogy ha jol ertem a fuggveny parameter a hiba, akkor csak ez legyen benne mint teszt, ellenorizd le, hogy a teszt progi is produkalja-e ugyanazt a hibat es ha igen akkor azt csatold). Igy Levegobe kapkodva kb fogalmam sincs mi okozatja a problemat, hacsak nem az amit watt fejteget, hogy valamivel ossze linkeled ami ossze zavarja, vagy bootloaderes akarmid van ami osszze zavarja ezt az egeszet.
Nem, a Pascal nem "uses crt,graph" -al kezdodik hanem a Program kulcsszoval. Uses crt a Pascalban nem is letezik, az csak a Turbo Pascalban el - Latod? Nem is olyan egyszeru
![]() A Topi fele cikkben en szerintem azert le van ez irva, azonkivul van angol nyelvu leiras a legeslegelejerol - en is igy tanultam meg. Ha angolt olvasod akkor meg gyakorlod is a nyelvet amit kesobb kamatoztatni tudsz az adatlapok bongeszesenel. Asm-nel ahany CPU/MCU annyi fajta utasitaskeszlet, persze lehetnek hasonlo utasitaskeszletu dolgok is. Mint Pascal-ban is, ahany Pascal implementacio annyi fajta mod ahogy mukodik. Amugy ha Kinaba akarsz gyalogolni az ut baromi hosszu, es akkor vagy megteszed az elso lepest, es egy ido utan oda ersz, vagy allandoan sirankozol milyen hosszu az ut es el sem indulsz. Ha nem akarod megtanulni az asm-et inkabb mondd azt baromira nem fulik hozza a fogad, de ne hivatkozz arra, hogy nincs ilyenre irodalom. Ennyit a mai napi papolasomrol ![]() ![]() |
Bejelentkezés
Hirdetés |