Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   723 / 1320
(#) potyo válasza smrtln hozzászólására (») Ápr 11, 2010 /
 
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.
(#) trudnai válasza bernardo hozzászólására (») Ápr 11, 2010 /
 
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...
(#) icserny válasza speki hozzászólására (») Ápr 11, 2010 /
 
Idézet:
„valami hibás a hex programmal valaki megtudná nézni”
Becsatoltad a programot? Én nem látom.
(#) smrtln válasza potyo hozzászólására (») Ápr 11, 2010 /
 
csak ennyi
nem gondoltam volna
köszi szépen

smrtln
(#) speki válasza icserny hozzászólására (») Ápr 11, 2010 /
 
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.
(#) szilva válasza trudnai hozzászólására (») Ápr 11, 2010 /
 
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.

  1. ; counter state machine table
  2. CNTSM_table
  3. ; counter state properties
  4. ; - function to call when entering into state
  5. ; - new state# after event 00
  6. ; - new state# after event 01
  7. ; - new state# after event 10
  8. ; - new state# after event 11
  9.  
  10. ; normal state, bits are '11'
  11. C01     dw              do_nothing
  12.         dw              C01,C02,C06,C01
  13.  
  14. ; '11'->'01', started to rotate right
  15. C02     dw              do_nothing
  16.         dw              C03,C02,C04,C01
  17.  
  18. ; '01'->'00', continued rotating right
  19. C03     dw              do_nothing
  20.         dw              C03,C02,C04,C01
  21.  
  22. ; '00'->'10', continued rotating right
  23. C04     dw              do_nothing
  24.         dw              C03,C02,C04,C05
  25.  
  26. ; '10'->'11', continued rotating right, need to increment
  27. C05     dw              do_cntinc
  28.         dw              C01,C01,C01,C01
  29.  
  30.  
  31. ; '11'->'10', started to rotate left
  32. C06     dw              do_nothing
  33.         dw              C07,C08,C06,C01
  34.  
  35. ; '10'->'00', continued rotating left
  36. C07     dw              do_nothing
  37.         dw              C07,C08,C06,C01
  38.  
  39. ; '00'->'01', continued rotating left
  40. C08     dw              do_nothing
  41.         dw              C07,C08,C06,C09
  42.  
  43. ; '01'->'11', continued rotating left, need to decrement
  44. C09     dw              do_cntdec
  45.         dw              C01,C01,C01,C01
(#) bernardo válasza trudnai hozzászólására (») Ápr 11, 2010 /
 
Ugy csinaltam mindent ahogy mondtad:
1. Timer 7ms-ra beallitva
2. kulso interruptban:
  1. if (INTCON3bits.INT1IE && INTCON3bits.INT1IF)
  2.         {
  3.             INTCON3bits.INT1IE = OFF;
  4.             T0CONbits.TMR0ON  = ON;
  5.             INTCONbits.TMR0IE = ON;    
  6.         }

3. timer interruptban:
  1. if(INTCONbits.TMR0IE && INTCONbits.TMR0IF)
  2. {
  3.         INTCONbits.TMR0IF = 0;
  4.         INTCONbits.TMR0IE = OFF;
  5.         T0CONbits.TMR0ON  = OFF;
  6.         TMR0H = 0x77;                           // 7ms-os idozito
  7.         TMR0L = 0x47;
  8.         Tick_5ms = TRUE;
  9. }

4. main-ben:
  1. if (Tick_5ms)
  2. {
  3.         Tick_5ms = FALSE;
  4.         Encoder();
  5.         INTCON3bits.INT1IF = 0;
  6.         INTCON3bits.INT1IE = ON;
  7. }

5. Encoder() fuggveny:
  1. if (!INTCON2bits.INTEDG1 && !CHA)
  2. {
  3.         if (CHB)
  4.                 encoder_counter++;
  5.         else
  6.                 encoder_counter--;
  7.         INTCON2bits.INTEDG1 = 1;
  8. }
  9. else if (INTCON2bits.INTEDG1 && CHA)
  10. {
  11.         if (!CHB)                              
  12.                 encoder_counter++;
  13.         else
  14.                 encoder_counter--;
  15.         INTCON2bits.INTEDG1 = 0;
  16. }


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.
(#) bernardo válasza szilva hozzászólására (») Ápr 11, 2010 /
 
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...
(#) szilva válasza bernardo hozzászólására (») Ápr 11, 2010 /
 
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.
(#) icserny válasza speki hozzászólására (») Ápr 11, 2010 /
 
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!)
(#) vicsys válasza speki hozzászólására (») Ápr 11, 2010 /
 
Mivel programoznád? Sajna tapasztalatból mondom a JDM-ek küszködnek vele. PICKIT simán viszi.
(#) speki válasza vicsys hozzászólására (») Ápr 11, 2010 /
 
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
(#) pixels válasza watt hozzászólására (») Ápr 11, 2010 /
 
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.
(#) icserny válasza speki hozzászólására (») Ápr 11, 2010 /
 
Idézet:
„elmegy 90 ig és ott le áll hibával”
Milyen hibával?
(#) speki válasza icserny hozzászólására (») Ápr 11, 2010 /
 
ilyen hibával képen látszik

hiba.JPG
    
(#) pixels válasza pixels hozzászólására (») Ápr 11, 2010 /
 
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.
(#) Attila24 hozzászólása Ápr 11, 2010 /
 
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
"
(#) speki válasza icserny hozzászólására (») Ápr 11, 2010 /
 
hiába szedem ki az első sort akkor is ugyan az a hiba jön elő
(#) icserny válasza speki hozzászólására (») Ápr 11, 2010 /
 
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?
(#) Hp41C válasza Attila24 hozzászólására (») Ápr 11, 2010 /
 
Szia!

Csak egy ötlet: ne használj nemzeti karaktereket állomány és mappa neveket....
(#) speki válasza icserny hozzászólására (») Ápr 11, 2010 /
 
visszaolvasásnál is csak 90 ig jut utnna hiba
(#) lidi hozzászólása Ápr 11, 2010 /
 
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ó
(#) icserny válasza speki hozzászólására (») Ápr 11, 2010 /
 
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...
(#) kiskacsa2009 hozzászólása Ápr 11, 2010 /
 
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!
(#) speki válasza icserny hozzászólására (») Ápr 11, 2010 /
 
nem tudom viszaolvasni
(#) vilmosd válasza kiskacsa2009 hozzászólására (») Ápr 11, 2010 /
 
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
(#) Hp41C válasza vilmosd hozzászólására (») Ápr 11, 2010 /
 
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.
(#) trudnai válasza kiskacsa2009 hozzászólására (») Ápr 11, 2010 /
 
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.
(#) kiskacsa2009 válasza trudnai hozzászólására (») Ápr 11, 2010 /
 
És az ICSP-n mit hova kellene kötni?
(#) gydanee válasza kiskacsa2009 hozzászólására (») Ápr 11, 2010 /
 
Következő: »»   723 / 1320
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem