Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   815 / 1320
(#) oleg53 válasza robing16 hozzászólására (») Okt 12, 2010 /
 
Szia!
Ha jól értem, bizonyos értékek elérésekor módosítod a TMR0-t. Ha így van, az nem jó, mert ha jól tudom, szinte minden, vagy talán minden PIC-nél törlődik az előosztó, ha a TMR0-t módosítod. Mivel az előosztó értéke a módosításkor ismeretlen, így lőttek a pontosságnak.

Inkább azt figyelgetném, hogy mikor csordul túl a TMR0, de nem módosítanám.
Elméletben, optimalizálás nélkül így nézhetne ki ez a fajta megoldás:
Minden túlcsorduláskor megnövelhetsz egy változót 256-tal, majd ellenőrzöd, hogy meghaladta-e a 15625-öt. Ha igen, kivonsz belőle ennyit, és a maradék értéket növelgeted tovább.
Minden ilyen, 15625-tel való csökkentés másodpercenként egyszer következik be. A másodpercléptetés párszor 10 ms-ot imbolyogni fog, de egy másodperc átlagosan pontosan egy másodperc lesz (a kvarc pontosságának korlátain belül).

A gyakorlatban persze jobb lenne 15625-ről indítani egy két byte-os változót, és minden TMR0 túlcsorduláskor 1-gyel csökkenteni a felső byte-ot. Amint 0 lesz a felső byte, 15625-öt adunk a változóhoz, és növeljük a másodperc-értéket.

Ha nem bízol az oszcillátor pontosságában, akkor egy olyan progival ellenőrizd, amiben pl pár led alkot egy bináris számlálót, aminek biztosra tudod a ciklusidejét.

Ja, igen. Még valami. Az MPLAB-ban van stopper. Szimulációban jól lehet vele ellenőrizni az ilyesmit, ha beraksz egy töréspontot a másodpercet léptető részbe.
(#) watt válasza icserny hozzászólására (») Okt 12, 2010 /
 
Igazad van, sokfélék vagyunk, sokféle az elképzelésünk. Kérdés, hogy amikor nem értettünk még ehhez, akkor hogyan kezdtünk neki, mik voltak a sarokpontok, és emlékszünk-e ezekre ma, mikor másokat próbálunk a vélt helyes útra terelni.
Én úgy tapasztaltam, nem csak a PIC-ek területén, hogy a felülről építkezés időpocsékolás, ha az a cél, hogy megértsünk valamit. Csináljuk, de nem értjük, és ez űrt teremt az emberben, még ha néha sikerélményben is van részünk.
El lehet választani, amikor valaki valamit utánépít, vagy célirányosan szeretne valamit megépíteni használati okból, sűrgősen, és azt, amikor amatőrködni szeretne, megérteni, belefolyni, játszani! Ez utóbbi esetben az idő nem számít, csak a megértés, és a fejlődés.
Sok esetben úgy érzi az ember, hogy nem képes megérteni a dolgokat, pedig csak egy olyan elem hiányzik, amit korábban nem értett meg, illetve átsiklott felette.
Ezt csak kellő affinitással, kitartással, komolysággal lehet szerintem végezni, aki nem így teszi, csak futó fellángolás lesz a PIC kaland (Ez sem akkora tragédia egyébként.).
Sajnos mostanában nem jut időm az oldalam fejlesztésére, túl sok mindenbe kezdtem, remélem utolérem magam és folytatom, mert sok elképzelésem van. A te oldalad szépen fejlődik, minden elismerésem, nagy segítség azoknak, akik már a kezdeti lépéseken túlvannak és fejlődni szeretnének!
Végül egy aranymondás, miszerint lehet, hogy két malomban őrölünk, de csak az számít, hogy jól őröljünk!
(#) icserny válasza vendeg9898 hozzászólására (») Okt 12, 2010 /
 
A CCS PIC Compiler topikban nemrég volt róla szó, hogy a printf() függvény a standard kimenetre ír, s ha ettől eltérő kimenetre akarsz írni a stream (adatfolyam) megadásával, akkor az fprintf() függvényt kell használni.
(#) icserny válasza watt hozzászólására (») Okt 12, 2010 /
 
Idézet:
„Én úgy tapasztaltam, nem csak a PIC-ek területén, hogy a felülről építkezés időpocsékolás, ha az a cél, hogy megértsünk valamit.”
Pedig a tudomány kutatás is így működik. De a PIC megismerés területéről is mondanék két példát:
- USB-CDC kapcsolaton keresztül (anélkül, hogy fogalmam lenne az USB működéséről) egy egyszerű parancsértelmezővel állítgatom be az ADC regisztereit, s vizsgálom a működést.
- Soros porti kommunikáció + parancsértelmező segítségével küldözgetek parancsokat az LCD modulnak, hogy annak működését "élesben" teszteljem.

Ilyen esetekben az USB vagy a soros porti kommunikáció, a printf() függvény vagy egy beépített parancsértelmező (ami nagyobb mikrovezérlőknél lehet akár egy beépített FORTH vagy BASIC interpreter is!) csupán ugyanolyan segédeszköz, mint az oszcilloszkóp vagy a digitális voltmérő. Segít láthatóvá, érzékelhetővé tenni a működést.

S majd ha az USB vagy a soros port működése érdekel, akkor annak a részleteiben merülök el, akkor arra koncentrálok. De nagyon furcsa volna, ha addig nem használ(hat)nám pl. az USB-t, amíg nincs időm/kedvem a részleteit töviről-hegyire megismerni.

  1. Csináljuk, de nem értjük, és ez űrt teremt az emberben...
Ez így van. De van, akinek pont ez az űr kell ahhoz, hogy a figyelmét ráirányítsa az újabb felfedezendő területre. Persze, ez megint olyan dolog, amiben sokfélék vagyunk, s nincs egyedüli üdvözítő út.
(#) trudnai válasza icserny hozzászólására (») Okt 12, 2010 /
 
Idézet:
„Ilyen esetekben az USB vagy a soros porti kommunikáció, a printf() függvény vagy egy beépített parancsértelmező (ami nagyobb mikrovezérlőknél lehet akár egy beépített FORTH vagy BASIC interpreter is!) csupán ugyanolyan segédeszköz, mint az oszcilloszkóp vagy a digitális voltmérő. Segít láthatóvá, érzékelhetővé tenni a működést.”


Hmm, ez egy nagyon messze meno tema, es nagyon hasonlatos a Linux kernel fejleszteshez. Vannak akik eskusznek a debuggerre, vannak akik ellenzik - pl maga Linus is... Nekem meg nem volt szuksegem parancs ertelmezore ahhoz, hogy kiprobaljak valamit, mindig volt programozom vagy bootloaderem, s igy mindig volt lehetosegem letolteni ujabb firmware-t. Amugy nagyon sokszor szimulacion keresztul probalom ki az ismeretlen dolgokat (mar ha nem olyan kulso aramkorrol van szo amihez nincs szimulacios modul). De, hogy watt-ot idezzem:

Idézet:
„Igazad van, sokfélék vagyunk, sokféle az elképzelésünk.”
(#) icserny válasza trudnai hozzászólására (») Okt 12, 2010 /
 
Idézet:
„Nekem meg nem volt szuksegem parancs ertelmezore ahhoz, hogy kiprobaljak valamit, mindig volt programozom vagy bootloaderem, s igy mindig volt lehetosegem letolteni ujabb firmware-t.”
Erre mondhatnám azt is, hogy én "ügyesebben" írtam meg a firware-t, mert módosítanom sem kellett.

De nem mondom, mert a lényeg az, hogy akiben van egészséges életösztön(=lustaság), mindig megtalálja a módját, hogy a számára legkézenfekvőbb, legkényelmesebb úton érje el a célját. A korábban említett példáknál kényelmesebbnek és gyorsabbnak tűnt begépelni egy #Akkmmnn formájú parancsot, mint módosítani a firmware-t, újrafordítani, majd letölteni. S nem utolsósorban: miért rongáljam a PIC flash memóriáját fölöslegesen újraprogramozással, ha nem is a programot akarom módosítani, hanem csupán néhány regiszter tartalmát?

Más esetekben természetesen én sem csinálom így, csak akkor, ha előre tudható, hogy sok változatot kell próbálni.

Idézet:
„Amugy nagyon sokszor szimulacion keresztul probalom ki az ismeretlen dolgokat.”
A szimuláció valóban nagyon hasznos segítség. Én is sokat használom.
(#) cNobody válasza potyo hozzászólására (») Okt 12, 2010 /
 
Helló!

Kicsit hanyagoltam a témát, mert más fontosabb projectet csináltam, meg amúgy sincs meló mellett túl sok időm. Mindegy is. Az a lényeg, hogy most megint eszembe jutott, és az is eszembe jutott hogy mondtad hogy próbáljam ki az alacsony teljesítményű módot is, a TIMER1 32K kvarcához.
Azért is hanyagoltam, mert az adatlap alapján az alacsony teljesítményű mód, érzékenyebb a zavarokra, ami instabilitást okoz. Ezért nem tulajdonítottam neki túl nagy jelentőséget.

Idézet:
„The default Timer1 configuration is the higher power mode.
As the low-power Timer1 mode tends to be more sensitive to interference, high noise environments may cause some oscillator instability. The low-power option is, therefore, best suited for low noise applications where power conservation is an important design consideration.”


Most már tudom, hogy hiba volt.
Mondom veszteni nem vesztek vele, csak kipróbálom. És láss csodát, tökéletes.
Most már be kellett raknom a megszakításkezelésbe a TMR1H=0x80; sort, és a karórához képest szemre tökéletes. Egész éjszaka (kb 9 óra alatt) nem késett/sietett semmit.
Nem gondoltam volna hogy ennyit jelet ez a beállítás (főleg az adatlapot nézve).
Miért nem próbáltam én ezt már ki akkor amikor írtad, nem is értem.

Köszi szépen a tippet!
(#) icserny válasza cNobody hozzászólására (») Okt 12, 2010 /
 
Arról lehet tudni valamit, hogy milyen gyártmányú/beszerzésű kvarccal szerezted ezt a tapasztalatot?

Azért érdekes, mert nálam egy ismeretlen gyártmányú (talán számítógép alaplapból bontottam) kvarccal pont fordított volt a tapasztalat: nagyobb teljesítményű módban ment stabilan, 2x22 pF-fel, ellenállás nélkül. Különbség van tehát az egyes gyártmányok viselkedésében.
(#) Hp41C válasza robing16 hozzászólására (») Okt 12, 2010 /
 
Szia!

Használd a TMR2-t, lehet vele pontosan 1000 -rel, 4000 -rel osztani az órafrekvenciát...
A TMR0 és a TMR2 nem múködik sleep üzemben, csak a TMR1...
(#) cNobody válasza icserny hozzászólására (») Okt 12, 2010 /
 
Igen.
Lomexből rendeltem, 2010.02.05.-én
40-00-93 - 32.768KHz QUARZ D 3X8MM (NSK) ROHS
cikkszám - név alatt.
Legalábbis ez van a zacsira írva ami itt van a kezemben. Csatoltam egy friss fényképrészletet is. Más nincs a kvarcon. Nem tudom ez mond-e neked valamit.

P1030847.JPG
    
(#) trudnai válasza icserny hozzászólására (») Okt 12, 2010 /
 
Idézet:
„A korábban említett példáknál kényelmesebbnek és gyorsabbnak tűnt begépelni egy #Akkmmnn formájú parancsot, mint módosítani a firmware-t, újrafordítani, majd letölteni. S nem utolsósorban: miért rongáljam a PIC flash memóriáját fölöslegesen újraprogramozással, ha nem is a programot akarom módosítani, hanem csupán néhány regiszter tartalmát?”


Hmm, egy regiszter tartlmat debuggerrel is meg lehet modositani, nem? De mindegy amugy, mert ahogy irtad nem a modszer a lenyeg, hanem az eredmeny. Debuggerrel pedig nem lehet algoritmust kiprobalni dinamikus modon, egy interpreterrel viszont igen -- tehat nyilvan ilyen ertelemben igazad van.

Amugy szerintem a program memoria ujrairhatosagi szama nem annyira kritikus, hisz ha jol emlekszem a 'leggyengebb' PIC-ek is tizezerszer irhatok ujra, de szamoljunk most csak ezerrel. Tehat veszek 10 db-ot fejlesztesi celra es legrosszabb esetben is tizezerszer probalhatom ki a firmware-em mire mukodik. Ez szerintem eleg nagy projectekre is elegendo kell legyen, bar lehet rosszul latom a kerdest?
(#) icserny válasza cNobody hozzászólására (») Okt 12, 2010 /
 
Köszönöm az információakt. A felirat láthatóan különbözik az enyámtől. Nálad 32KNSK, nálam KDS7A olvasható a tokon. A tiedről (vagy ahhoz hasonlóról) itt találtam egy adatlapot.
(#) icserny válasza trudnai hozzászólására (») Okt 12, 2010 /
 
Idézet:
„Hmm, egy regiszter tartlmat debuggerrel is meg lehet modositani, nem?”
Igen, az is egy járható út. De ahhoz a PIC14K50 debugolható változata kellett volna, ami nekem nincsen. ("Fából van a kilincsem, oszt' madzag a húzója...")
Idézet:
„Tehat veszek 10 db-ot fejlesztesi celra es legrosszabb esetben is tizezerszer probalhatom ki a firmware-em mire mukodik.”
Igen, fejlesztésnél ez így megfelel. Tanulásnál azonban más a helyzet (sok programot kell fejeleszteni/kirpóbálni, nemcsak egyet csiszolgat az ember), másrészt a költségkeret is szűkebb. Ilyen kor érdemes megnézni, hogy pl. PIC18F4550 újraprogramozhatósági száma 10-szer nagyobb (ha igazat írnak az adatlapban...). Ezért csináltam olyat, hogy a kínlódások árán született programoknál inkább a 4550-et nyúztam, nem a 14K50-et.
(#) storm hozzászólása Okt 12, 2010 /
 
Sziaztok!
OLvasgattam vicsys oldalán a PIC-es írását és ahol a progit tárgyalja ott van olyan hogy kattintsunk a menü ikonra ott új és ott válasszuk ki a project wizardot, majd mentsünk el. De hova kell kattintani, hogy le tudjam menteni??
(#) Hp41C válasza storm hozzászólására (») Okt 12, 2010 /
 
Szia!

Kilépéskor menti (meg is kérdezi, hogy mentse-e). A Project / Save Project és a Project / Save Project As menüpontokkal is menthető...
(#) storm válasza Hp41C hozzászólására (») Okt 12, 2010 /
 
Igen erre én is gondoltam de a menüpen az a pont nem elérhető és kilépéskor se kérdez semmit
(#) Hp41C válasza storm hozzászólására (») Okt 12, 2010 /
 
Ha végigmentél a Project Wizard összes lépésén, akkor a projecnév.mcw és az Output nevű ablakok maradnak nyitva. (A forrás a nevére klikkentve megnyitható.) Ekkor már menthető lesz a project...
(#) storm válasza Hp41C hozzászólására (») Okt 12, 2010 /
 
Lehet, hogy félreértettél
Idézet:
„Majd a "main.pjt"-t mentsük a kreált mappánkba.
A felugró ablakban állítjuk a fő paramétereket:”
Hova kell kattintani a mentéshez
(#) icserny válasza storm hozzászólására (») Okt 12, 2010 /
 
Idézet:
„Majd a "main.pjt"-t mentsük”
Mostmár csak azt lenne jó tudni, hogy miről beszélsz. Az már bizonyos, hogy nem az MPLAB IDE-ről van szó. Abban nincs .pjt
(#) storm válasza icserny hozzászólására (») Okt 12, 2010 /
 
Bővebben: Link
ezen az oldalon írja vicsys fórumtárs h hozzuk létre a mappát okéé az megvan. Nyissuk meg a progit azis megvan. Kiválasztom a project wizardot azon az útvonalon ahogy ott levan írva. Majd jön az, hogy a main.pjt-t mentsük el a kreált mappába.. de hova kattintok a mentésért vagy mit csinálok, hogy tudjak menteni??
(#) Hp41C válasza Hp41C hozzászólására (») Okt 12, 2010 /
 
A default a gyári felület...
(#) icserny válasza storm hozzászólására (») Okt 12, 2010 /
 
Csak az az információ kellett, hogy ez a CCS C fejlesztői környezetéről szól. Részemről passz...
(#) storm válasza icserny hozzászólására (») Okt 12, 2010 /
 
Hátha ez segít így néz ki miután kiválasztottam a project wizardot
(#) watt válasza storm hozzászólására (») Okt 13, 2010 /
 
Tipp: Mappa ikon Save All-al próbáltad már?
(#) icserny válasza storm hozzászólására (») Okt 13, 2010 /
 
Nem segít, mert nálam nincs telepítve CCS C. Csak a Project Wizard említése láttán azt hittem, hogy az MPLAB-ról van szó.
(#) vicsys válasza storm hozzászólására (») Okt 13, 2010 /
 
Ha jól látom a varázsló nem indult el. Biztosan elment skandináv lottót játszani, vagy a progid nem 100%-os.
(#) ciw hozzászólása Okt 13, 2010 /
 
Üdv !

PIC24 PWM beállítási gondokkal kűzdök.

128Khz PWM-et szeretnék előállítani legalább 8 bites felbontással.
Az órajel 16Mhz+PLL

Ha bekapcsolom a pwm-et akkor azonnal jön valami jel és hiába próbálom változtatni a kitöltést nem lesz jó.
A pic adatlap és a PWM FRM mást mond ezért nem egyértelmű.

Ha timer2-t választom jelforrásnak akkor meg el sem indul a PWM.


[code=c]
OpenOC1_GB(
// Sets OC1CON1
OC_IDLE_CON &
OC_SYSCLK_SRC &
OC_FAULT0_IN_DISABLE &
OC_FAULT1_IN_DISABLE &
CMP_FAULT2_IN_DISABLE &
OC_PWM_FAULT_CLEAR &
OC_TRIG_CLEAR_SYNC &
OC_PWM_EDGE_ALIGN,
// OC_CONTINUE_PULSE,
// Sets OC1CON2
OC_FAULT_MODE_PWM_CYCLE &
OC_PWM_FAULT_OUT_HIGH &
OC_FAULT_PIN_UNCHANGE &
OC_OUT_NOT_INVERT &
DELAY_OC_FALL_EDGE_00 &
OC_CASCADE_DISABLE &
OC_SYNC_ENABLE &
OC_TRIGGER_TIMER &
OC_DIRN_OUTPUT &
OC_SYNC_TRIG_IN_CURR_OC,
// Period
2048 ,

// On-time
1024);

Igazából azt sem értem mi az az ON-time, a régebbi pic-eken ha jól rámlik nem volt ilyen, csak a periódus és akitöltési tényező.

Egyébként a céleszköz PIC24FJ64GB002
(#) icserny válasza ciw hozzászólására (») Okt 13, 2010 /
 
Végeredményben ezzel a sok hókusz-pókusszal az a cél, hogy az alábbi négy értékadás (az OCM bit törlését nem számítom bele) megtörténhessen.
  1. void OpenOC1_GB(unsigned int config1,unsigned int config2, unsigned int value1, unsigned int value2)
  2. {
  3.     OC1CON1bits.OCM = 0; /* turn off OC before switching to new mode */
  4.     OC1RS = value1;     /* assign value1 to OCxRS Secondary Register */
  5.     OC1R = value2;      /* assign value2 to OCxR Main Register*/  
  6.     OC1CON1 = config1;    /* assign config to OCxCON Register*/
  7.     OC1CON2 = config2;
  8. }


Érdemes volna megnézni szimulátorban, hogy a négy regiszterbe tényleg az adatlap szerint tervezett konfiguráció íródik be. Volt már rá példa a világtörténelemben, hogy a gyári header állományokban egy-két maszk elcsúszott helyiértékkel volt definiálva!

Ebből a szempontból bölcsebb volna az OR maszkokat használni. Ehhez definiálni kell az USE_AND_OR szimbólumot, valamint a & művelet helyett a | műveletet kell használni.
  1. #define USE_AND_OR
  2.  
  3. OpenOC1_GB(
  4. // Sets OC1CON1
  5. OC_IDLE_CON |
  6. OC_SYSCLK_SRC |
  7. OC_FAULT0_IN_DISABLE |
  8. OC_FAULT1_IN_DISABLE |
  9. ...
  10. stb.


Ennek az volna az értelme, hogy az OR maszkoknál hamarabb észrevenni, ha valamelyik bit rossz helyiértéken van.

Idézet:
„Igazából azt sem értem mi az az ON-time...”
Én a többit sem értem... :hide:
(#) Ideiglenes válasza robing16 hozzászólására (») Okt 13, 2010 /
 
Az 1 másodperces probléma úgy láttam, visszatérő itt a fórumon ( is ). Egy kis tudományos segítség hozzá:
Egy másodperces időzítés nulla hibával
A lényeg az egyenesrajzoló algoritmusban van.
(#) netnet.hu hozzászólása Okt 13, 2010 /
 
Helló. Kicsit hülyén érzem magam, mert ez a program nem működik. A proci egy 16f690, a compiler HI-TECH, PICKit2 és Low Count Demo Board

Led1 bekapcsol, de amikor RA5 és VDD közé rakok egy ellenállást, akkor nem kapcsol ki.

void Delay(unsigned int sec /* ~15ms/sec */)
{
unsigned int i;
sec = sec * 8; // factor of 15 ms

for(i=0; i }
void configure(void)
{
__CONFIG(LP & WDTDIS & PWRTDIS & UNPROTECT & BORDIS);
TRISC = 0;
TRISA = 1;
IRCF2 = 0;
IRCF1 = 0;
IRCF0 = 0;
SCS |= 1;
}

void fut(void)
{

if (RA5 == 0)
{

RC0 = 0;

}

if (RA5 == 0)
{

RC0 = 1;

}


} // fut
void parazs(void)
{
} //parazs
void csorlo(void)
{
} //csorlo
void stop(void)
{
} //stop


void main(void)
{
configure();

while (1)
{

fut();
parazs();
csorlo();
stop();


}
}>
Következő: »»   815 / 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