Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Halihó
Dolgozok egy motor fordulatszám mérő programon. 1000-3000 RPM-et kéne mérnem. Kicsit elakadtam a szoftverrel (18f874)
ez a program részlet végzi a mérést. utána még van egy kis számolgatás meg az eredmény rs232 porton küldése, de az most lényegtelen, mert már annál hamarabb vannak gondok. a problémám az, hogy az eredmeny1 és eredmeny2 értékei megegyeznek, de időben együtt változnak. lehet én vagyok már vak hozzá és valami tök hülye hiba van benne amit ti messziről kiszúrtok, de kérlek segítsetek megoldani a problémát. A hozzászólás módosítva: Márc 20, 2014
Miért ne lenne ugyanaz. Gyakorlatilag egymás után lemented a CCP1 regiszterek tartalmát az eredmény változókba.
Az if az nem "Üres ciklus"! Egyébként ez a mérési módszer elég fapados (már ha tényleg várakozni akarsz a következő impulzus okozta megszakításig, amit most nem teszel meg a vélt szándékod ellenére, mert a program továbbhalad az if-en mindenféleképpen...) és eleve több sebtől vérzik.
Ha nem várakozni akartál, akkor meg hiányoznak a kapcsolók-jelzők, amik a folyamatot vezérelnék a végtelen ciklus ezen szakaszában. De jobb lenne ezt a megszakításban lekezelni, ahogy az illik egy haladótól! A hozzászólás módosítva: Márc 21, 2014
Idézet: „Az if az nem "Üres ciklus"!” Na ez az! Feltehetőleg while-t akart írni az if helyett.
A while-nak sincs értelme.
A ccp flag-et a ciklus után törli. Ha beugrik a flag átmenne végtelen várakozásba. Annak az üres részletnek így abszolut semmi haszna, maximum egy if utasítás ciklusidőre várakozik, de minek? A hozzászólás módosítva: Márc 21, 2014
Szerintem van, mert pont azért kell törölni, hogy akkor menjen tovább a következő részre, ha bejön a megszakítás. De akkor ezen a részen fog ácsingózni a program az idő 99%-ban, ezért ez a módszer nem jó, csak esetleg működik, önmagában.
Igazad van, a negációt figyelmen kívül hagytam. Na de mindegy, a mikrokontrollert nem semmittevésre tervezték
A hozzászólás módosítva: Márc 21, 2014
Idézet: „a mikrokontrollert nem semmittevésre tervezték” ...hanem alvásra, vagy mélyalvásra.
Rákötöttem egy D/A-t (MCP4922) és egy A/D-t (MCP3204) egy PIC-re (PIC18F4685) SPI-n keresztül. A D/A működik is gyönyörűen, de az A/D mindig csak nullákat ad vissza. Megméricskéltem, a tápfesze megvan (5,01V), referenciája szintén (4,1V) és a CH0 bemenetén van egy mérendő jel 1,61V személyében. Megnéztem szkóppal hogy mi van az SPI vonalon, ezeket kaptam. A sárga jelalak az órajel, a piros az egyiken az SDI, a másik szkópábrán pedig az SDO vonalat mutatja. Ahogy látszik, az SDO-n semmi nem jön ki a D/A-ból. Miért? Szerintem mindent jól csináltam...
Az MCP4922 melyik lábán méred az SDO -t? Az adatlapja szerint nincs neki ilyen lába...
Igen, az adatlap DOUT-nak nevezi. A 10-es láb.
DS22250A-page 1 -en látható ábra szerint a 10. láb a VoutB, a 2. csatorna analóg kimenete.
"Igen, az adatlap DOUT-nak nevezi. A 10-es láb." ez a 3204-re vonatkozik, es Te a 4922-re szeretned latni, es igazat adok Hp41C-nek, mert en sem latok SDO-t ill data out-ot.
Ja bocsi, félreolvastam a hozzászólásod! Reflexből azt gondoltam hogy az A/D-t kérdezted hiszen az a problémás.
A D/A, azaz az MCP4922 teljesen jól működik, azzal nincs semmi probléma. És neki nincs is SDO lába hiszen egy D/A-nak minek is legyen...
Az analog kimenet, mivel a 4922-es egy D/A konverter. Viszont az SDO az digitalis jel.
Akkor felrefogalmaztal: "Ahogy látszik, az SDO-n semmi nem jön ki a D/A-ból." "az A/D-t kérdezted hiszen az a problémás"
A hozzászólás módosítva: Márc 23, 2014
Opsz, valóban! Elnézést, A/D-t akartam írni.
Esetleg koze lehet az egesznek ehhez? " SPI serial interface (modes 0,0 and 1,1)" Mit takar a 0,0 illetve 1,1 mode?
Figured out
Idézet: „A D/A, azaz az MCP4922 teljesen jól működik, azzal nincs semmi probléma. És neki nincs is SDO lába hiszen egy D/A-nak minek is legyen...” Láncbafűzéshez... Ha amúgyis van 3 nem bekötött lába... A/D: A legelső adatbittel kellene elindítani. Szerintem bitsorrend hiba...
Nem hiszem hogy fordítva kellene küldeni a biteket, szerintem ez a mellékelt ábrán látszik. Már csak a START bit elhelyezkedése miatt is pont rossz lenne ha fordítva küldeném. Bár mondjuk nem tart semeddig, megpróbálom mindjárt...
A hozzászólás módosítva: Márc 23, 2014
Igen, fordítva küldve sem történt semmi. Viszont most megnéztem a CS vonalat is hátha esetleg az nem jó, de működik az is szépen; alapból 5V van rajta és ha meghívom az MCP3204-et kezelő szubrutint akkor 0V-ra vált majd a végén vissza 5V-ra. Szóval elvileg minden stimmel.
Még azt is megnéztem hogy nem-e rontottam el esetleg az Eagle-ben az MCP3204 makróját, azaz nincsenek-e felcserélve a nyákterven a lábaik de mind jó helyre van kötve.
A megfelelo bemenet van kivalasztva a 4-bol?
Igen. A mellékelt táblázatból kiolvasható hogy hogyan kell beállítani a biteket a CH0-on való méréshez. Az előző oldalon lévő hozzászólásomban feltöltött szkópábrán pedig látszik hogy azt is küldöm ki. És meg is mértem közvetlen az MCP3204 1-es lábán (az a CH0) hogy ott van-e a mérőjel és ott van (1,61V).
Egyébként ezt küldöm ki: 0000 0110 0000 0001 0000 0001 Ez látszik a szkópábrán is.
De most próbaképp meghívtam egymás után mind a négy mintavételező szubrutinomat (CH0-CH3) és mind h'0000'-al tért vissza. A szkópot átállítottam hogy ne az órajelre hanem az MCP3204 DOUT-jára triggereljen és nem kapott el semmit szóval abszolúte semmit nem hajlandó kiadni magából az A/D, mintha ott se lenne. Pedig szerintem mindent jól csináltam... tápfesz, órajel, bemenő jel, referencia és mérendő jel rendben, lábkiosztás stimmel, a frekvencia 2000-szer lassabb mint amekkora lehetne stb. Már csak arra tudok gyanakodni hogy rossz az A/D.
Persze, ezt is írtam egy korábbi hozzászólásomban.
Mekkora az órajel frekvenciája? A 6.2 pontban van minimum követelmény (min 10kHz).
A hozzászólás módosítva: Márc 23, 2014
A szkópábrámról ez is nagyjából leolvasható.
Kereken 1kHz. Igazad lehet! Én csak azt néztem hogy a táblázatban csak maximum érték van írva, ami az 5V-os tápfesznél 2MHz. Bár most nézem ott van mellette hogy "Note3" ami a 6.2-es szekcióhoz vezet és ott tényleg ír egy minimum 10kHz-es frekvenciát! Átírom 20kHz körülire vagy valami hasonlóra. Csak az a baj hogy azt a timert használom másra is úgyhogy más dolgokat is át kell variálnom. Na mindjárt megnézzük... |
Bejelentkezés
Hirdetés |