Fórum témák
» Több friss téma |
Mindegyik csak annyira lesz pontos, mint a kvarcod. Ha tudod mennyivel jár arrébb, szoftverből korrigálhatod , vagy egy trimmerkondival.
Miért jó az, hogy egy digitális jelből (a jeladó impulzusai) analóg jelet állítasz elő? Mikrokontrollerhez méltó megoldás az lenne, ha az impulzusok közti időt mérnéd, és a késés/sietés módosítaná a kitöltési tényezőt.
A hozzászólás módosítva: Nov 21, 2014
Hmmm. Azon még nem gondolkodtam, hogy a jeladó impulzusokat ad. Ezt még szkóppal leellenőrzöm. Eddig csak feszültséget mértem a jeladón ami növekszik ahogy nő a fordulat. Viszont az időméréssel nem vagyunk jóban. Eddig nem nagyon tudtam tökéletesre megcsinálni sose, az AD-vel jobban boldogulok.
Sziasztok!
A napokban elkeztem egy projektet PIC18F242-re MPLAB 8.7 es XC8 forditoval. Mivel inkabb linuxot hasznalok, ezert gondoltam ott folytatom tovabb a programozast. Sikeresen fel is sikerult telepiteni a MPLABX-et es ugyanazt a forditot (XC8). Importaltam az elozoleg elkezdett projektet es sikeresen le is forditotta es be is egette (pickit2 programozoval), azonban semmi sem mukodik abbol ami elozoleg ment (eddigi program egy 7szegmenses kijelzos ora, 4 gombbal). Valakinek van valamilyen otlete, tapasztalata, hogy mit kene meg beallitani, modositan, hogy mukodjon MPLABX-es is ugyanaz a program?
Én elsőnek rápillantanék, hogy fordításnál "Debug" vagy "Release" módban fordult a program.
Aztán a fájl elérések, könyvtárak...stb Az én kérdésemre valaki? :Bővebben: Link A hozzászólás módosítva: Nov 22, 2014
Szerintem a kiolvasásnál azt felejted el, hogy az IODIRA kimenetnek van állítva így azt fogod olvasni amit rá írtál az OLATA-val a kimenetre vagy amilyen kimeneti állapotban van a PORT, nem azt amit rá akartál küldeni(mondjuk azt, hogy nyomva van-e egy gomb vagy nem).
Idézet: „Szerintem a kiolvasásnál azt felejted el, hogy az IODIRA kimenetnek van állítva így azt fogod olvasni amit rá írtál az OLATA-val a kimenetre vagy amilyen kimeneti állapotban van a PORT” Igen, pontosan ezt akarom, de miden esetben 0x00-jön vissza. Nem értem miért...
De az IODIRA bemenetnek van állítva mert az általad csatolt init részen kimenetnek állítod.
A hozzászólás módosítva: Nov 22, 2014
Én azt sem látom hol olvasna, sehol egy read vagy receive . Amikor a regiszter címét adod meg, az írás lenne. Az AN1043-at nézted már?
Nincs gomb...
Kimeneten van az A és a B prot is.. (IODIRA) OLATA regiszterrel állítom a lábakat magas vagy alacsony szintre programból.. Írás működik gond nélkül, az olvasás csak annyival különbözik, hogy az OP nem 0x40 hanem 0x41.
Feljebb van az olvasás forráskódja..
0x41 a regiszter kód az olvasáshoz. Ezt nem akartam linkelni mert az adatlapban benne van és jeleztem is:
A hozzászólás módosítva: Nov 22, 2014
Ok, tehát a read fv. 6 sorában olvas?
"Gyári" javaslat:
Szia!
Szerintem 1sec alatt 10szer elég ránézni, ha nem akkor lehet többször is. Tehát ciklusonként beolvasod az AD tartalmát, ha egyezik a referenciával (kívánt érték) akkor nem csinál semmit. Ha kevesebb növeli a pwm-et 1- 2-3 stb. kisérleti úton meghatározott értékkel. Ha több, akkor csökkenti. De a túlzott beavatkozás oszcillációhoz vezet! Egyéb opció lehet a felfutási és leállási rámpa beállítása start/stop nyomógombok stb. Aztán figyelni kéne a motor felvett áramát is és egy max. limitet is be kéne állítani. (esetleges megszorulás) Nem meghatározható a korrigálás mértéke, a tömeg és a motor tulajdonsága miatt. Leírhatnád a motor adatait, a jeladó fajtáját. Ha elakadnál a programozásban keress meg. Üdv. Foxi
Szia!
A motor egy 600W-os felsőmaró motorja. A maximális fordulatszáma adattábla szerint 36000 f/min. A jeladóval kapcsolatban nedudgi hozzászólási szöget ütött a fejembe. Először arra gondoltam, hogy tacho generátorral oldanám meg a fordulatszám figyelést, de ekkora fordulatnál már 39V körüli feszültséget ad le. Nem tudom mi volna a célravezetőbb, ezt a feszültséget leosztani vagy inkább nedudgi gondolatmenetét folytatva mondjuk egy hall szenzorral figyelni az időt?
Ekkora fordulaton jobb a mágneses érzékelő, vagy optokapu.
36000 forulatnál felesleges kikoptatni egy másik motor csapágyát.
Mplab-ban debug modban fordit, linux alatt midkettot probaltam, de semmi valtozas. Eleresek jok, semmifele hibat nem ad forditaskor, azonban egetes utan semmit sem csinal a hardwer.
Üdv !
Van egy Pic16f877a és egy enc28j60 -am és szereték összehozni egy kis webszervert erre a picre. Neten találtam példa programot , bele is töltöttem a hex fájlt a pic-be , de pingeléskor a megadott ip címre azt írja , hogy a célállomás nem elérhető. (192.168.0.170 Ip-n , és beállítottam egy 0.100 as ip címet a hálókártyára ugye.) Mellékeltem egy képet amin látszik hogy kötöttem össze a 2 modult valamint a hex fájlom forrását. Csak azok a lábak vannak bekötve amik jelölve vannak , a többi üresen "lóg". Valakinek lenne ötlete mit rontottam el? A hozzászólás módosítva: Nov 22, 2014
Nos, bocs csak közben el kellett mennem.
Szóval: pont ahogyan te is írtad a 6. sorban van a kiolvasás. Részleteiben:
A gyári ajánlás szerint írtam meg a programot..
MPLAB-ban is, ha nem akarsz mindenképp Debugolni akkor Release-ra állítsd át és az menni fog.
Linux alatt nem tudom, de ott is érdemes megnézni, hogy nem e Debug módban van a program. Nincs hirtelen más ötletem.. Mennie kéne, ha csak nem a fordító nem ugyan az és abban van valami hiba. Esetleg még include-olnám a PIC linker állományát.. Persze ez utóbbi csak tipp.. ktamas66: ez még neked, csak már nem tudtam szerkeszteni az előzőt.. A gyári ajánlás szerint írtam meg a programot.. Már mindent kipróbáltam amire gondoltam, de sehogy nem jön vissza a már beállított érték. Azért kellene mert mint feljebb is írtam maszkolnom kellene. Kijelzőt szeretnék meghajtani és így egy porton belül úgy kellene kapcsolgatnom a lábakat, hogy a már előzőleg beállított lábak ne változzanak meg, kivéve, ha azt szeretném. Vezetékek jók, jó helyre is vannak kötve (írás működik), MCP23S17 chip jó, 3db-ot kipróbáltam mindnél ugyan azt produkálja, beállítások elvileg jók (gyári ajánlás szerint)... furcsállom, hogy nem lehet kiolvasni a port állapotát. A hozzászólás módosítva: Nov 22, 2014
Ezt a bejegyzésed nem értem:
Idézet: „De az IODIRA bemenetnek van állítva mert az általad csatolt init részen kimenetnek állítod.” Kifejtenéd? IODIRA bemenetnek van állítva? Gyárilag igen! Általam csatolt init részben kimenetnek. És ez miért baj? Nem bemenetnek akarom használni a protokat, hanem kimenetnek és OLAT regiszter segítségével állítom a bitek szintjét... Vagy mire gondolsz? ktamas66: Mire gondolsz mikor ezt írod? :"AN1043" A hozzászólás módosítva: Nov 22, 2014
Én még nem használtam ilyet (csak I2C-t), de az ajánlásban nem küld semmit, csak control byte (read-del), cím és utána 1 byte olvasás. Próbáld ki, ha a függvényt nem adat=0-val hívod, hanem mással, mit kapsz vissza, mert az a sanda gyanúm, hogy adatot (nem is tudom az pontosan milyen paraméter lenne az olvasáskor).
Microchip AN1043 A hozzászólás módosítva: Nov 22, 2014
Hát már, hogy a viharba ne küldene:
Ez a gyári olvasó függvénye MCP23S17-hez. Ettől független kipróbálom.. Ha nem küldök adatot akkor kiakad. Ha a regiszter kóddal egyből olvasok akkor szintén 0x00-val tér vissza.
A hozzászólás módosítva: Nov 22, 2014
Igen, ezt linkeltem én is..
Ebből indultam ki, persze nem pont úgy ahogyan ő használja, de az alapján írtam a sajátomat. De indulhatsz ki a teljes gyári felépítéssel is, de akkor sem olvas nekem és nagyon nem értem miért.. Minden tudok csinálni vele, de olvasni a biteket nem tudom.. GPIOx (PORT) regiszter nem akarja az igazságot.. Semmi más ötlet? Valaki? A hozzászólás módosítva: Nov 22, 2014
Ez a byte_send függvényt kellene szerintem látni, mert a küldés és fogadás nem ugyanaz:
Az olvasó rész csak azért tol ki 0-át, hogy az órajel beléptesse a fogadott adatot, és avval tér vissza ( az író hibakóddal).
Itt a teljes kódom amit használok..:
Teljesen a gyári alapjain kicsit kiegészítve.. Mint mondottam tökéletesen működik élesben írásra, de olvasásra nem. Szimulátorban tökéletes.. A hozzászólás módosítva: Nov 22, 2014
Esetleg próbáld ki, hogy a
temp = byte_send(adat); helyett berakod a gyárit: SSP2BUF = 0x00; // initiate bus cycle while(!SSP2STATbits.BF); // wait until cycle complete temp = SSP2BUF; És nézd meg az SO láb jól van-e bekötve .
Megnéztem
Éppen most.. Semmi változás. Töltöm fel a videót, hogy szemléltessem mi a probléma.. Bekötés tuti jó... Videó Az elején mutatom, hogy szimulátorban jól működik, utána mutatom élesben ledekkel szemléltetve a bitek állapotát. Mindnek ami egyszer felvillan annak világítania kellene folyamatosan.. A hozzászólás módosítva: Nov 22, 2014
Semmi jó ötletem sincs, csak az, hogy a gyáriból kellene kiindulni. (Én rátenném a Serial Analyzer-t , ha Pickit2-d van megnézheted a jelalakokat.)
LED-eket tettem az SPI IN és OUT lábakra az MCP23S17-nél.
Látszatra küld adatot, de a PIC-be már csak nulla érkezik. Ami azért érdekes. Sajnos Debug-olni nem tudom a 18F46K22-őt.. Kicsit érdekes ez a jelenség. Most mivel nem tudok mást csinálni elölről elkezdem megnézni a PIC majd az MCP beállításokat. MCP-nél a gyári ajánlásnál nincs reset, de sok helyen láttam, hogy tesznek bele. Gondolom ez nem befolyásolja az olvasást, ha írni simán tudom, nem? A bosszantó, hogy tudom tökéletesen írni, de amikor ki akarom olvasni ..., az is érdekes még, hogy ha lehúzom a PIC lábáról az MCP OUT vezetéket akkor is ugyan az van. Tehát olyan mint ha nem kapna adatot. A hozzászólás módosítva: Nov 22, 2014
|
Bejelentkezés
Hirdetés |