Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Azt tudom hogy az F10-el fordítom le a programot!
Azt is tudom hogy az F7 el tudm lépésenként nézni mit csinál! A Wach window dolgot is ismerem amivel lehet nézni a regiszterek értékét. De azt nem tudom hogyan adjak a képzeletbeli PIC lábára impulzust hogy meghívódjon a megszakítás.
Ezért javasolta Trudnai, hogy a próba idejére tedd át a TMR1 bemenetét a belső, fosc/4-re és így fogod látni, hogy mi történik a TMR1-el!
F7 vagy F8 léptetés ( van különbség a szubrutinoknál!) és közben a TMR1L, TMR1H lép ( ezeket láthatod a WATCH-ban, majd túlcsorduláskor bebillen a jelzőbit és megszakítás ( ha már látod, hogyan működik, de unod a sebességet, akkor a WATCH-ban átírhatod a regiszterek értékét is; később lehet ügyesebben is, de tanulni ez a lépésenkénti módszer nagyon jó!). Nem néztem meg a programodat: ha a TMR1-nél van előosztó, akkor természetesen az is számít a léptetésénél ( próbánál állítsd 1:1-re!)! Steve Idézet: Különálló ADC is kapható 10-12-13 bites változatban a 8 lábú PIC áráért, vagy nem sokkal többért.„a felvetésből az tűnt ki, hogy a PIC A/D-je elég lenne, egy 8 lábú PIC meg fillérekbe kerül, ami szvsz nem mondható el egy precíziós mérőátalakítóról.” ChipCAD árlistán (most!): PIC12F683-I/P 270 Ft (10 bit ADC) MCP4725A0T-E/CH 220 Ft (12 bit ADC, I2C) MCP3301-BI/P 320 Ft (13 bit ADC, diff. bemenet, SPI) (Nettó árak) Idézet: „Az "egymástól független feszültségek" mérése nekem valahogy azt sugallta, hogy a földpontjuk (referenciapontjuk) sem közös.” Én is így értettem.
Ja értem már! Kipróbálom, köszi szépen mindenkinek!
Nahát, tényleg. Nekem még az ezer forint feletti mérő A/D-k voltak a gondolatomban. Ellenben hogy lehet pl. optókkal elválasztani egy I2C vagy SPI kommunikációt?
Van olyan funkció, hogy stimulus. Keress vissza sok szó esett erről, trudnai részletezte is és a HELP is segíthet.
De ebben az esetben az is lehetséges, hogy kézzel átbillented az INTF bitet. A TIMER1-nek miért engedélyezed a megszakítást? Ha okkal, akkor miért nem kezeled le külön a külső megszakítástól(egyáltalán nem kezeled le, ez nagyobb baj!)? Ezt már másodszor kérdezem, nem olvastad?
Igen ez esetben teljesen külön egységekben akarok(hatok) mérni ahol szükséges hogy teljesen függetlenek legyenek a mérőeszközök tehát az teljesen rossz megoldás hogy egy pic 4 analog lábával mérek!
Közben valóban megtaláltam a bemeneti impedanciát pic-eknél ami DVM használatra teljesen alkalmatlan! Tehát a legjobb megoldás továbbra is a n+1 pic tűnik , de valóban kell elé vagy műveleti erősítő vagy spéci AD de olyan AD-t nem találtam ami mondjuk 100MOhm bemeneti impedanciával rendelkezik. Nem is értem a panelműszereket hogy 1-2000Ft ért hogy hogy ilyen bemeneti ellenállással rendelkeznek.
Bocs olvastam csak, elfelejtettem leírni hogy engedélyezve van a periféria megszakításoknál de tiltva vannak a periféria megszakítások az INTCON ban. Véletlenül maradt úgy, de mikor nem volt engedélyezve sehol akkor sem viselkedett másképp. Tehát a Timer1 nem tud megszakítást okozni.
Értem, ettől függetlenül kezeld le a megszakításban a forrást, mert azt úgy illik, és azt is vizsgáld meg, hogy más forrás a tudtodon kívül nem kalimpál-e bele.
Idézet: „Nem is értem a panelműszereket hogy 1-2000Ft ért hogy hogy ilyen bemeneti ellenállással rendelkeznek.” Ha spéci IC van bennük ,akkor beleintegráltak egy FET-es OPA-t, ha nem, akkor ott van egy FET-es impedancia illesztő.
Szevasztok Srácok!
Egy PIC18f2550 timer1-ét szeretném működésre bírni sima 16 bites számláló módban, belső órajelről, hogy kb 1ms-onként kapjak egy interruptot. Beállítok mindent (szerintem mindent) és minden más működik ugyan úgy, mint eddig, de TMR1 interrupt még csak nem is keletkezik. Nem értem miért. Van esetleg valami speciális dolog amit be kell kapcsolni, esetleg ki? Másik kérdés, hogy az RC0 és RC1 lábakat jól gondolom, hogy csak akkor kapcsolja át a TRISC-t felülbírálva bemenetre, ha azt állítom órajelforrásnak? Előre is köszi a válaszokat. Üdv: N Idézet: „Van esetleg valami speciális dolog amit be kell kapcsolni, esetleg ki?” Látatlanba mégis hogyan segítsen bárki is? Idézet: „szerintem mindent” Vagy ez kéne, hogy mondjon nekünk valamit??
Bocs, erre gondoltam:
T1CONbits.RD16 = 1; // Enables register read/write of Timer1 in one 16-bit operation T1CONbits.T1RUN = 0; // Device clock is derived from another source T1CONbits.T1CKPS1 = 1; // 11 = 1:8 Prescale value T1CONbits.T1CKPS0 = 1; T1CONbits.T1OSCEN = 0; // Timer1 oscillator is disabed T1CONbits.T1SYNC = 1; // This bit is ignored. Timer1 uses the internal clock when TMR1CS = 0. T1CONbits.TMR1CS = 0; // Internal clock (FOSC/4) IPR1bits.TMR1IP = 0; // TMR1 int low priority PIR1bits.TMR1IF = 0; // TMR1 int flag clear TMR1L = 0x00; TMR1H = 0x00; T1CONbits.TMR1ON = 1; // Enables Timer1 Az alacsony szintű interruptban pedig: if(PIR1bits.TMR1IF) { PIE1bits.TMR1IE = 0; // TMR1 int disable PIR1bits.TMR1IF = 0; // TMR1 int flag clear TMR1L = 0x00; TMR1H = 0x00; PORTA |= (1<<3); PIE1bits.TMR1IE = 1; // TMR1 int enable } A PORTA csupa kimenet.>>
Csak gyorsan átfutottam, de nem láttam a Global Interrupt Enable jelzésű bit piszkálását.
Igaz, erről nem írtam.
RCONbits.IPEN = 1; // enable interrupt priority INTCONbits.GIEL = 1; // peripherial int enalbe Ezek a kezdeti initben vannak persze, az előző beállításokkal együtt. A TMR0 tökéletesen működik a lehetőségekhez képest hasonló beállításokkal. Mivel az IPEN = 1, szerintem nem kell a GIEH-nak beállítva lennie ahhoz, hogy alacsony szintű interrupt generálódhasson. Esetleg tévedek? Idézet: „Esetleg tévedek?” Esetleg nézd meg a logikai vázlatot a megszakításokról az adatlapban!
Prince86, probaldd meg teljesen elolrol kezdeni az egeszet! Irdd fel milyen folyamatok zajlanak, probaldd meg lemodellezni papiron (folyamat abra, UML es/vagy pseudo kod). Ha ez megvan akkor nyilvan kiderul milyen funkciok tartoznak egymashoz, azokat tagpolva/strukturalva epitsd fel a programod es mindent kommentezz fel, hogy mit szeretne az adott program reszlet csinalni...
Egyszerre csak egy funkciot epits bele es minden beepites utan csinalj funkcionalis tesztet. Ha az mukodik, akkor tedd bele az ujabbat -- mivel elotte mar megtervezted a programod felepiteset ez a fajta megkozelites nem fogja zavarni a meglevo funkcionalitasokat. Hogy miert mondom ezt? Mert nezegettem a programodat es bevallom eleg nehezen attekintheto, igy nehez is megmondani, hogy miert hibas. Vannak elkepzelesek, de ha en egy cegnel dolgoznek es a fonokom azt kerne razzam ezt rendbe inkabb irnek egy ujat. Ezt tenyleg nem piszkalodasbol irom, csak remelem megerted igy, hogy miert fontos a szoftver fejlesztesben a strukturalcio (illetve az objektumokban torteno gondolkodasmod). El kell peldaul azt is dontened, hogy esemeny vezerelt-e a szoftvered vagy pollozasos, vagy, hogy kell-e statusz gep avagy sem.
Nem jött össze ez a stimulus dolog nem hívta meg a megszakítást a szimulátorban de kipróbáltam egy két dolgot. Pl úgy indítottam el a szimulátorban hogy fusson a tmr1 és amikor túl csordul beáll 1be a TMR1IF és le is kezeli a feltétel kezelésem és ennek megfelelően nullázza a kijelzést.
Csak a valóságban nem! Letiltom a megszakítást a TMR1 részéről teljesen és csak az INT megszakítás marad! DE hogyérted hogy kezeljem le a forrást? Amikor még volt a nullázógombbal hívható megszakítás akkor is megnéztem hogy ki hívta és az annak megfelelő program részre ugrottam. Akkor is azt mondtátok nem jó. Akkor hogyan jó?
Biztosan félreértetted a többieket, de mindegy, lényeg, hogy a megszakítások lekezelésében meg kell viszgálni, hogy a megszakítást mi okozta. Ezt a jelző bitjével, ez esetben az INTF bit vizsgálatával lehet, de csodálkoznék, ha ezt nem tudnád.
Tehát:
A hiba kezelésbe tegyél egy LED-et, aminek nem szabad kigyullandia, ha csak az RB0 INT okoz megszakítás! Ha még is, akkor valami árulás van, és az zavarja össze a programodat.
Igaz, tévedtem, és bocs a fölös hülye kérdésekért, ellenben endedélyeztem az GIEH-t is és ettől függetlenül ugyan úgy nem generálódik interrupt.
Igen, igazad lehet mert mintha pl. az ICL7106-ban
látnék egy feszültségkövető OPA-t.
Erre már én is gondoltam hogy újat kéne írni teljesen!
Az elképzelésem az volt ebben a programban hogy a kerékre teszek egy mágnest és a villára egy hall jeladót. Amikor áll a kerék akkor csak a főprogram fut amiben benne vannak az aritmetikai műveletek, a kijelzést vezérlő műveletek és az AD-val megvalósított hőfokmérés. Valamint itt ellenőrződik hogy kell e menteni a megtett km értéket vagy sem. Amikor a kerék forogni kezd meghívódik a megszakítás (INT) és a megszakításba írt program rész megnézi hogy a timer1 be van e kapcsolva, ha be van kapcsolva akkor megállítja és kimenti belőle az értékeket amit majd a főprogram a sebességszámításnál behelyettesít az osztásba. Amikor a kimentés megtörtént akkor újra indítja a timer1-et és jön a távolságmérő rész ami hibátlanul működik is most. Amikor ez lefut még a végén megnézi kell e állítani a mentés jelző flaget és visszatér a főprogramba. Ha túlcsordul a tmr1 akkor ezt a főprogram érzékeli és nullázza a sebesség értékét valamint megállítja a tmr1-et. Ez lett volna most az elképzelés, de szerintem is jobb lesz kitalálni valami jobb programot. Ezelőtt még nem nagyon írtam programot semmilyet és most azért van ez a szerencsétlenkedés, de valahol el kell kezdeni : )
Másképpen nem nagyon lehet ilyen nagy impedanciát megoldani. Nem láttam még olyan A/D-t, amihez nem kell illesztő, ha DMM-et akar valaki építeni. Vannak ilyen OPA-k és kapcsolások a microchiptől is(pl. MCP6294).
Ha nem titkos a forrás, kérlek csatold(ne másold!), akkor biztos többen is tudnak segíteni, ha lehet.
Nincs esetleg kéznél véletlenűl ilyen kapcsolásod ?
Az elképzelés talán még jó is, de a program nem azt csinálja amit szeretnél, és a hibát csak akkor találod meg, ha módszeresen kizárod úgy, hogy jelzőket teszel a programba, hogy meddig jut el. Ezt LED-el lehet megtenni, vagy szimulátorban követni a dolgokat. Ezt mi is éppen így csináljuk, nekünk sem megy elsőre egy program, csak ritkán!
Lényeg, hogy mi csak ránézünk a programodra, és ha vélünk hibát, jelezzük. Mi nem fogjuk felépíteni az áramköröd és nem fogjuk végigkeresni a lehetséges hibákat, ezt neked kell megtenned!
Sziasztok. Készítettem egy pic vezérlőt ULN 2003 IC hajt reléket a relék 220 at kapcsolnak. Tehetem egy panelra a 220at a pic 5 voltjával vagy külön készítsek relé panelt árnyékolva? Több pickes kapcsolást építettem de eddig a két feszt együtt nem kellet használnom így nincs tapasztalatom .
A hálózati zavarok a relé ívképződése aggaszt, véletlen indittás nem lehet. Akinek van ebben tapasztalata, kérem lásson el jó tanáccsal. Előre is köszönöm.
Igen persze hogy nekem kell, ezzel ninc is gond mert így tanulom meg használni a PIC-et. Részenként letesztelgetem és kiderül mi lesz. Mármint írok 2 programot egy sebességmérőt és egy távolságmérőt a mentéssel és egyenként letesztelem őket és ha van hiba egyenként javítom majd a végén egybe írom a progit és feltehetőleg menni fog.
Köszi a tanácsokat mindenkinek majd írom mire jutottam. |
Bejelentkezés
Hirdetés |