Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1156 / 1320
(#) Melphi hozzászólása Dec 20, 2013 /
 
Sziasztok!
Valaki lenne olyan kedves és meg mondaná hogyan tudok 18F25K80 at programozni, mert a PK2 nem ismeri fel a PIC-et, álítolag van valami kiegészítő amivel tudja, próbáltam beilleszteni a könyvtárába de semmi változás továbbra sem ismeri fel?
Köszönöm a segítségeteket.
A hozzászólás módosítva: Dec 20, 2013
(#) usane válasza Melphi hozzászólására (») Dec 20, 2013 /
 
Nem beilleszteni kell, lecserélni a meglevővel. Van egy olyan hogy PK2DeviceFile.dat, azt kell erre lecserélni. Gondolom ezt letöltötted valahonnan.
(#) Melphi hozzászólása Dec 20, 2013 /
 
Szia!
Kicseréltem, de nem történt semmi?
(#) usane válasza Melphi hozzászólására (») Dec 20, 2013 /
 
PK2DeviceFile.dat <- ezzel a névvel? A verziónevet töröld ki a végéről. Ha nem megy próbálj egy másikat letölteni. Sajnos tesztelni nem tudom neked, PK3-am van.
Próbáld ezt.
(#) Melphi hozzászólása Dec 21, 2013 /
 
Köszönöm
(#) Melphi válasza usane hozzászólására (») Dec 21, 2013 /
 
Szia!
Igen így sikerült, csak az volt a lényeg, hogy az új dat file-t át kellet nevezni a régi dat file nevére, és lás csodát bent van a listába ez a pic is, igaz még pic-et nem csatlakoztattam, de majd meglesem.
Még egyszer köszönöm!
(#) janimester hozzászólása Dec 21, 2013 /
 
Üdv. Ezt a függvényt szeretném átalakítani úgy , hogy pár nyomógombbal tudjam a függvényben levő hexadecimális értéket változtatni fel és le teszem azt 45 és 90 fok között és egy nyugtázó gombbal elmenteni az eeprom memóriában amit majd a következő indításkor a szenzor programja fog meghívni az eepromból.Mivel most csak azt tudtam megoldani hogy egy fix előre megadott értéken kapcsoltatok egy kimenetet. A progi 18f4550-en készülget. Előre is köszönöm a segítséget.
  1. if(temp >= 16*65 )       //hűtőventillátor bekapcsolása 65C*-nál.
  2.     {
  3.     PORTA.B2 = 1;
  4.     }
  5.     else
  6.     PORTA.B2 = 0;
A hozzászólás módosítva: Dec 21, 2013
(#) icserny válasza janimester hozzászólására (») Dec 21, 2013 /
 
PIC18-nál a kimenetvezérléshez a LATA regisztert kellene használni a PORTA helyett.
(#) janimester válasza icserny hozzászólására (») Dec 22, 2013 /
 
Ez oké is , de még ha csak ennyi lenne
(#) usane válasza janimester hozzászólására (») Dec 22, 2013 / 1
 
Hol akadtál el?
65 helyére egy változó. Csinálsz 3 bemeneti portot, és figyeled őket megszakítással, vagy szerintem a 4550 tud interrupt on change-t is, de ez nem biztos nem néztem meg.
Bemenet 1 ->UP, Bemenet 2 -> DOWN, 3-as bemenet nem is szükséges, megcsinálhatod késleltetéssel is a nyugtázást.
Nagyjából ennyi, finomítva kicsit hosszabb.

szerk.: Na megnéztem, PortB-n tud inerrupt on change opciót.
A hozzászólás módosítva: Dec 22, 2013
(#) janimester válasza usane hozzászólására (») Dec 23, 2013 /
 
Pont a b portom van tele. Amúgy magát azt a függvényt nem tudom megoldani már próbáltam a példatárban levő pwm szabályzó programját felhasználni és átalakítani , nagyjából jó is lenne mert a kijelzőre is kiíratja az aktuális értéket csak a programjában nincs hol hivatkoznom a módosuló értékre . Amúgy az RD6 lenne a növelés az RD7 pedig az érték csökkentés gombja. Most úgy van hogy ha beteszem a növelő gombját if függvénnyel az oké működik, de ha még egyet beteszek a csökkentő függvénynek akkor túlcsordul a proci. Azzal próbálkoztam tegnap este , hogy figyelek egy gombot és ha lenyomom törli a kijelző tartalmát és belép egy almenübe és közben megállítom az összes többi funkciót amiben ugye bent a sok if függvény. Ha pedig ebben az almenüben beállítottam az értéket akkor elmenti az eepromba és adok egy reset parancsot neki. A kijelző törlésig el is jutottam, de az almenü létrehozásán agyalok most ami megint nagy tészta lesz (nekem). (És tudom sok felesleges dolog van a rajzomon de állandóan módosítgatom azért ilyen szétszórt.)
A hozzászólás módosítva: Dec 23, 2013

aba.jpg
    
(#) Swarcy hozzászólása Dec 24, 2013 /
 
Üdvözletem mindenkinek és Boldog Karácsonyt
1 kérdésem lenne ha tud valaki segíteni megköszönném. Csatolom a File-t ami egy PIC24F256GA106 os procira készülő program. (Nem egyszerű és asm be van írva ) A gondom az , hogy az Analog Digital átalakító nem akar működni, elindulni. Most a progiban csak az AN5 ös csatornát konvertálná és főprogram résznél el is van indítva, a szimulátor szerint minden jól van beállítva de ha a csipbe beégetem minden működik de az A/D az nem. nem fut le és nem kér megszakítást sem. Ha tud valaki segíteni mi lehet a hiba még megköszönném, mert már vagy 2 hete ezzel görcsölök, és nm találom az okát miért nem működik az A/D. Illetve ha csinált már valaki folyamatos A/D átalakítást amikor a proci csinálja folyamatosan és a ADC1BUFx regiszterekbe rakja az eredményeket.
Köszi előre is a segítséget.
(#) icserny válasza Swarcy hozzászólására (») Dec 24, 2013 /
 
A honlapomon találsz információt az ADC használatával kapcsolatban. A ConfigADC függvényeket nézegesd! Bár nálam C-ben van, ugyanazokat a regisztereket kell matatnod assemblyben neked is.

Gondosan meg kell nézni az adatlapot, mert különbség van a DMA-t tartalmazó és a DMA nélküli mikrovezérlő típusoknál. További különbségek vannak a 24F és 24H típuscsaládok között is, elvileg mindegyikre találsz mintapéldát.
(#) Swarcy válasza icserny hozzászólására (») Dec 24, 2013 /
 
Köszönöm szépen, hasznos honlapod van egyébként de már átnéztem egy párszor, amúgy egy két dolgot a honlapod szerint csináltam ( pl. inicializálás sorrendje ) de így sem akar máködni. De ha esetleg van pici időd belenézni a progimba, elég lenne az inicializálást megnézni, a progi közepe tájékától hátha hiba van benne és azért nem működik eggyáltalán az A/D. Én erre tippelek . Köszi
(#) icserny válasza Swarcy hozzászólására (») Dec 24, 2013 /
 
Idézet:
„De ha esetleg van pici időd belenézni a progimba”
Ha nem haragszol, ezt most kihagynám. Utoljára kb. 5 évvel ezelőtt foglalkoztam assemblyvel, túl sok munka volna most újrakezdeni.

Utóirat: Egy dolog csak feltűnt, az assembly ismeretek felelevenítése nélkül is: nem látom az
  1. AD1CON1bits.ADON = 0;   // kikapcsolja az ADC-t

beállítás megfelelőjét az inicializálás elején.
A hozzászólás módosítva: Dec 24, 2013
(#) Swarcy válasza icserny hozzászólására (») Dec 24, 2013 /
 
Köszi semmi baj nem haragszom
Az A/D be van kapcsolva a következő sorok csinálják:

; A/D Engedelyezese !!!!!!!
bset AD1CON1,#2 ;ASAM AD sample auto start enable
bset AD1CON1,#13 ;ADSIDL AD modul idle modban nem mukodik
bset AD1CON1,#15 ;ADON AD modul bekapcsolva

Legalábbis PIC adatlap szerint a 15 bit az engedélyezés.
Mplab szimulációjában az FSR regisztereknél látni hogy be van kapcsolva mikor futtatom. Köszi szépen a segítséget.
(#) benjami válasza Swarcy hozzászólására (») Dec 24, 2013 1 /
 
Én így csináltam az SD kártyás hangdigitalizálónál (PIC24FJ256GB108).
Biztos van benne ami kihagyható, nem optimalizáltam ki.
Inicializálás:
  1. AD1PCFGLbits.PCFG3 = 0;  // AN3 láb (0 = analóg, 1 = digital I/O
  2. AD1CON3bits.ADRC = 1;    // belső RC oszcillátor */
  3. AD1CON2bits.VCFG = 0;    // referencia: AVDD/AVSS */\
  4. AD1CON3bits.ADCS = 32;   // konverziós órajel (0..255)
  5. AD1CON3bits.SAMC = 4;    // TAD idő (0..31)
  6. AD1CON1bits.ADON = 1;    // A/D engedélyezés (ki = 0; be = 1)
  7. AD1CON1bits.SAMP = 1;    // mintavételezés start
  8. AD1CON1bits.SSRC = 2;    // trigger szelektálás (0..7)
  9. AD1CON1bits.FORM = 3;
  10. AD1CON2bits.SMPI = 0;     // minta szekvencia / megszakítás (0..15)
  11. AD1CHS = 0x3;             // AN3
  12. IPC3bits.AD1IP = 7;      // prioritás a legmagasabb legyen

Megszakítás:
  1. void __attribute__ ((interrupt, auto_psv)) _ADC1Interrupt(void)
  2. {
  3.   IFS0bits.AD1IF = 0;                   // nyugtázással dicsérd a napot
  4.   *sbufp++ = ADC1BUF0;
  5.   // ... itt van a dupla puffer kezelése, ezt most átugrom
  6.   AD1CHS = 0x3;                         // AN3
  7.   AD1CON1bits.SAMP = 1;
  8. }
(#) icserny válasza Swarcy hozzászólására (») Dec 25, 2013 /
 
Én arra céloztam, hogy konfigurálás előtt le kell tiltani az ADC-t (AD1CON1 ADON bitjébe 0), s majd a konfigurálás után lehet ismét engedélyezni (AD1CON1 ADON bitjébe 1).
(#) Swarcy válasza icserny hozzászólására (») Dec 25, 2013 /
 
Értem, de amúgy amit belinkeltem sorokat az programomban az A/D beállítások legutolsó sora, magyarul utoljára kapcsolom be az A/D-t Processzor Reset után meg az adatlap szerint az A/D tiltott ezért nem kapcsolom ki az inicializálás elején mert elvileg ki van kapcsolva. De most, hogy mondod megpróbálom azt is kikapcsolom az elején .
(#) Swarcy válasza benjami hozzászólására (») Dec 25, 2013 /
 
Köszi nézem és gondolom neked ez működik rendesen..
(#) potyo hozzászólása Dec 25, 2013 /
 
A CCP modul Capture módjánál nem tiszta egy dolog nekem: amikor egyezés van a CCPR1 és a TMR1 között, akkor a CCP1 lábat csak az egyezés idejére húzza magasba a kontroller, vagy pedig onnan kezdve magasan marad? Ha mondjuk a Timer1-et a chip órajelével hajtom előosztó nélkül, akkor csupán egy utasitásciklus idejére marad magasan a CCP1 láb?
(#) foxi63 válasza potyo hozzászólására (») Dec 25, 2013 /
 
Szia!
Egyezéskor bebillen a (PIR1<2>) bit, és ha a megszakítás engedélyezve van, akkor bekövetkezik, ha nem akkor bebillenve marad, programból kell visszaállítani.
(#) AZoli válasza potyo hozzászólására (») Dec 25, 2013 /
 
Ha Compare módra gondoltál, akkor választható:
Idézet:
„In Compare mode, the 16-bit CCPRx register value is
constantly compared against either the TMR1 register
pair value or the TMR3 register pair value. When a
match occurs, the CCPx pin can have one of the
following actions:
• Driven high
• Driven low
• Toggle output (high-to-low or low-to-high)
• Remains unchanged”

Ha nem, akkor nem értem a kérdést.
Nem írtad hogy milyen kontroller, ez 18F6xxx
Vagyis olyan lehetőség nincs, hogy csak az egyezés idejére aktív...
A hozzászólás módosítva: Dec 25, 2013
(#) AZoli hozzászólása Dec 25, 2013 /
 
30F6012A, MPLAB C30
PowerLatchArray -t szeretném EEPROM-ba másolni. Az optimalizációt kikapcsolva tökéletesen működik, de opt.: 1. szinten bent ragad a for ciklusban, mindig teljesül az "if", nem sikerül az írás. Mit csinálok rosszul?
(Nem a while -okban áll, hanem próbál törölni, írni, de nem sikerül)

  1. volatile unsigned int PowerLatchArray [32]; //32 Ezeket mentjük EEPROM-ba.
  2. TBLPAG = 0x7F; //EERROM
  3. NVMADRU = 0x7F;
  4. for (i = 0; i < 32; )  
  5. {
  6.         while (NVMCONbits.WR != 0) ; // Mielőtt olvasnánk, megvárjuk hogy 0 legyen
  7.         if ((__builtin_tblrdl (0xF000 + (i * 2))) != PowerLatchArray [i])
  8.         {
  9.                 //Először törölni kel!!
  10.                 while (NVMCONbits.WR != 0) ; // megvárjuk hogy 0 legyen
  11.                 NVMADR = 0xF000 + (i * 2); //Ezt a címet töröljük
  12.                 NVMCON = 0x4044; // törlés
  13.                 NVMKEY = 0x55;
  14.                 NVMKEY = 0xAA;
  15.                 NVMCONbits.WR = 1;             
  16.  
  17.                 // Írás:
  18.                 while (NVMCONbits.WR != 0); // megvárjuk hogy 0 legyen
  19.                 __builtin_tblwtl((0xF000 + (i * 2)),PowerLatchArray [i]);
  20.                 NVMCON = 0x4004;
  21.                 NVMKEY = 0x55;
  22.                 NVMKEY = 0xAA;
  23.                 NVMCONbits.WR = 1;
  24.         }
  25.         else i++; //Csak ha sikeres volt az írás...
  26. }
(#) benjami válasza Swarcy hozzászólására (») Dec 25, 2013 /
 
Működött, csak jelenleg ez egy félbehagyott project része. Annyit még hozzátennék, hogy ezzel a beállítással (AD1CON1bits.SSRC = 2) Timer3 compare fogja az A/D átalakítást elindítani, így a mintavételi frekvenciát Timer3-al kell beállítani.
(#) potyo hozzászólása Dec 26, 2013 /
 
Fázishasításra PIC-el van valami bevált módszer? Ugye kell hozzá nullátmenet detektálás, majd meghatározott idő után egy triak vagy SSR irányába gyújtóimpulzus kiadása egy rövid időre. Én eddig ott tartok, hogy pl. INT0 vagy RBIF megszakítás bekövetkeztekor Timer indul, túlcsorduláskor egyesre húzom az egyik lábat, majd némi idő után vissza nullába. Ezt lehet pl. úgy, hogy pl. Timer1-et indítom, CCPR1H:CCPR1L regiszterekbe beírom, hogy mennyi idő után kellene a lábat egyesre állítani, CCP1IF megszakításkor pedig visszaváltom a lábat nullába. Persze a gyújtás nyílván nem tud így pontosan nullátmenetkor indulni, de ha pl. 4us késés van, akkor még mindig csak 4V-nál tart a színusz, ha jól számolom, az meg bőven belefér. Vagy van erre van valami jobb/bevált megoldás?
(#) watt válasza potyo hozzászólására (») Dec 26, 2013 /
 
Szia!
Én úgy csináltam, hogy a komparátor okoz megszakítást, ekkor indítom a Timert. A komparátor osztóról kapja a szinkront egy trafóról(AC), de elvileg egy nagy ellenállás osztóról is működne a hálózatról közvetlenül is. Nem érzékeny a csúszásokra.
(#) potyo válasza watt hozzászólására (») Dec 26, 2013 /
 
Én közvetlenül adtam neki soros 220k-220k-220k ellenállásról a szinkronjelet, direktben az RB1 lábra. Mivel a végső alkalmazásban mérni kell majd a kapott hullám középértékét is, és nem szempont a galvanikus leválasztás, ezért megy így direktben. De akkor kb. azt csináltad te is, amit én. Közben rájöttem, hogy más okozza a vibrálást nálam, mert ha fix gyújtással járatom, akkor szép állandó fénye van az izzónak. Csak bekötöttem egy potmétert, amit mérek AD-vel, és attól függően állítottam a gyújtást, de ezzel úgy tűnik, valami nem stimmel.
(#) watt válasza potyo hozzászólására (») Dec 26, 2013 /
 
Az AD közben nem tiltod a megszakítást? Vagy esetleg nem a megszakításban indítod az AD-t?
(#) potyo válasza watt hozzászólására (») Dec 26, 2013 /
 
Az AD a főprogramban van, lehet, hogy csak nem várok elég időt a konverzió végéig. Majd átnézem mégegyszer, de ez a rész nemis lényeges, csak a teszteléshez kellett, hogy ne kelljen mindig átírnom a gyújtáskésleltetés értékét. Fix késleltetéssel stabil az izzó fényereje, így a lényegi rész stimmel.
Következő: »»   1156 / 1320
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