Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   477 / 1319
(#) watt válasza bundyland hozzászólására (») Máj 5, 2009 /
 
Nincs, de a gyártó oldalán rengeted - infó - van.
(#) Thor válasza watt hozzászólására (») Máj 5, 2009 /
 
Titkosnak annyiban titkos, hogy egy háromnegyedéig kész diplomamunka. Amiből már csak az usb értelmes lekezelése hiányzik, ezt szeretném megvalósítani a timer1-el, egész pontosan az USBTasks() periódikus hívogatását, ugyanis akad blokkolódó függvényem az alkalmazott rádiós megoldás miatt, amit másképpen viszont nem tudok megoldani.

Ellenben, ha esetleg valakinek van elfekvőben egy MCC18-as működő timer1-es kódja, azt megköszönném.
(#) bundyland válasza watt hozzászólására (») Máj 5, 2009 /
 
Köszi , ezt néztem , de ebből én nem tudtam konkrétumot kihámozni, gondoltam esetleg van bevált
párosítás konkrét alkatrész paraméterekkel.
Azért köszi!
(#) icserny válasza bundyland hozzászólására (») Máj 5, 2009 /
 
Vannak már külön topikok is hasonló témában:
Műveleti erősítő műszer elé DC!
Műveleti erősítő

Mellesleg furcsállom, hogy kapcsolási rajzot kérsz, de a mérendő jelről még semmit sem tudunk (AC/DC, 10V vagy 10000 V?)
(#) bundyland válasza icserny hozzászólására (») Máj 5, 2009 /
 
A mérendő feszültség nem is fontos mert osztót tudok csinálni én is hanem konkrétan az A/D és előtte álló műveleti erősítő érdekelne, azaz hogyan lehet mondjuk egy PIC-el 100Mohm-os bemeneti ellenállású mérőeszközt csinálni.
(#) trudnai válasza Prince86 hozzászólására (») Máj 5, 2009 /
 
Egy otlet: A timer mindig fusson! Abbol indulnek ki, hogy mikor a magnes elhalad, akkor ki kell olvasni a timert, es az elozo erteket kivonni, igy megkapod az aktualis idot. Ebbol sebesseget lehet szamolni ill egy korul fordulas mindenkeppen 1.7m lesz tehat a km szamlalo is menni fog.

Ha ez megvan akkor gondolkozz el mi tortenik mikor a timer tulcsordul, es hogy kezeled le a hibat ill milyen modszerrel lehetne a timer t 16 bitesrol 20, 24 ill 32 bitesre boviteni, melyik lenne a celszeru, es mi tortenik ha a piros lampanal varakozol, magyaran 5 percig nincs jel stb... Ezeket kellene eloszor atgondolni es megfogalmazni, es ha az megvan akkor nekiallni leprogramozni... Mikor ezzel a folyamat megszervezesevel foglalkozol akkor eloszor hagyd figyelmen kivul az erchitekturat, majd mikor a folyamat jonak tunik akkor folyamatosan bontsd le, hogy az adott folyamatot mikent lehetne az architekturan megvalositani...
(#) icserny válasza bundyland hozzászólására (») Máj 5, 2009 /
 
Idézet:
„hogyan lehet mondjuk egy PIC-el 100Mohm-os bemeneti ellenállású mérőeszközt csinálni.”

Ehhez sem a PIC-nek, sem az ADC-nek nincs köze. Egy kis bemenőáramú (Ib paraméter!) FET bemenetű műveleti erősítő kell a bemenet és az ADC bement közé, ahogy erről korábban már szó volt (Watt konkrét típust is ajánlott, de ezer mást is választhatsz).

Az alapkapcsolás pl. ez:
Kép: Hivatkozás
(#) icserny válasza trudnai hozzászólására (») Máj 5, 2009 /
 
A 24 bites ábrázolással a Patriot rakétát működtető szoftver csúnyán befürdött 1991 febr. 25-én: a véges számábrázolás miatt rosszul mérte be a közeledő iraki rakétát, s csúnyán mellélőtt. :yes:
(#) trudnai válasza icserny hozzászólására (») Máj 5, 2009 /
 
Idézet:
„A 24 bites ábrázolással a Patriot rakétát működtető szoftver csúnyán befürdött 1991 febr. 25-én: a véges számábrázolás miatt rosszul mérte be a közeledő iraki rakétát, s csúnyán mellélőtt.”


Hehe, ezt nem tudtam Vegulis a fejlesztok voltak a ludasak: Ugy kellett volna csinalni, hogy ha tulcsordulas van vagy barmi mas szoftver hiba akkor egyszeruenn vissza kellett volna iranyitani a raketat a fejleszto merno asztalahoz es igy az a mernok tobb hibat nem kovethetett volna el
(#) szilva válasza icserny hozzászólására (») Máj 5, 2009 /
 
Najó, de azért az a 24 bit nagyon sok mindenre elég. A PIC-pákámban is 24 biten ábrázolok egy csomó mindent, igaz, a számolások közben vannak 32 bites részeredmények is, ha jól emlékszem. Itt meg csupán egy számlálóláncról lenne szó.

Szerintem kb. a következőket kellene csinálni ebben a motoros progiban:

1. Engedélyezni a timer1 megszakítást, valamint elindítani a timer1-et állandóra. A beeső megszakításoknál egy 1 byte-os számlálót mindig megnövelni, ez lenne a számlálólánc harmadik byteja, így alakulna ki a 24 bites érték.

2. Minden INT megszakításnál kiolvasni a timer1 24 bites értékét és kivonni az "előzőleg eltárolt" 24 bites értékből, a "különbség"-et letárolni. Az aktuális értéket beírni az "előzőleg eltárolt" értékbe.

3. Továbbá minden INT megszakításnál egy "timeout" számlálót be kell állítani mondjuk 2-re.

4. A timer1 megszakításokban a "timeout" értékét csökkenteni kell, ha az még nem nulla.

5. A főprogram csinálja a többi dolgát, emellett mindig meg kell nézni, hogy a "timeout" nulla-e, mert ha igen, akkor áll a kerék. Ha "timeout" nem nulla, akkor lehet számolni az INT interruptban eltárolt "különbség" értékből a kijelzendő sebességet.
(#) watt válasza szilva hozzászólására (») Máj 5, 2009 /
 
Szerintem meg a CCP1 modult kéne beizzítani, és szépen kivonogatni a "két értéket" egyásból. Ha van TMR1 túlcsordulás, akkor azt számolni kell és hozzáadni a végső kivonáshoz. A TMR1 mindig járna, nem kell kikapcsolni soha. Néhány túlcsordulás után csak akkor számolna, ha a második impulzus érkezne. Szerintem ez a legjobb megoldás.
(#) Prince86 válasza watt hozzászólására (») Máj 6, 2009 /
 
Jók az 5letek de ma egy kicsit elment a kedvem az egésztől mert már egy egyszerű szöveget sem hajlandó kiírni.

Most nagyon felidegesített az biztos! Írtam egy másik programot amivel vizsgálni akartam a TMR1IF bebillenését úgy hogy ha bebillen kiír egy szöveget de nem működött. Aztán gondoltam megnézem hogy feltétel nélkül kiírja e a szöveget szóval kivettem a feltétel kezelést de így sem írt ki semmit a kijelző üres maradt.
És itt még szó sincs megszakításokról mert mindet tiltottam az elején!
Gondoltam vissza égetem az előző progit amiben benne van minden hátha a PIC rossz és most kiderül de nem mert azzal van kijelzés. Minden subrutint abból másoltam ki de ennél nincs kijelzés, nem csinál semmit és nem tudom miért! Valaki lát ebben valami fatális hibát amit nem veszek észre?

speed.asm
    
(#) potyo válasza Prince86 hozzászólására (») Máj 6, 2009 /
 
Nem tiltottad le az AD átalakítót, és annak vannak bemenetei a PORTE-n is. Az ADCON1 regiszterben állítsd át az összes lábat digitálisra.

Ami még ezután jöhet: kijelző kontrasztbeállítása jó? Biztosan vársz eleget két parancs kiküldése között? Hogy biztosra menj, minden CALL LCDPUTCMD után vagy előtt tegyél be egy 1ms-os várakozást. Azután ha működik, akkor ezeket szedegetheted kifelé.
(#) potyo válasza potyo hozzászólására (») Máj 6, 2009 /
 
Most nézem, hogy figyeled a busy flaget, szóval az 1ms-os várakozás tárgytalan.
(#) Prince86 válasza potyo hozzászólására (») Máj 6, 2009 /
 
Igazad van, pfff pedig a 628--asnál is ez szivatott meg!
Köszi a tippet! Működik!
Mostmár tényleg megnézem annak a flagnek a bebillenését : )
(#) Prince86 hozzászólása Máj 6, 2009 /
 
Megírtam a csak sebességmérő programot de továbbra sem hajlandó nullázni!

Kipróbáltam rögtön futó tmr1 el de akkor sem nullázott.
Megszakítással induló TMR1-el sem nullázott. Az érték változik de nem vagyopk biztos benne hogy jól mér. Amikor nem hívok több megszakítást túlcsordul a számláló mégsem nullázódik a kijelzés.
A flag beáll az biztos mert azt is teszteltem egy külön progival sőt kettővel is. Az egyikben megszakítás függően a másikban tiltott megszakításokkal és mindkét esetben beállt a flag.

A szimulátoron is látszik hogy lekezeli a feltételt és nulláz, csak a valóságban nem.

Itt a program felkommentezve, remélhetőleg átláthatóbb már mint volt!

speed.asm
    
(#) Prince86 válasza Prince86 hozzászólására (») Máj 6, 2009 /
 
Rájöttem!!! Mostmár nullázza a kijelzett értéket ha túlcsordul a tmr1. Ki kellett venni a nullázás után
a BCF PIR1,TMR1IF sort és áttenni a megszakításba!

Épp magyaráztam havernak a működését és közben rájöttem hogy nullázza az csak olyan gyorsan hogy nem veszem észre mert viszsabillentem a TMR1IF et és újra kiírja az osztás értékét a számláló futása alatt!
(#) trudnai válasza Prince86 hozzászólására (») Máj 7, 2009 /
 
Most akkor leirnad, hogy mit is csinalsz vagy mit is akarsz csinalni? Amit a mostani leirasodbol erteni velek, hogy:

1. Timer alapban nem fut
2. magneselhalad, interrupt beesik
3. ISR-ben timer nullaz es elindit
4. magnes megint elhalad, interrupt ismet beesik
5. timer kiolvas es leallit (?)
6. szamolgat
7. ha timer overflow interrupt van, akkor timer leallit
8. kiiras
9. --> 2.

Tehat minden 2. lepesben mersz?
(#) Prince86 válasza trudnai hozzászólására (») Máj 7, 2009 /
 
Működik teljes egészében mostmár csak a pontossági tesztek vannak hátra.

Hogy mit is csinálok?

Alapban TMR1 nem fut!
Elindul a kerék és elindul a TMR1 is!
Jön a következő fordulat akkor megállítom TMR1 et és kimentem az értéket ami bekerül az osztásba.
Aztán ha a kerék közben megáll akkor nullázom a kijelzést és megállítom tmr1 et.
Értelemszerűen a következő fordulat indítja el és az azutániban lesz mért érték.
Minden kiolvasás után nullázom a TMR1 et.
Minden körben mérek csak az elején kell 2 fordulat hogy elinduljon a számláló.
A mentés egyellőre úgy néz ki hogy minden kilométer után ment az eepromba! Elvileg 1000000 írást bír az eeprom ami elvileg egymillió kilométer. Szerintem az még egy autóban is becsületes szám nem hogy egy kismotorban. Bár ezen a mentésen még gondolkodok hogyan kéne! Gondoltam a sleepre is de akkor a kijelzőt meg a jeladókat meg a PIC et egymástól független tápra kell kötni. Olyan lenne mint Pl az autórádióknál hogy lenne egy vezeték ami az akkura menne közvetlen amit nem szakít meg a gyujtáskapcsoló(ez lenen a PIC tápja) és lenne a másik amit megszakít a gyulakapcsoló és ez lenne a kijelző meg a jeladók tápja. Amikor megszűnik a perifériák tápja ezt a PIC egyik lábán érzékelném és ennek megfelelően elküldeném aludni egy sleep el. Amikor ráadom a gyújtást és elindul a kerék akkor felébredne és működne rendesen. Viszont ehhez új panelt kéne maratnom : (
(#) trudnai válasza Prince86 hozzászólására (») Máj 7, 2009 /
 
Idézet:
„Alapban TMR1 nem fut!
Elindul a kerék és elindul a TMR1 is!
Jön a következő fordulat akkor megállítom TMR1 et és kimentem az értéket ami bekerül az osztásba.”


Magyaran akkor 1 korbe fordulast megmersz, utana 1-et nem mersz? Merthogy megallitod a timert...

Idézet:
„Aztán ha a kerék közben megáll akkor nullázom a kijelzést és megállítom tmr1 et.
Értelemszerűen a következő fordulat indítja el és az azutániban lesz mért érték.
Minden kiolvasás után nullázom a TMR1 et.”


Igen, tehat a kovetkezo fordulat inditja el... magyaran 1 fordulatot all a meres... Magyaran amit leirtam lepesekben azt csinalod...

Idézet:
„Minden körben mérek csak az elején kell 2 fordulat hogy elinduljon a számláló.”


...na es akkor most ez az en olvasatomban ellenr mond mindannak amit eddig leirtal, vagy valamit elnezek? Tehat 1. korben a szamlalot az interrupttal elinditod, az ketyeg, jon a masodik interrupt, leallitod, szamolgatsz, es amig megint korbe nem ert a kerek semmit sem csinal a szamlalo...
(#) Prince86 válasza trudnai hozzászólására (») Máj 7, 2009 /
 
Bocs azt kihagytam hogy amikor kiolvasom és nullázom újra el is indítom a számlálót!
(#) pixels válasza Prince86 hozzászólására (») Máj 7, 2009 /
 
Az eepromba mentésre lenne egy javaslatom:

Menjen a PIC egy leválasztott tápról, külön pufferrel, és figyeld az egyik lábbal, hogy mikor megy el a feszültség. Amikor elmegy a feszültség az összes külső alkatrész lekapcsol, de a PIC a saját pufferéről még járni fog egy ideig. Amikor elment a táp lesz annyi idő, hogy kimentsd a pontos állást (tehát nem csak a kilométert) és mentés után beküldöd a programot egy végtelen ciklusba, hogy amíg elfogy a feszültség a pufferről ne csináljon semmit. Így nem veszíthetsz a megtett távból 100 métereket.
(#) bundyland válasza potyo hozzászólására (») Máj 7, 2009 /
 
Szia !

Esetleg van ilyen rajzod SPI busz leválasztására is?
És hogy is néz ki ez ha több eszköz van optóval leválasztva, tehát mondjuk 4 AD , mert ugye az opto
nem fog tudni 3 állapotot felvenni.
(#) szilva válasza Prince86 hozzászólására (») Máj 7, 2009 /
 
A múltkor írtam, hogy én hogyan valósítanám meg ezt a sebességmérést. Most az új breadboardomon (Bővebben: Link) éppen a Hi-Tech ingyenes C-jét próbálgatom, és megírtam benne a sebességmérő progi vázát. A kijelzés előtti skálázások nincsenek benne, de a működés alapvetően kipróbálható, egy nyomógombról adok neki "kerékimpulzusokat". Forrás a mellékletben.

bb882.zip
    
(#) trudnai válasza bundyland hozzászólására (») Máj 7, 2009 /
 
Az SPI az nem igazan busz, az inkabb egy peer-to-peer. Az I2C-nel pedig az eszkozoknek cimei vannak igy az eszkoz tudni fogja mikor kell pofazia, nem kell annak tobb allapotot felvennie.
(#) bundyland válasza trudnai hozzászólására (») Máj 7, 2009 /
 
Ez igaz, de az SPI-re is felfűzhetek több eszközt és
CS lábbal ugye engedélyezem a chippet amelyikhez éppen szólok. De mivel optóval választanám le ezért
az eszköz kimenete vagy le vagy felhúzná a közös lábat(kat). Mondjuk ez 2 OC-s optoval megoldható 1 vezetékre , de hátha van egyszerűbb. Ha I2c-t választok
ott sem mondható egyszerűnek a leválasztás.
(#) cartmen hozzászólása Máj 7, 2009 /
 
Sziasztok! Az a problémám, hogy nem indul a program a PIC18F1320 on, amíg az ICSP -n nem piszkálom, pl. : beolvasom a flash tartalmát. Én már mindent kipróbáltam ami eszembe jutott. Valami ötleteket várok arra vonatkozólag, hogy mit tegyek , hogy magától elinduljon a progi! Köszi előre is!
(#) trudnai válasza cartmen hozzászólására (») Máj 7, 2009 /
 
Hat ennel azert kicsit tobbet kellene tudni errol. Kapcs rajz? Forras?

Amit latatlanban mondani lehet: LVP le van-e huzva 5-10k-val a foldre? Config biteknel MCLR, LVP, PWRTE stb ezek jol allnak-e? 100nF ra van-e teve _mindenutt_ a Vdd-Vss-re kozvetlen a PIC labara?
(#) cartmen válasza trudnai hozzászólására (») Máj 7, 2009 /
 
Hali! A rajzot nem adhatom oda sajnos.(Szakdolgozatom) De persze ilyen apróságokkal nem buktázok el. Egyre rosszabb, kezdetben mclr pin disableden volt, akkor történt amit az előbb leírtam, mert nem akartam külsőleg indítani, de ha most meg enabledre állítom, akkor meg ha meg akarom fogni az eszközt mindenféle random karaktereket küld el nekem a com ra.(belátom nehéz megérteni de a lényeg amit csinálnia kéne: A/D konverterel egyet majd azonnal elküldi az eredményt egy ftdi ic n keresztül a COM ra. egyszóval pofon egyszerű dolgot kéne csinálnia) szóval inkább aura érzékelő mintsem egy A/D konvertelő eszköz, én mlg nem láttam ilyet...
(#) icserny válasza bundyland hozzászólására (») Máj 7, 2009 /
 
Az optocsatolók általában nyitott kollektoros kimenetűek, így felfelé nem húznak, csak lefelé. Lefelé pedig csak akkor, ha a LED-jük aktív, ez pedig nem fordul elő akkor, ha az SPI eszköz CS lába nincs lehúzva. Nem látok tehát problémát a közösítésnél.
Következő: »»   477 / 1319
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