Fórum témák
» Több friss téma |
Még nincs meg de PIC16F887, PICKit2, vagy annak valamelyik olcsóbb klónja lessz.
Nem igazán értem. A DIP tokos PIC-nek 2,54mm-es a lábtávolsága, még egy vezetéksávot is át lehet vinni a kettő között, anélkül, hogy összeérnének. Hozzáteszem, hogy nekem sosem jutna eszembe a pic-et forrasztani, mindig foglalatot használok.
HeStore -ból vegyél univerzális nyák -ot. A PICkit2 -be PIC18F2550 kell.
A hozzászólás módosítva: Dec 11, 2015
Szia!
Köszönöm, egyelőre a How_I_Am se akar menni, már kiprobáltam StartI2C,write.. read.. stop.... kombinációt mindenféle képpen,de 255 kapok..
Ha ez az IC ugyanazon az I2C buszon van, amelyen a hőmérődet sikerült működésre bírni, akkor vizsgáld meg a gyorsulásmérő IC-T! Nincs-e elforgatva? Nincs-e zárlat a lábak között? Tápfeszültség, föld eljut hozzá? SA0 mérhetően földön van?
A programban pedig a MasterWriteI2C1() hívások után figyeld a visszatérési kódot, vagy legalább a I2C1STATbits.ACKSTAT állapotát! A hozzászólás módosítva: Dec 12, 2015
Uraim, PIC-el szeretnék egy motor sebességét, fordulatát mérni.
Beépített HALL szenzoros a motor, így a jelek megvannak. Egy fordulatra 24 jel érkezik ezt egy külső interrupt figyeli. Minden lefutó élre egy magszakítás indul, amellyel a kapott adatokat begyűjti majd egy 1mp-es timer-el mérve kiértékeli a sebességet. A baj, az hogy a HALL szenzor nem csak egy rövid impulzust ad, ezért lassú fordulatnál igen pontatlan lenne a mért és kiértékelt eredmény. Szélsőséges és elnagyolt példa: Ha mondjuk egy jel a motor fordulata miatt eltart 1mp-ig, akkor a folyamatos megszakítás miatt teljesen hibás adatot kapok, hiszen ebben a megszakításban növelek egy változót amelynek egy megszakításban csak egyszer szabadna lefutnia. A kérdésem ezzel kapcsolatban lenne: Hogyan tudom megoldani, hogy a HALL szenzor csak egy nagyon rövid ideig adná az impulzust, tehát minden impulzus ezzel csak 1 értéket növelne a változón? Eddig próbálkoztam szoftveres módon történő megoldásokkal, de eddig még nem tudtam eredményes megoldást találni. A másik ötletem egy kicsi kis elektronika lenne ami, a halszenzor jelét egy röpke kis impulzusként továbbítaná a PIC bemenetére, így elérve, hogy egy több ideig is eltartó HALL szenzoros impulzus is csak egy azonosan rövid ideig tartana a többivel egyformán. Ha szoftveresen nem lehet megoldani a dolgot, akkor esetleg kérnék segítséget egy ilyen elektronika elkészítésére. Nem tudom mennyire érthető a kérdésem, ha nem akkor kérdezzetek és megpróbálom kifejteni. előre is köszi.
A lefutó él figyelésnek éppen az lenne a lényege, hogy az élt figyelje, nem? Gondolom a hall alapból magas szinten van egy felhúzó ellenállattal, és ha jön a mágnes, alacsonyra húzza. Attól, hogy sokáig van alacsony szinten még nem szabadna több megszakítás generálnia szerintem.
Szia!
Bár még nem foglalkoztam konkrétan ilyen motorral, illetve valami diagram hiányában is kicsit nehezebb elképzelni a dolgot, de ha jól gondolom, akkor 1 fordulat alatt 24 "tüskéd" van. Ezeknek a tüskéknek a szélessége változik a motor fordulat függvényében. Ha így van, akkor én csak annyit csinálnék, hogy pl. a lefutó éleket ahogy írtad számolod, és minden 24 után megnézed mennyi idő telt el, majd nullázod a timer-t. Persze figyelni kell arra, ha túlcsordul a timer, illetve a timerrel léptetett számláló.. attól függ hogy ezt hogy valósítod meg. Szerk.: most nézem, folyamatos megszakítást írtál. Ezt nem értem, kifejtenéd bővebben? A hozzászólás módosítva: Dec 12, 2015
Üdv
Itt Péter Ebike kütyüt akar alkotni , átmérő * fordulat . Péter figyelem Ebike , nagyon változó a Hall szenzorokra menő fesz ( 5 - 12 Volt lehet ! ) ! A Hall nem 0 Voltra kapcsol ( 0.15 - 0.25 V) . Védelemre figyelni soros ellenállás + zéner . Még ajánlom MC33035 egyes vezérlőkben ez az ic van Bővebben: Link , elég sok infó van benne . Üdv. A hozzászólás módosítva: Dec 12, 2015
Sajnos pont ez a bajom, hogy folyamatosan generálja a megszakításokat.
Figyeltesd IOC-vel. Az csak állapotváltozásra reagál. Megszakításban ellenőrizd az állapotát, és ha nem a neked kellő állapotban van, ugorj ki a megszakításból.
Konkrétan melyik kontroller? Hasonlóba belefutottam, nem értettem amíg meg nem néztem az Errata c. doksit. A megszakításba kellett egy extra vizsgálat a port állapotáról. Már nagyon nem emlékszem, melyik kontroller volt.
Igen jól érted.
24 tüském van egy körbeforgással. Igen ebben is igazad, van, hogy ezeknek a tüskéknek változik a hosszúsága. Majdnem én is így csinálom, ahogyan íród csak fórdítva. Jönnek a tüskék, ekkor a megszakítás elindul és egy változót megnövel. 1 másodperces timer pedig kiértékeli és nullázza a számlálót. A gond az, hogy a kerék állásától függően lehet ez a tüske végtelen is, és ekkor folyamatosan generálja egymás után a megszakításokat ami nagy probléma. Kérésedre kifejtem: Ha a motor gyorsan forog akkor ez a gond nem jön elő, de ha nagyon mondjuk csak alig forg akkor egy-egy tüske eltarthat akár (hogy érezhető legyen) 1mp-ig is. Ekkor 1mp-en keresztül folyamatos megszakítást generál, ez alatt az idő alatt kb 30-at, pedig csak 1-et kellene jelentenie. Kimértem műszerrel a működést. A jelek 5v-0v közt mozognak. Azt hiszem 5v alapból megvan és mikor jön a jel, akkor elejti a feszültséget és leesik nullára.
PIC18F46K22 @64MHz
INT0 vagy is B0 bemenet, és felhúzva 10K ellenállással 5v-ra, hogy ne lebegjen. Próbáltam felhúzó nélkül is..
Ha újra és újra beugrik megszakításba, miközben a jel nem változik, akkor egész biztos, hogy nem fel- vagy lefutó élként figyeled. Valami nem jól van beállítva.
Nem nagyon értem a dolgot ha egy tüskke végtelen és INT0-ra van kötve ami élvezérelt akkor amíg nem fut le újra a jel addig nem generálhat újra megszakítást. IF bitek törölve vannak ?
A hozzászólás módosítva: Dec 12, 2015
Miért generálja folyamatosan a megszakítást, ha nincs élváltozás? Milyen megszakítást használsz?
Szerk.: na közben a többiek megelőztek. A hozzászólás módosítva: Dec 12, 2015
Lehet nem vettem észre valamit vagy nem jól állítottam be:
Mutatom az erre irányuló programrészt és beállítást: Megszakítás: (B0 == INT0 == Bemenet és felhúzva 5v-ra 10K-ossal)
Iterrupt:
Ezen kívűl még van egy Timer0, de azt nem teszem be, hogy ne zavarjon be és az biztosan jól működik. Ha esetleg túlcsordulna akkor leállítja a megszakítást, persze ezt kezeltem főprogramban is, de nem volt megoldás és kivettem. Itt még itt maradt, de az 1mp-es Timer0 úgy sem engedi eddig elszámolni a HALL változót. Azért a kétszintű megszakítás, mert a Timer0 alacsony szintű interruptot generál. A hozzászólás módosítva: Dec 12, 2015
Amit lehetett azt beállítottam és remélem jól...
Analog-ot csak 1-et használok többi kikapcsolva.
A kommentelés már régi, lehetnek változások. Amit hirtelen észrevettem azokat javítottam. A hozzászólás módosítva: Dec 12, 2015
Itt elviekben minden rendben van egy ddolgot próbálj ki vedd le a hall szennzort és tegyél oda egy tactos gombot ha úgy is megállás nélkül megszakkítás történik akkor valami nincs kezelve a szoftverbe.
Holnap utána nézek, ma már pihi mert kicsit kivagyok már agyilag..
Azt hittem ez egy egyszerű dolog lesz, és lám ez fog meg
Miért nem számoltatod az impulzusokat simán egy timerrel, amit másodpercenként kiolvasol? Nem tudom mit jelent a "kis" sebesség, de így 2,5 RPM-enként tud mérni. Ha pontosabb kell az impulzusok közötti időt kell mérni és abból számolni.
Ugyan az lenne az eredmény amit feljebb leírtam, és a megszakítás biztosabb szerintem.
Egyrészt kiderülhet, hogy a hall jelén van-e valami tüske (vagy szkóppal ránézni), vagy a szoftver játszik veled, másrészt hardverből számol és ezért nem kell foglalkozni a konkurens IT-k kezelésével.
Ha engedélyezett, de kiszoláglatlan kérés van, állandóan a megszakítás kiszolgáló fut.
A hozzászólás módosítva: Dec 13, 2015
Bár valószínűleg nem sok vizet zavar, de azért az interrupt flag bit törlését rakd egy blokkal beljebb:
Szerk.: elvileg megszakításban nem ajánlatos megszakítást ki/be kapcsolni, bár ez lehet csak a globális engedélyezésre érvényes, még nem jártam utána.. De lehet hogy ezt a részt inkább ki kéne szervezni a főprogramba:
A hozzászólás módosítva: Dec 13, 2015
Ki fogom próbálni, bár szerintem sem lesz sok változás
A megszakítás kikapcsolását már sok esetben használtam így, például a wake up funkciónál, vagy éppen a forrasztóvezérlőmnél. Eddig nem volt gond vele, nagyon szépen dolgoznak azóta is. Ennek ellenére, ki fogom venni onnan mert elvileg szükség sincs rá, mivel Timer0 1mp-ént, úgy is törli HALL változót.
Az /SS láb vezéreli az SDO kimenetet, tehát ha /SS engedélyezve van, akkor /SS magas állapotában az SDO kimenet nagyóhmos. Ha viszont tiltva van, akkor az SDO állandóan aktív.
Az egyes adatbitek beállítástól függően az SCK jel fel- vagy lefutásánál mintavételeződnek ill. tolódnak ki. 8 vagy 16 adatbit beérkezése után az SPIxRBF magas állapota tudatja hogy a kész adat kiolvasható a vételi tárból.
Az SS láb működését értem, sőt használom is az SPI -t.
Kérdésem arra az esetre vonatkozott mikor úgy megy a busz hogy a Slave eszköz nem igényli az SS jelet (Lásd a mellékelt képet) . Ekkor hogyan tudja mikor kapott adatot? |
Bejelentkezés
Hirdetés |