Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   540 / 1209
(#) progee hozzászólása Jún 24, 2014 /
 
Sziasztok!
Tudja valaki, hogy a Timer1 időzítőt hogyan kell helyesen beállítani 32khz-es kvarchoz, hogy ne másodpercenként (TMR1H := 0x80; TMR1L := 0; ) , hanem tized, vagy század másodpercenként legyen a megszakítás?
A hozzászólás módosítva: Jún 24, 2014
(#) usane válasza progee hozzászólására (») Jún 24, 2014 /
 
Microchip timer1 clock
A hozzászólás módosítva: Jún 24, 2014
(#) usane válasza usane hozzászólására (») Jún 24, 2014 /
 
Hozzá kell tenni, hogy óra kvarccal maximum 4 tizedes pontosságot tudsz kreálni ha 10 az x-ediken időzítést akarsz. Ha pontosat akarsz ezen a módon akkor nem órakvarc kell, hanem amiből le lehet osztani pontosan.Pl: 1,2,4,8.. stb, MHz
(#) progee válasza usane hozzászólására (») Jún 24, 2014 /
 
Ezer hála! Valószínűleg elég lesz ez a pontosság is.
(#) usane válasza progee hozzászólására (») Jún 24, 2014 /
 
Egy kis segítség.
A hozzászólás módosítva: Jún 24, 2014
(#) dani9228 hozzászólása Jún 24, 2014 /
 
Hello! Az lenne a kérdésem hogy a PIC18F45K22 -nél hogyan lehet beállítani hogy mindegyik port digitális legyen. A "D" port kivételével mindegyik port kimenet. MikorC proban programozok. Köszi!
(#) Pali79 válasza kissi hozzászólására (») Jún 24, 2014 /
 
Szia!

Értem. Próbálom megérteni, de kell valami amin el tudok indulni, ez tűnt a leghasználhatóbbnak.
Kezdeném az elejéről. A beállításokat értem, elindul a Timer1, jön a CCP-ről a megszakítás, elmenti az éppen aktuális értéket egy regiszterpárba, ha túlcsordul akkor beállítja a flag bitet. De mi van akkor ha két megszakítás között többször is túlcsordul? Mert ha jól értem kb 0,06 másodpercenként kellene egy kiolvasás, törlés, újraindítás ahhoz, hogy ne legyen túlcsordulás. Az a saját tervemnél maradva kb 70 km/h sebességnél jöhet szóba, ami kissé túlzás. Ennek jó ha 1/5-ével számolhatok, tehát legalább ötször, hatszor de inkább többször fog túlcsordulni. Ezt, hogy tudom figyelni, hogy hányszor csordul túl?
(#) Hp41C válasza Pali79 hozzászólására (») Jún 24, 2014 /
 
Minden túlcsorduláskor növelsz egy változót..
(#) Pali79 válasza Hp41C hozzászólására (») Jún 24, 2014 /
 
Sejtettem. Ezt megszakítással kellene megoldani? Vagyis azzal célszerű? Mármint úgy értem, hogy túlcsorduláskor megszakítást okoz és a megszakítási területen figyelem, hogy a timer miatt következett-e be és akkor léptetek egyet a változót?
(#) kissi válasza Pali79 hozzászólására (») Jún 24, 2014 /
 
Így van és a végén ennek a figyelembevételével számolod az eltelt időt és ebből a sebességet ( vagy amire szükséged van )!
De számolj először egy kicsit visszafelé: milyen pontosan akarsz mérni és ehhez milyen pontosan kell mérned az időt, majd ennek megfelelően válaszd meg a kvarc frekvenciáját és az esetleges osztásarányt!
pl. ha 1 km/h pontossággal akarsz mérni és 1 ms-nál 10 km/h, míg 1,1 ms 11km/h a sebességed ( és ez fennáll a teljes méréstartományban, hogy 0,1 ms-al változik nagyjából km-ként), akkor ha 0,01 ms pontosan mérsz, az már megfelel és így pl. 8-as előosztót használva az előzőben írt 1 us-os léptetés már 8 us-os lesz, ami 8-ad annyiszor okoz túlcsordulást ( azaz az általad írt 5-6 túlcsordulás nem lesz!) és így ezzel nem kell foglalkoznod!
Ezt persze át kell gondolni a feladattal kapcsolatban, csak arra akartam felhívni a figyelmedet, hogy érdemes átgondolni a feltételek alapján a megvalósítást!
(#) progee válasza Pali79 hozzászólására (») Jún 25, 2014 /
 
A példádat feltölthetnéd az oldalra.
Egyébként fordítva is megközelítheted a probléma megoldását.
A timer1-et beállítod másodpercenkénti megszakításokra,
A hall impulzusok érkezésekor pedig növelsz egy szám változót 1-el.
A timer1 megszakításakor kiíratod a változó értékét, és nullázod azt.
Így minden másodpercben megkapod, hogy hány impulzus jött a hall szenzortól, és így már ki tudod számolni a fordulatszámot ill sebességet.
Ez a megoldás akkor lehet hátrányos, ha gyakrabban akarod a sebesség kijelzését frissíteni mint 1mp.
(#) kissi válasza progee hozzászólására (») Jún 25, 2014 /
 
Idézet:
„Ez a megoldás akkor lehet hátrányos, ha gyakrabban akarod a sebesség kijelzését frissíteni mint 1mp.”
Ja, meg ha pl. traktor sebességet akar mérni, ahol a kerék kerülete pl. 4-5 méter és nem fordul 1s-ként egyet, mert ha ott 1s-ként 5 m-t megy, akkor már 18 km/h-val halad, azaz ha nem jön be az impulzus, akkor nulla a kijelzés, ha bejön, akkor 18 km/h! 1 imp/ford jeladónál "nyűgös" az általad leírt módszer, bár néha használható!
(#) Beles válasza matheattila hozzászólására (») Jún 25, 2014 /
 
Sikerült működésre bírni a gyro sensort. Nem is olyan rossz az eredmény szögmérésre. Persze csak demonstrálni jó, használni elég pontatlan lenne Bővebben: Link Na majd a fordulatszám mérésre kíváncsi leszek!
(#) matheattila válasza Beles hozzászólására (») Jún 25, 2014 /
 
Szia, nagyon jó lett, gratulálok. Ahhoz, hogy jobban látsd hogy mit is mér valójában és hogy milyen zajok jelennek megy amiket ki kellene valahogy szűrni sokat segítene ha keszítenél egy egyszerű grafikus felületet számítógépen amelyiknek folyamatosan küldené fel a PIC az adatokat (nyers adatoka, átszámított értékeket, bármit) és így jobban ki tudnád elemezni
Erre a legegyszerűbb a soros kommunikáció, pc oldali résznek pedig pl. LabWindows (CVI), ami hasonló pl a C#-hoz csak többnyire vezérlésekhez való (vannak benne gombok, kapcsolok, potméterek, egyszerűen kezelhető grafikonok (chart-ok), a LabView-nak testvére csak ezt c-ben kell programozni).
Ez csak egy tipp, ami lehet hogy sokat segíthet, legalábbis nekem segített annó
(#) Beles válasza matheattila hozzászólására (») Jún 25, 2014 /
 
Köszi Lehet az lesz, hogy írok hozzá C#-ban valamit. Labwindows-t még nem próbáltam. Van egy bluetooth modulom is, azzal tudnám az adatot küldeni a gép felé. Mert tényleg van pár dolog, amit nem értek még. Lehet az idő mérés van elrontva a programomban, mert az adatlap szerint 8,75mdps/digit a felbontás, de akkor nem lesz pontos. Kiegészítettem a kijelzést, hogy az aktuális fordulatszámot is írja ki. Referencia fordulatnak egy lemezlejátszót vettem alapul, annak elvileg tökéletes 33 fordulat/perc a fordulata . (Az oldalán van is ilyen kis glim lámpa, amivel a sebességet lehet látni, állni látszódnak a pöttyök a forgórész oldalán, ha pontosan forog). Szóval ráraktam a lejátszóra, de csak 198,00 dps helyett 193,8 dps-t mér.
De azt fogom csinálni, hogy egy hall sensoros fordulat mérőt is csinálok, és ahoz hasonlítom majd össze.
A hozzászólás módosítva: Jún 25, 2014
(#) Pali79 válasza kissi hozzászólására (») Jún 25, 2014 /
 
Nos számoltam egy kicsit a tanácsod szerint. A jármű kerekének a kerülete 116 cm, ami azt jelenti, hogy kb 862 fordulat kell 1 km megtételéhez. Ha 1 km/h sebességet veszek alapul akkor kb 14,37 f/min a tengely fordulata. Ez azt jelenti, hogy kb 4,2 másodpercenként jön egy impulzus. Egy kis túlzással ez az érték fordított arányban áll a sebesség növekedésével. Tehát ha jól számolok akkor 5 km/h-nál 0,84 másodpercenként jön az impulzus. Szívem szerint azt céloznám meg, hogy az 1 km/h-t is meg tudjam mérni, de ez a 4,2 mp elég hosszú idő.
Ami a kvarcot illeti, 4 MHz-esben gondolkodom, kisebb nem jöhet szóba, mert a PIC a CCP1-en egy PWM-et csinál aminek a frekvenciája így is elég kicsi a többi kötöttség miatt. Nagyobb értékű kvarc jó lenne, de az a hosszú idő miatt nem használna (gondolom).
(#) brato válasza Pali79 hozzászólására (») Jún 25, 2014 /
 
Nem tudod az impulzusok számát növelni?
Pl.:Hall elemnél több mágnes, optikai mérés?
(#) Pali79 válasza brato hozzászólására (») Jún 25, 2014 /
 
Most, hogy mondod! Hall helyett használhatnék rés optót. A tengelyem kb 28 mm átmérőjű, erre tudok tenni egy nagyobb tárcsát amibe elég sok rés elfér. Ezzel többszörösére tudom növelni az impulzusok számát. Mindjárt skiccelek is valamit!
(#) Pali79 válasza brato hozzászólására (») Jún 25, 2014 /
 
Na meg is született. 60 osztás elfér rajta, így talán könnyebb a számolás, de ennek még utána számolok majd. Köszi a tippet!
A hozzászólás módosítva: Jún 25, 2014
(#) kissi válasza Pali79 hozzászólására (») Jún 25, 2014 /
 
Ha ilyet csinálsz ( eltérően a kiindulástól ), akkor alkalmas időkapuval a beérkezett impulzusok száma akár a sebességet is adhatja !
Durván számolva ( finomítanod kell, csak az elv miatt!): a 862 fordulat óránként szerinted 1 km/h --> 14,4 ford/perc --> 0,24 ford/s --> 14,4 imp /km*s --> 1/14,4 s-ig (~ 70 ms ) mérve pont 1 imp/km, azaz kb. 70 ms-os kapuidőt használva ahány km/h-val mész, annyi impulzus jön be, így könnyű kijelezni ( mivel 1 imp/km, ezért adott esetben "ugrálhat" a kiírt érték --> pl. 4 v. 8 mintás átlag ! ) !

Remélem jó gondolatébresztőnek ?!
A hozzászólás módosítva: Jún 25, 2014
(#) Pali79 válasza kissi hozzászólására (») Jún 25, 2014 /
 
Köszönöm! Elgondolkodom rajta! Valami olyan osztás kellene kitalálnom, hogy nagyjából egész számok jöjjenek ki.
(#) kissi válasza Pali79 hozzászólására (») Jún 25, 2014 /
 
Ja-ja , de az idővel jól tudsz manipulálni !
A hozzászólás módosítva: Jún 25, 2014
(#) vicsys válasza Pali79 hozzászólására (») Jún 26, 2014 /
 
Rés optó egy járművön? Ráadásul- ha jól értem- traktoron? Nem fog az elkoszolódni az első 100m-en?
(#) Pali79 válasza vicsys hozzászólására (») Jún 26, 2014 /
 
Neeeem traktor! Ezt csak példának hozta fel a kolléga! Amiről szó van az egy saját készítésű háromkerekű járgány a gyermekeim részére. Gondoltam tanulás céljából teszek rá ezt-azt.
Egyébként valami hasonló megoldás van a kétkerekű motorokon - ha jól gondolom - az ABS jeladónak.
(#) kissi válasza Pali79 hozzászólására (») Jún 26, 2014 /
 
ABS jeladónak fogaskerekes induktív érzékelőket vagy a csapágyba beépített mágnesek hall cellás feldolgozását alkalmazzák... !
(#) Pali79 válasza kissi hozzászólására (») Jún 26, 2014 /
 
Lehetséges, hogy úgy van. Én csak a csatolt kép miatt gondoltam, nem néztem utána.

500_10.jpg
    
(#) don_peter hozzászólása Jún 26, 2014 /
 
Srácok a véleményetekre illetve tanácsotokra támaszkodnék a következő érdekességben.
Elkészítettem a Bináris óra programját ami működik is szépen, de olyan gondom van, hogy mikor világít egy LED akkor az utána lévő (ugyan abban a sorban) LED is halványan világít.
Olyan mint, ha a PIC nem tudná teljesen lekacsolni az aktív oszlop utáni oszlopot.

Mutatom a forrásom:
  1. // Definíciók
  2. #define OSZLOP  PORTB           // Tranzisztorok
  3. #define SOROK   PORTA           // LED meghajtás
  4.  
  5. while(1){
  6.                 for(i=0; i<6; i++){
  7.                         OSZLOP = (0x01<<i);     // Léptetjük az oszlopok szintjét
  8.                         if(i==0){
  9.                                 SOROK = ora_10;         // Sor bekapcsolása
  10.                                 __delay_ms(1);          // Késleltetünk
  11.                                 flag = SOROK;           // Alaphelyzetre állítjuk a sorok szintjét
  12.                         }else if(i==1){
  13.                                 SOROK = ora_1;
  14.                                 __delay_ms(1);
  15.                                 flag = SOROK;
  16.                         }else if(i==2){
  17.                                 SOROK = perc_10;
  18.                                 __delay_ms(1);
  19.                                 flag = SOROK;
  20.                         }else if(i==3){
  21.                                 SOROK = perc_1;
  22.                                 __delay_ms(1);
  23.                                 flag = SOROK;
  24.                         }else if(i==4){
  25.                                 SOROK = mp_10;
  26.                                 __delay_ms(1);
  27.                                 flag = SOROK;
  28.                         }else if(i==5){
  29.                                 SOROK = mp_1;
  30.                                 __delay_ms(1);
  31.                                 flag = SOROK;
  32.                         }
  33.                
  34.                         __delay_ms(1);          // Késleltetés
  35.                         flag = OSZLOP;          // Alaphelyzetre állítjuk az oszlopok szintjét
  36.                         __delay_ms(1);          // Késleltetés
  37.                
  38.                 }
  39.                
  40.                 __delay_ms(1);
  41. }


Próbáltam az időzítést növelni, de semmi eredmény.
Előre is köszi az észrevételeket....
(#) Buvarruha válasza don_peter hozzászólására (») Jún 26, 2014 /
 
Nem csak átvilágít a másik ledbe El vannak választva egymástól a ledek fizikailag?
(#) nedudgi válasza don_peter hozzászólására (») Jún 26, 2014 / 1
 
Előbb kapcsold ki a kijelzést, utána kapcsold be a LED-et.
(#) kissi válasza Pali79 hozzászólására (») Jún 26, 2014 /
 
Úgy látom, hogy az egy induktív érzékelő itt is !
Következő: »»   540 / 1209
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