Fórum témák
» Több friss téma |
Bocs igaz, a programban úgy csináltam, hogy 1-0-ra figyeli, csak már nem emlékeztem rá és a nagy gondolkodás közbe elírtam.
![]() Gondolkodtam én is az 1mp-n, majd meglátom végül is ez részlet kérdése, lehet egy bizonyos fordulatszám felett kéne váltani 0,5-ről 1mp-re, majd meglátom. Most úgy sikerült időzíteni , hogy a 100ms az pontosan 100,0032ms ez állt a legközelebb a 100-hoz. 0,5mp-ként 500,016ms telik el, de sztem ez jó, mivel max 255-öt tud számolni 0,5 mp alatt tehát kb. 2ms-ként 1 jel (majdnem). Esetleg egy kész függvény is jó lenne csak be kéne ágyazni az asm-be, de jó lenne C is, a fordító gondolom meg tudja oldani. Vagy írom C-be és beleteszem az asm részt, C-be pedig lesz az lcd kiírásos rész. Amíg nem jön valami kicsit konkrétabb erre a kiírós feladatra még gondolkodok kicsit.
Ez a program fut a picben. Többet nem tudok, hátha valakinek mond valamit.
Már jó sokszor belinkeltem: Bin -> Packed BCD rutin. Tetszés szerint lehet a bitszámot növelni, csökkenteni. Gyors, rövid, hatékony. És már elég öreg is.
A pakolt BCD egy byte -on két digitet tárol. A magasabb helyiérték a 7..4 biteken, az alacsony a 3..0 biteken van. A szétválasztás swapf / andlw 0x0F és movf / andlw 0x0F utasításpárral könnyen megoldható. LCD -re írás előtt a digitekhez csak a 0 ASCII kódját (0x30 -at) kell hozzáadni.... A hozzászólás módosítva: Dec 27, 2013
Ezt valami egzotikus oldalról szedted? Az eredeti kapcsolást kéne látni, mert a tápfeszültség megemelése nem elég.
A PIC-edben van Capture modul, használd azt. Autómatikusan menti a timer értékét. Pont erre van kitalálva.
Az lcd kiíráshoz pedig ITT találsz konverziós rutinokat.
Innen való? A kapcsolás mindent elárul. Mivel a 6 kijelző szegmens vezérlése közös (RB0..6), a digitek közös elektródáit is vezérelni kell (RD0..5). A közös anódos kijelző szegmenseit lehet egy-egy NPN tranzisztorral / N-MOS FET -tel vezérelni, de ekkor a vezérlés invertálódik: magas kimenet kell a kivilágosításhoz. Egy további inverter beiktatásával vagy a program átírásával lehet kompenzálni. A digitek anódjait a +5V -nál magasabb feszültségekre csak digitenként két tranzisztorral lehet megoldani. A PIC kimenetése egy NPN tranzisztor bázisellenálláson keresztül kapcsolódik, emittere a földre van kötve, a kollektora ellenállással kapcsolódik egy PNP tranzisztor básisára. Ez utóbbi emittere a tápfeszültségre megy, a kollektora egy digit anódjára. A bizos lezárás érdekének a PNP tranzisztor bázisa és emittere közé is kell tenni egy ellenállást.
Ok, kösz a segítséget. Amúgy már a 8 bitet kettéválasztja mivel 4bites vezérlésre van beállítva az elvileg már jó. Holnap majd nekiugrok és megnézem részletesen.
Köszönöm!
Igen, de nem pont ez a kapcsolás, fentebb feltettem. Akkor a két tranzisztoros megoldást alkalmazzam az PNP bázisa és emittere közé milyen ellenállást tegyek? A program, azt is felraktam, bonyolult lenne az átírása? Akkor elég volna egy NPN tranzisztor is?
uln 2003 vagy uln 2803-as ic-vel meglehetne oldani? De hogyan?
Ha igen akkor hogyan? Valaki esetleg lerajzolná nekem, mert szeretném a panelt megtervezni de csak akkor ha biztos jó!
Anód oldali kapcsoláshoz inkább UDN2981. Bővebben: Link
Sziasztok! Tudnátok ajánlani egy egyszerű, soros portról üzemeltethető PIC programozót, amellyel 18F2550 PIC-et fel tudnék programozni?
Előre köszönöm a segítséget!
Elolvastad fent?
Idézet: „Kerülendő a JDM (soros porti) programozó.” Szerintem 18-as családot már nem is tudják a régi programozók. Ha csak egy PIC kell akkor inkább kérj meg valakit, hogy programozza fel. Ha pedig komolyan akarsz PIC-ekkel foglalkozni akkor minimum egy PICKIT2 klón az alap. A hozzászólás módosítva: Dec 28, 2013
Köszönöm a gyors választ, elkerülte a figyelmem a fenti elolvasása. 1 db-ot kellene egyenlőre programozni. 6-ai héten leszek Budapesten, valaki tudna segíteni ezt az egyet felprogramozni?
Sziasztok!
Még mindig függőben van a közös anódos kijelző beoperálása ebbe a kapcsolásba, valaki tudna segíteni ebben, hogy megfelelő legyen. A kijelző típusa SA23-12EWA és ebbe a kapcsolásba kellene működtetni. Én nem nagyon értek az elmélethez: Köszönöm. A hozzászólás módosítva: Dec 28, 2013
De ha a profilodban megadod esetleg a varost is, akkor talan van a kozeledben valaki.
Nem kell a szemelyes adatokat ennyire paranoid modon vedeni....
Ha van a gépedben párhuzamos port, megépítheted a watt féle lpt-s programozót is: Bővebben: Link
A PORTD kimeneteire (RD0 .. RD5) egy egy ellenálláson (1..2 k) keresztül egy-egy NPN tranzisztor bázisára menjen, az NPN tranzisztork emittere a földre, a kollentoruk rendre a Q1.. Q5 bázisellenállásaára. A PNP tranzisztorok bázisellenállása számítható: a kollektor áram / áramerősítési tényező. Javaslom ennél jóval kisebb értékű ellenállással telítésbe vezérelni.
Bocs, de nem igazán értem a belinkelt program működését. xxxxx000-val kell kezdeni de minél? Amit beolvas a porton vagy minek?
Elvileg akkor egy 24 bites számból csinál 6 jegyű tízes számrendszerbeli számot, de miért kell a a ASCII kódját hozzáadni az LCD-re íráshoz? Illetve akkor gondolom, mindegy kapott eredményhez hozzá kell adni csak előtte szét kell választani a 3x 8 bitet és utána hozzáadni a 0x30-at. Mplabba hogy lehet nézni a változók értékét? A hozzászólás módosítva: Dec 28, 2013
- xxxxx000-val kell kezdeni: A belső ciklus elállási feltétel vizsgálata miatt:
Ha ezt átírod, a változók bárhol lehetnek, csak egymás utáni címen kell lenniük. - 24 bites bináris szánból 8 digites pakolt BCD -t csinál. Az LCD pedig ASCII kódokkal működik. Ha "0" -t akarsz kíírni rá, az ASCII kódját (0x30) kell beírni. Tehát a pakolt digitetet külön kell választani, ASCII szám kódokká konvertálni (addlw 0x30), majd beírni az LCD -be. MpLab -ban láthatod a változó értékét, ha fölé húzod a kurzort és egy kicsit vársz. A Watch ablakba (View / Watch) fel lehet venni az érdekesebbeket (névvel vagy címmel is felvehető). A hozzászólás módosítva: Dec 28, 2013
A 24. sorba ez jó így? BIN2L MOVLW R3. Nem movfw kellene? (Amit linkeltél ott movlw van.)
Bocs nézd el nekem, de kicsit hülye vagyok, de nem értem minek kellene xxxxx000-nak lennie? Mármint az R0-nak vagy minden R-nek így kellene kezdődnie? Csak azért, mert akkor inkább papíron megyek végig a programon hátha megértem, mert így nem tudom mit kéne változtatni, hogy 16 bittel menjen, talán: kiesik az r3,r2,hbyte, és a bcdadj-nél nem 03h-t kell betölteni, hanem 02h-t? Az indf és fsr hogy működik esetleg tudnál pár szót mondani róluk? Egyébként a változók fölé hiába viszem a kurzort nem írja ki az értéküket, valahol be kéne állítani valamit? A hozzászólás módosítva: Dec 29, 2013
- BIN2L MOVLW R3. Nem movfw kellene? NEM, arról van szó, hogy R+ címe kerül az FSR regiszterbe. R3 -nak kell xxxxx000 címre kerülnie, R2, R1, R0 véltozók így sorban R3 utáni címekre kell kerülniük.
- Az indf és fsr hogy működik esetleg tudnál pár szót mondani róluk? Az INDF nem egy valódi regiszter, hanem az INDF -n keresztül a STATUS legfelső bitje és az FSR regiszter tartalmából képzett 9 bites címmel kiválasztott regiszter érhető el. Válaszd ki a szimulátort (Degugger / Select tool / MpLab SIM), tegyél alkalmas helyre töréspontot (a sor elé klikkenve) indítsd el a programot. Ha megáll a törésponton vagy megállítod, akkor mutatja a változó étékét ha fölé húzod a kurzort. Ekkor frissül a Watch ablak is.
Sziasztok!
dspic30f-et programozok C nyelven. A memóriakezelésről szeretnék kérdezni, hogy hogyan működik. Nézegettem az asm nyelvet, de nem nagyon találtam meg azt, ha C-ben csinálok egy változót, akkor azt hogyan fordítja le a fordító. Illetve legjobban az érdekelne, ha csinálok egy függvényt, amiben van új változó dekralálva, akkor azt a változót futás időben hozza létre a PIC-ben a program? És ha igen, akkor a fordító ezt gondolom nem tudja ellenőrizni, hogy lesz-e elegendő memória, ha meghívom a függvényt? Azaz nekem kell számolnom azzal, hogy mennyi hely maradt a memóriában, lesz-e elég hely, ha meghívóm az új változókkal a függvényt?
A honlapomon találsz némi információt. Különösen a dinamikus változók és a veremkeret részt ajánlom figyelmedbe.
Köszi!
Kicsit nehézkesen fogom fel, de ha jól értelmezem akkor a w0-w15 wregisztereket használja fel a program a paraméterek átadására és visszaadására? És mi van akkor, ha nem elég a w0-w15? Idézet: Veremkeret. „És mi van akkor, ha nem elég a w0-w15?”
Szóval a "vermet" a RAM-ba hozza létre? Megtévesztett kicsit, azt hittem először, hogy a w0-w15 a werem.
Én már ezer éve nem foglalkoztam vele, de ha nem csalódom, W15 a veremmutató (SP), W14 a keretmutató (FP). A lokális változók és az átadott paraméterek ehhez az FP-ben tárolt címhez képesti relatív címzéssel érhetők el.
Nem akarok nagyot mondani, de szerintem egy jól megírt fordító meg tudja állapítani, hogy a lokális változók mennyi helyet fognak elfoglalni. Legalábbis az IAR MSP430 fordítójánál kaptam már fordításkor hibaüzenetet emiatt.
C30 fordítót használok, és egy hatalmas tömböt csináltam buffernek UARThoz. Mikor felvettem közel a maximális memóriáig a tömb elemszámát, akkor bizonyos függvények meghívásakor hülyeségeket csinált a program. Miután hagytam több helyet az adatmemóriában, jól futott a program. Csak ezért gondoltam erre.
|
Bejelentkezés
Hirdetés |