Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Meg lehet. Mindkettőt HS módba állítod, egyikre ráakasztod a kristályt, és ennek az OSCO lábát összekötöd a másik OSCI lábával.
Tehat ha 5ms-ig pereg akkor vajon az 1ms kesleltetes elegendo-e?
Teendo: Bejon az encoder interruptja, beallitod a timert, hogy 5 es 10ms kozt adjon egy megszakitast. Valahol 7-8 kornyeken gondolom jo lesz. Kilepsz az ISR-bol, es a main-ben varakozol a timer interruptra (avagy kozben csinalsz mas muveleteket...) Mikor bejon a timer int elvegzed a vizsgalatot, hogy valoban beallt-e abba az allapotba az encoder amibe kellene. Ha igen, akkor elvegzed a muveleteket es ujra engedelyezed az encoder interruptjat, majd kilepsz az ISR-bol... Idézet: Becsatoltad a programot? Én nem látom. „valami hibás a hex programmal valaki megtudná nézni”
csak ennyi
nem gondoltam volna köszi szépen smrtln
nem csatoltam mert a programot mert innem töltötem le a kapcsolások menü alól játékok szórakozás a dice elektronikus dobókocka leirás alapján készült minden.
Azt hiszem, a rotary enkódernél is érdemes használni az állapotgépet (úgy látszik, ez a mániám). Az állapotok és átmenetek jó definíciójával ugyanis tökéletesen pergésmentesíteni lehet a működést. Ez annyit fog jelenteni, hogy az előre és a hátra lépések között kialakul egy hiszterézis.
A lent beidézett megoldásokban ha az enkóder éppen határon van, akkor ide-oda billeg a pozíciószámláló. Ez különösen akkor érdekes, ha az enkóder pl. optokapukkal van kialakítva, és szerencsétlen helyen megállítva a tengelyt billeg a digitális feldolgozás oldalán kiolvasható jel. Mechanikus enkódernél a kapcsoló pergése elvileg véges ideig, de ugyanezt okozza. Mellékelek egy kódot, ez egy optokapus forgásszámláló állapottáblája, annak idején próbáltam mindenféleképpen meghülyíteni, de nem sikerült. A működés nálam nem élvezérelt volt, hanem timer interrupt-ból rendszeresen meghívtam az állapotgépet, ilyenkor az éppen aktuálisan beolvasott érzékelőbitek jelentik az "esemény"-t.
Ugy csinaltam mindent ahogy mondtad:
1. Timer 7ms-ra beallitva 2. kulso interruptban:
3. timer interruptban:
4. main-ben:
5. Encoder() fuggveny:
Ami a mukodeset illeti: ha visszafogom kezbol, h ne "pattogjon" mikor forgatom az encodert akkor jo, de ha csak forgatom es hagyom h "pattogjon" akkor mar nem jo, nem is erzekeli vagy pedig ossze-vissza szamol.
Koszonom a segitseged neked is!
De nem igazan ertem a linkelt programot. Gondolom ez nem microchip forditoban van irva. Ha jol sejtem akkor ez egy switch - case dolog akar lenni es a C1... az allapotok. A dw nem tudom milyen utasitas. Barcsak ertenem pontosabban...
Ez egy assembly program részlete, csak az állapotgép-definíciós részt vettem ki belőle. Bár a kód már másfél éves, és én sem emlékszem rá, a kommentek alapján talán lehet tájékozódni.
Minden állapotnál 4 állapotugrás van definiálva: rendre a 00, 01, 10 és 11 bemeneti kombinációkhoz tartozó új állapotra mutatnak. Az alapállapot az 11 a két bemeneten, a kiinduló állapot a C01-es. Ha ebben az állapotban a következő beolvasásnál 11-es vagy 00-t olvasok (ez elvileg lehetetlen), akkor maradok a C01 állapotban. Ha C01 állapotban 01-et olvasok, akkor C02-re lépek (jobbra mozdul az enkóder). Ha C02-ben 11-et olvasok, akkor visszalépek C01-re, ha viszont 00-t, akkor tovább a C03-ra. Ha végigköveted az állapotokat, akkor látható, hogy az inkrementálásig csak akkor fog eljutni, ha sikerült az 11->01->00->10->11 szekvenciák által végiglépkedni a C01->C02->C03->C04 állapotokon keresztül a C05-ig. A C05 egy különleges, nem stabil állapot: amint egy esemény hatására ebbe az állapotba lép a gép, a következő, bármilyen esemény a C01-es állapotba fogja lökni. Minden egyes állapotváltáskor meghívom az állapothoz tartozó "belépési függvényt", de mivel a C05 nem stabil, csak egyszer fog az inkrementálás lefutni. A többi állapotba belépskor a semmittevés, egy üres függvény kerül meghívásra. A dekrementálás ugyanilyen állapotsorral dolgozik, csak a másik irányba történő forgatáshoz tartozó bemenetváltozásokra.
Ha erről a cikkről van szó, akkor megvan a HEX és a forrás is. Mi a gond, miből gondolod, hogy hibás volna?
Egy problémára tudok gondolni csupán, ha olyan égető(programot) használsz, ami nem ismeri a 32 bites Intel HEX formátumot. Ha ez a gond, akkor próbáld meg a HEX állomány első sorát kitörölni! ( tehát a :020000040000FA sort vedd ki!)
Mivel programoznád? Sajna tapasztalatból mondom a JDM-ek küszködnek vele. PICKIT simán viszi.
welleman 8048 as égetőm van edig még sikerült vele mindent égetni de ez a dice hex program elmegy 90 ig és ott le áll hibával már 2 db picel is kipróbáltam de mindig ott megáll
A PIC-et kiveszem a programozásra az áramkörből. Egyébként az MCLR-re az áramkörben egy kapcsoló van kötve, ami átkapcsol a táp és a test között, a PGD és PGC lábakon egy órakvarc, és 2 darab 22pF kondenzátor van, amiről a timer1 számol.
Idézet: Milyen hibával? „elmegy 90 ig és ott le áll hibával”
Nos csináltam a programozásra egy manuális "vpp first"-et, így felprogramozta. Valószínű az volt a probléma amire legelőször gyanakodtam. Elindult a PIC programja a programozó áramkörben, inicializálta a Timer1-et. Ez letiltotta a PGD port funkciót, amit az MCLR-re adott 13V nem állított vissza.
Az alábbi hibaüzenet mit takar???Tudtok segíteni??
Fordításkor(ccs) jött a probléma. " Clean: Deleting intermediary and output files. Clean Warning: File "C:\16F887peldak\Ckódok\teszt\main.o" doesn't exist. Clean: Deleted file "C:\16F887peldak\teszt\teszt.mcs". Clean: Done. Executing: "C:\Program Files\PICC\ccsloader.exe" +FM "main.c" #__DEBUG=true +ICD +DF +LN +T +A +M +Z +Y=9 +EA #__16F887=TRUE UNKNOWN OPTION: FMUNKNOWN OPTION: #__DEBUG=trueUNKNOWN OPTION: ICDUNKNOWN OPTION: DFUNKNOWN OPTION: LNUNKNOWN OPTION: AUNKNOWN OPTION: MUNKNOWN OPTION: ZUNKNOWN OPTION: Y=9UNKNOWN OPTION: EAUNKNOWN OPTION: #__16F887=TRUE BUILD FAILED: Sun Apr 11 18:40:12 2010 "
hiába szedem ki az első sort akkor is ugyan az a hiba jön elő
Itt azt jelzi, hogy a memória végére vissza akarta írni az oszcillátor kalibrációs értékét (valójában egy RETLW utasítás), de a beírni kívánt érték helyett nullát olvasott vissza.
Mi a helyzet a memória többi részevel? Vissza tudod olvasni a beírt programot?
Szia!
Csak egy ötlet: ne használj nemzeti karaktereket állomány és mappa neveket....
visszaolvasásnál is csak 90 ig jut utnna hiba
http://www.eevblog.com/2009/10/21/eevblog-39-pickit-3-programmerdeb...eview/
kicsit régi de csak most találtam meg, vicces a michrochip-es válasz videó
Nem ez volt a kérdés, hanem az, hogy vissza tudod-e olvasni a beírt programot? Mi a kiolvasott memóriarekeszek tartalma? A 0x3FFF törölt memóriát jelent, a 0x0000 olvasási hiba vagy kódvédelem is lehet. Mindenféle más érték érdekes lehet...
Sziasztok!
Nekem szükségem volna egy USB-s programozóra, ami tudja programozni a 12F629-et, és a 16F628-at. Találtam anno egy kapcsolást (asszem itt az oldalon) , de az RS232 portról megy, és ha barkácsolok hozzá egy USB-RS232 konvertert akkor az működhet? Vagy van erre valakinek valami jobb ötlete? A válaszokat előre is köszönöm!
Hali
Biztosan nem. Inkabb PK2. Most 7200+ifa a chipcadnal. Vagy csinalsz egyet, itt van a forumon kulon topikja. Pk3-at ha lehet ne. Udv Vili
Szia!
Ajánlanám a gyárit, vagy a PicKit2 klónt. Mivel sokasodnak a nem 5V-os kontrollerek, egy olyat készíts, ami a feszültséget szabályozni tudja.
USB soros atalakitosak nem szoktak jok lenni. Igazi USB-s kellene, es talan a legjobb darab a PICkit2 (nem a PICkit3!).
Akar epithetsz is Watt fele klon-t vagy Szilva fele klon-t. De akar vehetsz is kitet vagy beultetett, letesztelt ilyet, vagy az eredetit.
És az ICSP-n mit hova kellene kötni?
Hali! Bővebben: Link
|
Bejelentkezés
Hirdetés |