Fórum témák
» Több friss téma |
Máshol is olvastam már olyan panaszokat, hoyg az adatlapban megadott információ önellentmondásos. A PIC-kwik projektemben az alábbi beállítással (FRC-ből 40 MHz FCY) az UART átvitel működni szokott (lib/common/pic24_clockfreq.c részlet).
Hogy a fenébe lehet rájönni egy kondiról, hogy nem akkora, mint ami rá van írva? Soha nem vennék észre egy ilyen hibát, azért kérdezem.
Köszönöm!
Akkor megnyugodtam, hogy nem bennem van a hiba... Sajnos elkövettem fél évvel azt a bődületes hülyeséget, hogy nem a Microchip, hanem a Mikroelektronika cuccain kezdtem fejleszteni - életem egyik legrosszabb döntése volt... De az értékeknek ott is jónak kell lenniük.
Sziasztok! Egy olyan kérdésem lenne, hogy a belső oszcik általában mennyire megbízhetóak? Egy tanítható távirányító projekten dolgozom, és szeretném a külső alkatrészek számát csökkenteni. A prototípust, egy 16F627A-val építem meg, miután eldöntöttem használok-e külső oszcit... Konkrétan az érdekelne, hogy ha időzítéseket használok, akkor pl a külső hőfok hatására, mennyire torzul? Előre is köszi a segítséget! (Boldog Karit Mindenkinek!)
Pont ennek a pic-nek van belsőleg precíziós 4mhz-es oszcillátora, de az is az adatlapja szerint 1%-ot simán mászkál hőmérsékletre is, tápfeszre is. Ha ezrelék alatti hibára akarsz valamit időzíteni, ugyan úgy megette a fene.
Ami meg a pic-eket illeti úgy általában, a belső oszcit csak arra szokás használni, hogy ha teljesen mindegy, milyen frekin fut, mert 1mhz-től 10mhz-ig bármi megteszi (buta állapot gép, ahol a program a külső jelek állapotának megfelelően ütemezve fut, ergo a belső sebesség teljesen lényegtelen), arra jó. Meg a belső 32khz-es oszci low power módokra minden külső forrást teljesen lekapcsolni energiatakarékossági okokból - valami ketyegő a pic-nek akkor is csak kell. És ennyi. Bármi precíziós dologhoz külső kvarc kell. Boldog Karácsonyt
Köszönöm a gyors választ! Akkor inkább beépítem a kvarcot!
![]()
Sziasztok!
PIC-ről szeretnék frekvenciaváltót üzemeltetni, PIC18F2550-ről. Ehhez ugye folyamatos jel kell, viszont, ha meghívok egy megszakítást, ez megszűnne. Arra gondoltam, hogy valami IC-t, tárolót vagy nem is tudom mit lehetne használni, legjobb az lenne, ha digitális jellel tudnám szabályozni pl.: egy IC-t, aminek nem kell folytonos jel, viszont az IC pedig hajtja folyamatosan a freki. váltót. Egyelőre nem nagyon vagyok otthon áramkörök felépítésében, így nem tudom, hogy mit kéne használnom. Bármilyen ötletet szívesen fogod. Köszönöm előre is.
Szia!
Először is jó lenne tisztán látni: milyen jel kell a frekiváltónak ( analóg vagy digitális ) és Te melyikkel akarod működtetni?! Ezután nézd meg a működéshez szükséges protokollt! Így az lenne az ötletem, hogy olvass egy kis adatlapot és gondolkozz el a működésen! Steve
Hát vezérelnem analóggal kell a freki. váltót. Tudom a 18F2550-ennek nincs DC to AC convertere, és azt is tudom, hogy amit a PIC kiad az digitális
![]() ![]()
Szia!
Ha analóg jel kell, akkor csinálj DA átalakítót pl. egyszerű létrahálózattal! Ha csinálsz egy 8 bitest, akkor 256 lépcsőben állíthatod a feszültséget 1 port segítségével 0-5V-ig durván 20 mV-os felbontással! Tudomásom szerint a frekiváltó analóg jelként a 0-10V-ot ( vagy a 4-20 mA-t ) tudja, ez is megvalósítható pl. egy Au=2-es erősítésű műveleti erősítővel. A portra kiadott jel nem fog megváltozni a megszakítás miatt a PIC-ben, csak ha Te "birizgálod" újra a portot! Ha másra kell a láb, akkor használj PWM-et ( van a 2550-esben ilyen modul ), azt is csak fel kell programozni és nyomja a megfelelő jelet a következő változtatásig ( azután RC aluláteresztő szűrő és műveleti erősítő és kész is a 0 - 10 V-os jel! ) ! Steve
Köszönöm szépen, ez új dolog volt, hogy nem változik a fesz. a lábon megszakításkor, de jobban belegondolva, miért is változna. PWM-en is gondolkodtam, de a problémát az jelentette számomra, hogy hogy biztosítom az állandó jelet. De így minden szuper, most hogy tudom, hogy nem változik a megszakításkor a lábon a jel.
Köszi szépen még egyszer ![]()
Ha belőtted a PWM-et és engedélyezted az megy folyamatosan mint a vízfolyás. Menet közben meg tudod a paramétereket állítani.
Szintén egy lehetőség, hogy PIC18F2550 helyett PIC18F25K50 -est használni. A part selector szerint abban van DAC, még ha csak 5 bites is. A 16 bites pic-ekben már jellemzően 10 bites DAC-okat találsz. Mire PWM jelet rendesen megszűröd, vagy ellenállás létrát felépíted mellé erősítővel, vagy kevés az 5 bit, mert pontosabb jel kellene, szóval tok szám és nyák felület úgyis elmegy, mire pöpec lesz a cucc, és ahhoz képest már olcsóbb egy 16 bites pic. Ha válogatnál, itt egy link a part selector-ra:
http://www.microchip.com/maps/microcontroller.aspx
Kevesebb, mint 3 hónapja kezdtem el PIC-ekkel foglalkozni, és szeretném megtanulni, mit hogyan használjak bennük.
Mi szerint válasszam meg a számomra ideális PWM frekvenciát? Olvastam, hogy 20kHz fölé, máshol, hogy 10kHz és 25kHz közé válasszam(bár ezeket motorokhoz). Van valami általánosítás, attól függően, hogy mit szeretnék vezéreltetni(esetembe, ugye a freki. váltó)?
Ezt nem tudom megmondani, mert nem látom, hogy mit és hogyan szeretnél vezérelni.
Egy frekvenciaváltót szeretnék szabályozni vele. Szóval a frekvenciaváltó bemenetére 0-10V közötti értéket küldeni, függően attól, mekkora fordulatszámon kell a motornak működnie.
A hozzászólás módosítva: Dec 26, 2012
Mondjuk az a 700 huf olyan nagyon azért mégsem olcsó egy pic-hez képest, és akkor még nem is 1 tokot használtál, hanem már 2-t. És persze kell hozzá az SPI busz is.
A megadott információ kevés. A PWM jelnek az a hátránya, hogy hullámos lesz. Meg lehet szűrni, de egyre erősebb szűréssel egyre több lesz a jelkésleltetés is, gyengébb szűréssel meg a hullámosság nő. Attól függően, hogy a motorvezérlő hogyan mintavételez, esetleg nagyon más fog történni, mint amit valójában elérni szerettél volna. Ugyan csak 1 kimeneti láb kell hozzá, de nem is szuperfegyver.
Én is az SPI-n akadtam meg, egyelőre azt se tudom, hogy eszik-e vagy isszák.
![]()
Megszakítást szeretnék eszközölni, hogy programfutás közben, tudjak adatot bevinni és azt eeproban tárolni, hogy majd a megszakítás végeztével a program azt fel tudja használni. Fordításkor hibaüzenetet kapok
Idézet: „25 365 Reentrancy is not allowed: function 'EEPROM_Write' called from two threads __Lib_EEPROM_256.mpas” mi lehet a probléma? Mikropascal-ban írom a programot.
Az a probléma, amit az üzenetben ír, vagyis megszakításból és megszakításon kívülről is akarsz eepromba írni.
És akkor ezt hogy lehet megkerülni? Mert hogy, amikor elindul a program, akkor kiírja az lcd-re a működéshez szükséges adatokat. Az adatokat az eepromból veszi elő, mert azok változhatnak és a változásokat tárolni kell. Az induló adatokat a program állítja elő és írja az eepromba, amit én ha kell, meg szeretnék változtatni. Azt meg szeretném promt változtatni.
Át kell gondolni a programot, és az EEPROM írását vagy csak a megszakításban csinálni (bár ez igazából nem jó ötlet, mert sokáig tart), vagy a főprogramból. Mi módon végzed a változtatást? Mert ha nyomógombokkal állítod be, akkor semmi szükség arra, hogy megszakításból csináld.
Nyomógombbal gondoltam, de ez is érdekel
Idézet: , ha megoldható. „Mert ha nyomógombokkal állítod be, akkor semmi szükség arra, hogy megszakításból csináld.”
Azt hiszem, jó kezdés lenne számodra letölteni az egyik pic adatlapját (az általad választott PIC18F2550 is teljesen megfelel erre a célra), és elolvasni a legelejétől a legvégéig, hogy képben legyél az alapvető dolgokról. Egy pár100 oldalas olvasmány. Elleszel vele egy ideig. Viszont utána legalább a legalapvetőbb dolgokon nem fogsz fent akadni. Ha tényleg pic-ekkel akarsz foglalkozni, ezt igazából nem úszod meg. Ez a legjobb módja a tanulásnak. Ha kezdésnek hiányát látod az elektronikai gyakorlatnak, venni valami Microchipes teszt-boardot, mondjuk egy pickit express csomagot (abban van pic égető is), bőven elég segítség lesz. Valamennyi zsetont el fog vinni, azt rá kell áldozni. Én ezeket tenném a helyedben (én is jártam a te cipődben és én ezeket tettem - nekem bevált).
Az adatlap meg van, forgatom is. Nem azt mondom, hogy elejétől végéig elolvastam, hanem azokat a részeket, amikre éppen szükségem van. Például, 1 hete az ADC-t nyálaztam folyamatosan és a hozzá kötődő oldalakat, ma a CCP/PWM-es részt bújtam de nagyon, volt amikor az interruptokat/timereket, legelőször meg a láb kiosztásról és, hogy hogyan kell azokat beállítani. Azért nem esek neki, csak úgy mert tudom magamról, hogy sajnos az, hogy elolvasok valamit, az nálam semmit sem jelent, csak ha komolyan elkezdek vele foglalkozni, akkor ragad meg. Szóval nem akarok én kihagyni semmit sem(sőt... nagyon is tetszik ez a PIC-es dolog, és csinálom szinte megállás nélkül) hanem fokozatosan felépíteni, megtanulni a dolgokat. A legnagyobb gond, hogy az elektronikai részből vagyok nagyon satu A PWM-es vezérlés meg sikerült is volna ma, csak az XC8 kicseszett velem rendesen, valami nem jó a tömb kezeléssel(de lehet, hogy csak én vagyok a hülye megint).
Programozással akkor tudunk neked segíteni, ha kész forráskódot lepucolva illesztesz be. Hogy mit is jelent a "lepucolás"..
Válaszd le teljesen azt a részt, amivel szerinted baj van, pucolj ki belőle minden olyat, ami nem tartozik közvetlenül bele, és kód lefutásra betenni egy függvényt, ami a pic egyik lábát az ellenkezőjére húzza, oda meg rákötni egy ledet. Meg egy másik lábra is másik színnel. A függvényed elején felvillantod a piros ledet, amit csak akkor oltasz ki, ha a függvény (akarhány szinten egymásba ágyazva egy full folyamat) rendben futott végig, és akkor a zöld ledet kapcsolod fel helyette. Letöltöd a programot a pic-be, és futtatod. Átlag sejteni lehet, hogy X idő alatt végig kell futnia, és kivillannia a zöld lednek. Ha nem az történik, akkor valami nem okés. Ha elég tagoltan állítod össze a kódot, és nem egy drótozott kaotikus kutyulás az egész (ezért is kell rendesen tagolva függvényekbe rakni dolgokat), akkor darabonként egyesével is végig tudod nézni, hogy szimulált bemenetre az elvárt kimenet érkezik-e meg (csinálsz rá külön programokat, amiket mind külön-külön lefuttatsz). Ha a darabok rendben vannak, kipróbálod az egészet is. Igazából csak idő kérdése, mert el lehet szöszölni vele, de egészen biztosan el lehet kapni ilyen módszerrel még azt is, hogy egy fordító ténylegesen rossz kódot fordít, vagy valami hardver nem úgy működik, ahogy annak működnie kellene az adatlapja szerint, és legapróbb elemi problémaként külön lehet választani minden mástól. Bármiről is legyen szó. Ami részletet végleg nem értesz, és már letisztított, csak egyetlen egy dolgot érintő valamiről van szó, azt bekoppantod ide, és kapsz rá magyarázatot valakitől.
Megoldódott a problémám, csak egy restart kellett.Bővebben: Link
Így szoktam csinálni... ha valami rossz abba amit írtam, akkor minden jó dolgot kikommentezek, és aztán lehet próbálkozni, hogy mit is írtam el. |
Bejelentkezés
Hirdetés |