Fórum témák
» Több friss téma |
Szia!
Az nem lesz piskóta, itt egy kis olvasmány: Bővebben: Link. A hozzászólás módosítva: Jún 13, 2014
Sziasztok!
Ismét sikerült elakadnom az én kis projectemben, ráadásul igen érdekes módon. A mellékelt kódban a pár hozzászólassal ezelőtt leírt módon, az RB4 láb által onchange-re létrehozott interrupttal mérek egy távirányító vevőjéből jövő négyszög jelet és ezt igyekszem feldolgozni. Van egy high és egy low változóm, ahova a négyszögjel egy aktuális "periódusának" a magas és alacsony állapotainak az időtartamát rögzítem. (lásd:interrupt fgv.) Csak próba képpen, hogy mégis mekkora értékeket vesz fel a low/high hányados, gondoltam megkérem a pic-et, hogy erre a hányadosra (illetve ennek 20-szorosára) állítsa be a pic PWM modulját. Gyönyörűen működött is a dolog, oscilloscope-pal mértem a pwm jelet és tényleg a várhoz nagyon közeli értékeket mértem. Ekkor a távirányítón elcsavartam a kereket előre (ekkor maga az adóból kijövő jel kitöltöttsége nő, 11%-ról kb 15%-ra). Ennek hatására a low/high hányados csökkent és a kimeneti pwm jelem is gyönyörűen (átmenet nélkül!!) nekiállt csökkenni. Ha visszaengedtem alapállásba a kereket, akkor is szépen visszaállt a pwm alaphelyzetbe, viszont ha hátrafele kezdtem tekerni egyáltalán semmit nem csinált. Megmértem az adóvevőből kijövő jelet és az rendesen változik (11%-os kitöltöttségtől 7% körülig), tehát valaminek történnie kéne, de egyáltalán semmi nem történik, marad a pwm ugyanabban az állapotban, mint a kerék tekerése nélkül. Ennek mi lehet az oka? Ötletem sincs. Köszönöm! És akkor a szóbanforgó kód:
Debug mit mutat?
Ott sem változik semmi? Nem lehet, hogy a 20-al való szorzás kevés? (ez csak tipp) A kétszintű megszakítás biztos jól van megadva? (alacsony és magas) A hozzászólás módosítva: Jún 14, 2014
Újabb kérdés sebességmérővel kapcsolatban: az egyik összetevő amivel számolni kellene a kerék kerülete, ami nem egész szám. Hogyan lehet ezt assemblyben megoldani?
Hát ne cm -ben számolj, hanem mm-ben. Az csak elég pontos már ahhoz, hogy ne kelljen törteket használnod.
Sziasztok.
Segítségetekre lenne szükségem, méretezésben. Adott egy PIC18F2523, 8MHz-es órajellel, PWM periódus idő 512 usec., frekvencia:1,953125 kHz. Egy áramgenerátort szeretnék vele meghajtani úgy, hogy a PWM kimenetet "simítani" kell, 0-5VDC-re. A kitöltési tényező változtatásával szeretném a kimeneti "DC"jelet beállítani. A csatolt rajzon az R20-C20 tagok értékére lenne szükségem. Jelen pillanatban ott tartok, hogy az erősítő kimenetén "fűrész jelem" van, tehát nem jó a bemeneti szűrő beállítása. Egyenlőre nem szeretnék D/A átalakítót felhasználni, ha nem muszáj. Köszönöm.
A bemenő feszültséget R21/(R20+R1) arányban osztja le az osztó, a C20 kondenzátor értékétől függ a fűrészjel nagysága.
Nagyobb kondi kisebb fűrész. Te tudod, mekkora fűrész nem zavaró.
Uraim, kérnék egy kis segítséget vagy legalább is felülbírálást egy számításomban.
PIC16F628-as vezérlő egy 4MHz kristállyal lenne felszerelve 22pf-os kondikkal. Órát akarok készíteni és ezért a kellene használnom a timer1-es modulját. Másodpercenként akarok egy változót a megszakítással növelni. A számítást a következő képen gondolom:
A regiszterek beállítása pedig így néz ki:
vicsys féle bináris óra kapcsolása alapján akarom C-ben megírni hozzá a kódot. Előre is köszönöm. ui: most veszem észre, hogy a számolásom nem jó mert a 8-al való osztás az 500e lenne ami túl sok, de ez a legnagyobb osztója a timer1 modulnak. Vagy nem jól értem a dolgot.. A hozzászólás módosítva: Jún 18, 2014
Miért nem a Timer2 -t használod? Timer2 előosztó 4, PR2 = 250 - 1. Ekkor a Timer2 megszakítás 4MHz -es órajelnél 1ms -enként érkezik. Egy 1000 -ig menő számláló a programban és máris megvan az 1Hz -es órajel. Ha a Timer2 otóosztó 5 vagy 10, a programbeli számláló 200 -as vagy 100 -as is lehet - elfér 1 byte -on is.
A hozzászólás módosítva: Jún 18, 2014
Azt hittem timer1 fog kelleni nekem mivel az 16bites, de megnézem a timer2-őt.
timer0-val nem tudom megfelelően beállítani mert maximum csak 8 az előosztása.
Timer0: Csak 2 hatványainak megfeleő modulus állítható be, csak 2 hatványának megfeleő quartz -cal lesz pontos (egyszerű programmal) pl. 4.096MHz. Roman Black féle módszerrel tehető pontossá.
Timer1: Programból kell a modulust beállítani, ráadásul a timer írása körülményes (ld. errata). Timer2: Egyszer beállítod és működik. Nem kell programból továbbá törődni az állításával. Szélesebb modulus állítási lehetőség.
Közben nézegettem a dolgot.
Most így állítottam be:
Előosztó 1:4, utóosztó 1:16 Jól lőttem be?
Nem tudom mit is szeretnél. PR2 állítása kimaradt. Miért kell egy regisztert 8 utasítással állítani?
TMR2CON = ((utoosztó - 1) << 3) | (1 << TMR2ONbit) | (elooszto); 4MHz órajel, 1000 -ret osztva: a megszakítás 1 ms -enként.
A hozzászólás módosítva: Jún 18, 2014
"Nem tudom mit is szeretnél."
Másodpercenként szeretnék növelni egy változót. Gyakorlatilag egy órát akarok készíteni. "Miért kell egy regisztert 8 utasítással állítani?" Mert amit letöltöttem a HI-TECH 10-12-16-os PIC .h állományaiban így van megadva. Én sem értettem, de így működik. Kipróbálom a tiéd, hátha beveszi a gép Köszi. ui: igen, ki is köpte egyből. Kellenek a beállításaim. A hozzászólás módosítva: Jún 18, 2014
Nos így áll a program hátha érdekel még valakit a dolog.
Véleményetek szerint jó így a teljes beállítás? Ha igen akkor nekilátok és írom tovább a programot és elkészítem az órám végre P16F628 + 4MHz kristály.
Előre is köszi a megerősítést és segítséget.
A kiszolgáló rutin 1ms -enként fut le. A megszakításban növelt számlálót nem vizsgálod sehol sem.
...
Igen a megszakítás rutin még nem volt megírva, debugból ellenőriztem és külön mértem az időt.
Köszönöm a segítséged és a kiegészítést.
Hello!
Egy kis segítséget szeretnék kérni a mutatókkal kapcsolatban. Egy apró programrészlet:
ebben amit nem értek az lenne, hogy a Send2ByteS.. *st++-al mért növeli a mutató memória címét ? Szóval nem így lenne a helyes:
Működik mind kettővel csak az első verziót nem értem, hogy úgy mért működik.
Ezt a sort el tudnád magyarázni mi szükség van az & 0x0F illetve a 0x30 hozzáadására? Ez valami kompenzáció? A hozzászólás módosítva: Jún 19, 2014
Szia!
Az "timer_count & 0x0F" a timer_count alsó 4 bitjét hagyja meg, amihez hozzáadva 30 hexa-t ( a '0' ASCII kódja! ) megkapjuk timer_count alsó 4 bitjén lévő szám ( 0-9 ) ASCII kódját és ez mehet a kijelzőre! Bocs,hogy beleszólok, csak most itt voltam "gyorsba" !
Ohhh tényleg, a fenébe
Éppen most kínlódom vele és itt volt az orrom előtt a megoldás Köszönöm a gyors segítséget
Pontosan ugyanazt csinálja mindkettő. A *st++ jelölés értelmezése az, hogy a régi címre hivatkozik, és csak utána növeli meg a mutató értékét.
A hozzászólás módosítva: Jún 19, 2014
Ennyira nem egyszerű az élet. Elég pongyola voltam. A 0..9 jól konvertálódik, de a 10..15 már nem. Az így kialakított kódhoz 9 fölötti értékeknél még hozzá kellene adni 7 -et...
Azért írtam, hogy 0 ... 9, nem néztem vissza, azt hittem csak ez kell Neki !
A hozzászólás módosítva: Jún 19, 2014
Köszönöm a gyors választ!
A hozzászólás módosítva: Jún 19, 2014
Igen, igen csak 0-9-ig érdekes a dolog mivel az órának minden számjegyét külön kezelem.
vicsys féle bináris óra lesz belőle előbb-utóbb, de előbb teljesen meg kell írjam C-ben.
Sziasztok!
Egy óriási segítséget szeretnék kérni. Az alábbi kódot kellene módosítani úgy hogy még egy plusz szoftveres soros port is legyen, az RCREG2-vel azonos beállitásban, pl. RA1 láb legyen RX. (vevő). TX (adó) nem kell. Az a gondom hogy mindkét meglévő soros port foglalt, és így nem tudom debbugolni. Sajnos az angol tudásom =0-val, adatlap van, csak hát ugye érteni is kellene. Segítséget előre is nagyon köszönöm!
A hozzászólás módosítva: Jún 19, 2014
Sziasztok,
tudnátok egy szoftveres PWM program megoldást beszúrni vagy linkelni, ahol át tudnám tanulmányozni. A hardveres egységeket már sikeresen alkalmaztam, de erre is kíváncsi vagyok! Köszönöm.
Sziasztok!
Nagyon szeretnék megtanulni Pic-et Programozni, mert mindig is csodálattal tekintettem erre a világra, és gondoltam ha más meg tudja csinálni, hát akkor én is képes leszek rá. Nem tudom hogyan állhatnék neki, mivel csak nem rég kezdtem el c++ nyelven tanulni, amit nagyon meg szerettem mert ahogy haladok egyre több dologra vagyok vele képes, és elég sok lehetőséget rejt magában ez a nyelv, szóval nagyon szeretném ezt a nyelvet alkalmazni a programozáshoz, de nem igazán találtam semmi jó forrást. a másik kérdésem, hogy mindezt Mac OS X en lehetséges e? kérlek titeket segítsetek elindulni.
Sziasztok!
dsPIC33f2011-el bajlódok. Beállítottam egy megszakítást az INT0-ra, de ha magas szint van ezen a lábon, a mikrokontroller egyszerűen lefagy. Pickit3-al debugolom, és folyton reset vektorra ugrik! Ha alacsony szinten tartom a lábat, akkor megy minden. Ha a program indulásakor nem kötöm magasra, és később generálok megszakítást, akkor hol működik, hol nem. Oda ugrik a megszakítás függvényre, ami ez:
|
Bejelentkezés
Hirdetés |