Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   476 / 1319
(#) Prince86 válasza watt hozzászólására (») Máj 4, 2009 /
 
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.
(#) kissi válasza Prince86 hozzászólására (») Máj 4, 2009 /
 
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
(#) icserny válasza szilva hozzászólására (») Máj 4, 2009 /
 
Idézet:
„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.”
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.

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.
(#) Prince86 válasza kissi hozzászólására (») Máj 4, 2009 /
 
Ja értem már! Kipróbálom, köszi szépen mindenkinek!
(#) szilva válasza icserny hozzászólására (») Máj 4, 2009 /
 
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?
(#) potyo válasza szilva hozzászólására (») Máj 4, 2009 /
 
I2C

SPI-t nem ilyen bonyolult, nem kétirányúak a vonalai.
(#) watt válasza Prince86 hozzászólására (») Máj 5, 2009 /
 
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?
(#) bundyland válasza szilva hozzászólására (») Máj 5, 2009 /
 
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.
(#) Prince86 válasza watt hozzászólására (») Máj 5, 2009 /
 
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.
(#) watt válasza Prince86 hozzászólására (») Máj 5, 2009 /
 
É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.
(#) watt válasza bundyland hozzászólására (») Máj 5, 2009 /
 
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ő.
(#) Thor hozzászólása Máj 5, 2009 /
 
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
(#) Norberto válasza Thor hozzászólására (») Máj 5, 2009 /
 
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??
(#) Thor válasza Norberto hozzászólására (») Máj 5, 2009 /
 
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.>>
(#) Norberto válasza Thor hozzászólására (») Máj 5, 2009 /
 
Csak gyorsan átfutottam, de nem láttam a Global Interrupt Enable jelzésű bit piszkálását.
(#) Thor válasza Norberto hozzászólására (») Máj 5, 2009 /
 
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?
(#) potyo válasza Thor hozzászólására (») Máj 5, 2009 /
 
Idézet:
„Esetleg tévedek?”


Esetleg nézd meg a logikai vázlatot a megszakításokról az adatlapban!
(#) watt válasza Thor hozzászólására (») Máj 5, 2009 /
 
Minden bizonnyal tévedsz.
(#) trudnai válasza Prince86 hozzászólására (») Máj 5, 2009 /
 
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.
(#) Prince86 válasza watt hozzászólására (») Máj 5, 2009 /
 
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ó?
(#) watt válasza Prince86 hozzászólására (») Máj 5, 2009 /
 
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:

  1. BTFSS INTCON,INTF
  2. GOTO   következő forrás vizsgálat, vagy hiba keresés
  3. RB0/INT Lekezelés
  4. ....


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.
(#) Thor válasza watt hozzászólására (») Máj 5, 2009 /
 
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.
(#) bundyland válasza watt hozzászólására (») Máj 5, 2009 /
 
Igen, igazad lehet mert mintha pl. az ICL7106-ban
látnék egy feszültségkövető OPA-t.
(#) Prince86 válasza trudnai hozzászólására (») Máj 5, 2009 /
 
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 : )
(#) watt válasza bundyland hozzászólására (») Máj 5, 2009 /
 
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).
(#) watt válasza Thor hozzászólására (») Máj 5, 2009 /
 
Ha nem titkos a forrás, kérlek csatold(ne másold!), akkor biztos többen is tudnak segíteni, ha lehet.
(#) bundyland válasza watt hozzászólására (») Máj 5, 2009 /
 
Nincs esetleg kéznél véletlenűl ilyen kapcsolásod ?
(#) watt válasza Prince86 hozzászólására (») Máj 5, 2009 /
 
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!
(#) poros hozzászólása Máj 5, 2009 /
 
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.
(#) Prince86 válasza watt hozzászólására (») Máj 5, 2009 /
 
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.
Következő: »»   476 / 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