Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Nézz valami C nyelvről szóló anyagot, a C nyelv az mindenfelé C nyelv. A szintaktikája ugyanaz PC-n és kontrolleren is. Aztán nézz példaprogramokat, hogy lásd, hogy épül fel egy PIC-re írt C program.
Koszi, a masodik lett volna a nyero, de kozben kiderult, hogy a helyzet bonyolultabb (kevert db es dw), igy egyenkent kell paroztatnom oket...
A PicBasic Pro engem is akkor hagyott benne a lekvárban, mikor mér majdnem teljesen elkészült a projektem. Ekkor álltam át a CCS C-re. Nem kell megijedni tőle, könnyen megtanulható. Nagyon jó olvasni való Topi cikksorozata, nekem is sokat segített. Az anyagokat délutánra előkerítem, addig valahogy bírjátok ki!
Helló Szilva.
Köszönöm a válaszodat. Igen, én is próbálkozta az adatlap alapján a CMCON állításával, de valószínűleg (biztosan) rosszat állítottam. Most már tudom, hogy mit miért. Köszönettel
Helló Szilva.
Tökéletesen működik amit leírtál. Köszönöm
Sziasztok!
Segítséget kérek! Megépítettem egy 16f628-as pic-kel előgyújtás szabályozót, ladába. Van hozzá program is, de nem 4 ütemű negy hengereshez, szerintem, mivel ha pörgetem az autó durrogósan jár. Szóval abban kérek segítséget, mit írjak át a progiban, hogy korrekt legyen a késleltetés, vagy csak az időértéken kellene variálni, esetleg osztást állítani a megszakítási időnek..., mivel kezdő vagyok ebben a témában nincs ötletem, nem látom át teljesen a progit. Csatolom az asm-et és előre is köszi minden észrevételt!
Szia!
A végén találhatók táblázatok (RETLW xxx), valószínűleg ezek között az értékek között válogat a bemeneti jellemző(k) alapján. Azt, hogy konkrétan milyen értékeket kell beírni csak konkrét adatlap vagy kísérletezgetéssel lehet kitalálni! Az asm-et mellékelted, de kapcsolási rajzot nem, ezért például olyan is előfordulhat, hogy nem jó a PIC órajelének a sebessége, azaz az általad alkalmazott és a tervezett órajel eltér egymástól! Én úgy látom, hogy ennek a programnak az áttervezése bonyolultabb, mint egy újnak a megírása, ha nem tudjuk a "körítést"! Steve
Ha jol latom ez lenne az (Google translatorral angolra forditva mert sajnos maskepp nem ertem meg - mondjuk igy is le kell forditani az anglirus-rol angolra pl ground helyett land )
Ha jol latom irkalja, hogy hogyan lehet parameterezgetni, pl ott van egy parameter tabla szamolo alkalmazas aminek az outputjat csak be kell tenni az ingnition.asm file-ba. Remelem ez segit Tamas
Szia!
Küldöm a kapcsolási rajzot, talán igy érthetőbb. Az órajelem 4Mhz, ez biztos! A táblázati értékekkel lehetne kisérletezni, de szerintem az asm. 2 ütemű motorhoz íródott, vagyis egy fordulatra egy bemenő jel jut egy henger esetén, tahát 4 ütemű 4 hengeresnél két jel jut 1 fordulatra, ha minden igaz. Ezért amikor fordulat nekem 3000, a pic azt 6000-nek gondolja és rossz értéket állít, de lehet hogy nem és tényleg rossz a program Ha a sejtésem jó talán a progiban az értékek átírásával meg lehetne ezt oldani? Tanácstalan vagyok
Idézet: „és valahogy meg tudnád velem osztani?” Majd valahogy megpróbálom. Csak a fájl kb. 100MB, otthonról meg csak 64k feltöltésem van. Lesz egy 4-5 óra, mire felszenvedem valahová.
torrent? szerintem tobbunket is erdekelne, es igy gyorsaban tudna "elszaporodni" mindazok kozt akit erdekel...
Köszönöm, mindig tanul az ember, én nekiáltam oroszul fordítgatni ,mondjuk angolból sem vagyok egy lángész.
Szóval itt a program, beállítom a felső értéket "Holla" 60. A mkc időt hagyom 60-on Az alsó értéket állítom 700-ra majd megnyomom a "razcsitaty" gombot, majd jobbra előtünnek az értékek. Tulajdonképpen a "tablicsa" azaz az első oszlopot kellene beírnom az asm egyik táblázatába pl a default-ba?
Hat az oldalon azt olvasom, hogy a 60 ketutemuekre valo, es 30 kell a negyre... Tobbi kerdesre nem tudok valaszolni, mert en ugy ertettem ez general valami asm-be kozvetlen beszurhato kodreszletet - hogy miert nem voltak kepesek kulon file-ba generalni es egy #include-dal egyszeruen behuzni az rejtely szamomra
Mindegy, ez nem is annyira PIC kerdes mar, szoval nem tudom i fog tudni valaszolni a kerdesre, mindenesetre jo kiserletezest es sok sikert hozza!
Helló Orgiusz.
Azt, hogy hány szikrát ad a gyújtás, az függ attól is hogy hány mágnes halad el a hall elem elött egy fordulat alatt. Illetve, hogy hol vannak a mágnesek (a főtengelyen vagy máshol) A Zsigulinál ha jól saccolom, 2:1 áttétel van az elosztó és a főtengely között. (2 szikra/fordulat) . Tehát ügyesen kell kikalkulálni az "értékeket", mert itt a szikraszám növekedést, nem fordulatszám növekedése okozza, hanem a hengerek számának a növekedése. Ha nem titkos, feldobhatnád ide a 'kalkulátort'. Hátha kell egyszer gyújtást csinálni. Üdv.
Helló Mindenkinek.
A következő kérdéseim lennének. Macron belülre tettem egy feltételes ugrást,és a fordító tiltakozik (MPlab) Ezt nem szabad tennem? Másik: Egy btfsc utasítás után jön a regiszter neve, majd vessző, és a bit száma. Ez utóbbi lehet egy általam definiált változó is? (btfsc valami,sajatvaltozo) Egy macroban müködött, de az én programomban nem. Köszönettel.
Sendi,
Ha valami hibaval tiltakozik az MPLAB akkor azert jo lenne tudni a hibat is - meg persze nem artana a kodot is beidezni vagy csatolni hogy legyen valami fogalm mirol is van szo... En amire tippelnek, hogy van egy cimked, es a makrot tobb helyrol hasznalod igy a cimken parazik. Ez esetben a makron belul meg kell mondanod neki, hogy az adott cimke lokalis a makron belul, tehat:
A masik, meg, hogy a makro parameteret ugy kell felfogni mint egy behelyettesitest - vegulis a makro az egy behelyettesites. Tehat mikor van a fenti 'akarmi' nevu makrod, es utana 3x egymas ala irod, hogy 'akarmi' a forrasban, akkor 3x ugyanazt a kodreszletet beteszi arra a helyre. Vegulis van egy elofeldolgozo, ami forditas elott ezt megcsinalja es a forditonak mar az igy elokeszitett kodot adja at. Namost makro parameter ennek megfeleloen csak egy behelyettesites, mintha kezzel beirtad volna, igy a makro parameterkent atadott dolgok nem minosulnek valtozonak a fordito szempontjabol. Pl:
Itt az a kovetkezo kod alakul ki forditas elott (tehat az elofeldolgozo vagy preprocessor utan)
Ezutan a fordito leforditja ezt... tehat ugyanugy fix erteked van a vesszu utan... Ha valtozobol akarod ezt a feltetelt megcsinalni akkor maskepp kell hozza allni, pl XOR-al vagy AND-el le lehet tesztelni a bitet:
Szoval itt a "valt"-ban van pl b'00010000', igy a 4. bitet teszteled le, ha az 0 akkor a Z flag beall... Es akkor igy tobb bitet is lehet figyelni stb stb stb...
Helló Trudnai
Igen, a fordító a cimke ellen tiltakozott. Ez pedig itt a második kérdés prg részlete: nemleptetes movlw B'1000' btfsc buffF,latchnum iorlw 0x1 btfsc buffB,latchnum iorlw 0x2 movwf PORTC incf latchnum movfw latchnum sublw d'8' btfsc STATUS,Z goto latch_done movfw latchnum goto Latchsorszam A latchnum-t változtatom (növelem) de a iorlw-t mindig átugorja, hiába van '1' -s a latchnum-nak megfelelő helyen a bufffF és a buffB változóban. (azaz néha nem ugorja át, de nem tudom, hogy mitől függ) Köszönettel
Helló Trudnai.
Úgy tünik, a "local" dolgok bejöttek, már nem tiltakozik az MPLab. Egy macrót nem tudok megnézni a simulátorban? Nekem mindig átugorja. Köszönöm a segítségedet.
Hat ez igy nem is mukodhet, csak fix bit cimet lehet a bit tesztelonek atadni - tehat ami forditasi ido alatt kiertekelodhet.
Ahogy irtam ezt aritmetikaval kell megvalositani, tehat a Te esetedben:
Ha gpuitils-t feltelepited es azzal forditasz, akkor annak be lehet allitani, hogy a makrokat is lehessen szimulalni. Amugy pedig nyisd meg a disassembly ablakot, es ott ha beallitod, hogy szimbolumokat is lasd akkr viszonylag jol lehet debuggolni MPASM-mel forditva is.
Helló Trudnai.
Köszönöm, köszönöm, köszönöm.
Ehh, tettem bele egy oriasi hibat, kivancsi vagyok Ti is eszre veszitek-e Ill ha mas hibat talaltok az is jo pont
Itt van a Dr. Kónya László - PIC mikrovezérlők alkalmazástechnikája könyv pdf-ben. Ez az első kiadás.
http://potyo.info/konya-pic.pdf
Koszi Potyo,
Belekerult egy kis idore mire le birtam szedni a rapidshare-rol Jo konyvnek tunik igy elso ranezesre. Koszi megegyszer, Tamas
Szia Sendi!
Teljes mértékig jól látod, a ladánál 2 szikra egy fordulat, vagyis ha jól számolok 1000 rpm-nél 30ms 2 jel között eltelt idő. Csak azt nem értem a TMR_VALUE értéket,hogy számoljam, vagy az mihez viszonyított érték. A .0 és a .239 240rpm-enkénti léptetés, de mi van akkor ha én 400rpm-enként szeretnék léptetni? Szóval matek, matekolok A kalkulátor publikus csak ha feltelepíted mivel orosz kérdőjelek és ákombákomok a betűk, de a képen látszik hogyan kellene kinéznie. a web címe ahonnan letölthető, http://www.twowheel.nm.ru/index.htm ,ill csatolom Azért köszönök mindent. Lehet, hogy igaza van trudnainak és nem találok válasz, marad a kisérletezgetés és nagyon sok idő. De nem adom fel! Üdv:Á.
Üdv mindenkinek!
Építgetés közbe felfigyeltem arra, hogy azonos kvarcoknál néha eltér a kondik értéke (30pf, 33pf, 20pf...). Mitől függ ez?
Sziasztok!
Kérdésem lenne, hogy egy megszakítás lefutása után hol fog folytatódni a program futása? Onnét ahonnan a megszakítás történt? (én így tudom, lehet hogy rosszul...) Azt hogy lehet megoldani hogy a "RETFIE' után egy általam meghatározott résztől fusson a program? Mert ha a RETFIE előtt teszek be egy GOTO t akkor kiléptem a megszakításból. Ha helyette akkor meg nem műkodik a megszakítás. (ezt már csak kínomban probáltam ki, tudtam hogy nem lesz jó... ) Hogyan lehet ezt megoldani? Idézet: „Mert ha a RETFIE előtt teszek be egy GOTO t akkor kiléptem a megszakításból.” A RETFIE arra való, hogy visszatöltse a stack tartalmából a visszatérés címét, illetve újraengedélyezi a globális megszakításokat. Namost ha te ezelőtt GOTO-val "kilépsz", akkor a további megszakítások nem fognak működni, hacsak nem engedélyezed külön ismét a megszakításokat... legalábbis én így gondolom. Miért kellene, hogy meghatározott programrészhez térjen vissza? Amúgy meg lehet oldani tutira. Egyszerűen a megszakítást egy "majdnem végtelen" ciklussal oldod meg, persze csak ha a programod engedi. A megszakítás megtörténtekor ugye a megszakításos programrész fut le, amiben pl. egy változót átállítasz. Ennek a változónak a változását figyeled a "majdnem végtelen" ciklusban. Ha megváltozott (ami a megszakítás lefutását jelenti), akkor feltételes ugrás(oka)t hajthatsz végre, oda ugrathatod a programodat, ahova akarod lényegében.
Szia Menyus,
Igen, onnan folytatodik ahol megszakadt, epp ez az ertelme a megszakitasnak. GOTO-t siman hasznalhatsz megszakitasbol, csak utana ne felejts el vissza terni es rendesen kilepni a megszakitas rutinbol. Sokszor CALL-t hasznalnak, es a rutin ugye vissza ter a RETURN vagy RETLW utan a megszakitas kezelobe, ahol majd elgevzed a kontextus vissza allitasat es RETFIE-vel szepen kilepsz.. Nagyon leegyserusitve, inkabb csak pseudo kodnak tekintve ezt a keretet:
Ha nem tudod van nem lehet lekezelni a megszakitaskor azt amit kell/szeretnel csinalni (pl mert tul hsszu ideig tartana), akkor egy flaget be kell allitani ami alapjan a megszakitas vissza terese utan a foprogram el tud agazni. Tehat a fo programod ugye ciklusban var valahol vagy ciklusban valamit csinalgat, igy periodikusan le tudod kerdezni az esemeny bekovetkezett-e mar amire varsz. Ha igen akkor ott elagazol. Nagyon leegyserusitve, inkabb csak pseudo kodnak tekintve ezt a keretet:
Ezzel az a gond, hogy sok esetben interrupt nelkul is meg lehet ezt a modszert valositani, es akkor felesleges meg kulon interruptozgatni, annak a kontextus menteset/visszaallitasat elszenvedni, az abban levo osszehasonlitgatasokat vegig progetni stb. |
Bejelentkezés
Hirdetés |