Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1204 / 1319
(#) Attila86 válasza AZoli hozzászólására (») Nov 25, 2015 /
 
Dehogynem, mert a 200kHz modulálva van a hangfrekvenciás jellel. A 200kHz túl sok a piezónak, azt nem tudja kiadni, bár ha kiadná sem hallanánk.
(#) AZoli válasza Attila86 hozzászólására (») Nov 25, 2015 /
 
Ez rendben, de ha pl. egy 2kHz -es szinuszt akarsz kiadni, akkor nem a 200kHz -et kell ellen ütemben kivezérelned, hanem abból miután kiszűrted -bárhogy- a 200kHz-et, annak ami megmarad, tehát a 2kHz -nek kell ellen ütemben lennie. Szerintem ezért nem stimmel az elgondolás.
A hozzászólás módosítva: Nov 25, 2015
(#) killbill válasza Bakman hozzászólására (») Nov 25, 2015 /
 
Idézet:
„Amire te gondolsz, az az effektív érték, egyenkomponens helyett az offszetet használjuk jelalakok esetén.”
Nem hinnem, hogy az az effektiv ertek, mert akkor a konnektorban is 0V-ot mutatna a muszer. Mert annak is 0V a DC komponense, viszont az effektiv erteke 230V korul mozog. Csucstol-csucsig meg olyan 650V.
A hozzászólás módosítva: Nov 25, 2015
(#) killbill válasza AZoli hozzászólására (») Nov 25, 2015 / 2
 
Attila86 megoldasa teljesen jo. Pont ugy mukodik, mint egy Class-D vegfok. Ha egy 200kHz-es jelet PWM-ben modulalsz hangfrekivel, es a keletkezett jelet ravezeted egy alulatereszto szurore, akkor a szuro kimeneten megkapod a hangfrekis jelet. Ezt csinaljak a digitalis erositok. Ezert nincs disszipaciojuk, mert 2..300kHz negyszogjelet kapcsolgatnak benne a FET-ek. Az 50%-os kitoltes adja a 0V kimenetet. Ha az egyik iranyba valtoztatod a kitoltesi tenyezot, akkor pozitivba megy a kimenet, ha a masik iranyba valtozotatod, akkor negativba megy a kimenet.
(#) AZoli válasza AZoli hozzászólására (») Nov 25, 2015 / 1
 
Persze megoldható a dolog úgy, hogy nem a klasszikus ellenütemben vezérled a két kimenetet, hanem -maradva a 2kHz -es szinusz példánál- az egyik félperiódusban az "A" kimenet fixen 0V a "B"-t felhúzkodod - 200kHz -es PWM-el, a másik félperiódusban pedig az "A" -t húzkodod le PWM-el, és a "B" fixen 5V.
(#) proba válasza killbill hozzászólására (») Nov 25, 2015 /
 
Szerintem ha a kitöltési tényezővel variál ellenütemben, ha a kitöltés maxon van, a piezó kap egyenfeszültséget egyik irányból, ha a kitöltés minen van, akkor megkapja a másik irányból. Ami hangtanilag ugyan az. Ebből kifolyólag már csak a 0-50% tartomány használható. A másik kérdés ami orvoslásra vár, szünetben mindkét portot le kell kapcsolni, mert a piezón felejtett egyenfeszültség lehet nem egészséges.
(#) killbill válasza proba hozzászólására (») Nov 25, 2015 /
 
Hangtanilag nem ugyanaz, mert a PWM-et a hangfrekivel allitja, igy a piezo hol erre, hol arra van kivezerelve. Eppen ettol fog jol szolni, mert +/- iranyba vezerli ki a hangfrekivel. Szunetben sincs semmi gond, mert akkor pont 50% kitoltessel kapja a piezo a 200kHz jelet. Mindez csak akkor igaz, ha a piezot valoban ellenutemben hajtja meg, kulonben az 50% kitoltes 2.5V DC-t eredmenyez a piezon, nem pedig 0V-ot.
(#) AZoli válasza killbill hozzászólására (») Nov 25, 2015 /
 
Ok, talán kezdem érteni.. még emésztenem kell.
(#) proba válasza killbill hozzászólására (») Nov 25, 2015 /
 
Lehet igazad van, ha így van akkor viszont a 200khz-s csend igencsak meg fogja viselni a pic kimenetét. Bár nem tudom mekkora kapacitása van a piezo lapkának.
(#) killbill válasza proba hozzászólására (») Nov 25, 2015 /
 
Ebben viszont neked lehet igazad. Kapacitiv terheles eseten nem biztos, hogy jo a 200kHz negyszog. A kapacitasukat en sem ismerem. De itt van pár érdekes adat. Feltéve, hogy ez piezorol szol es nem nezek el valamit.
A hozzászólás módosítva: Nov 25, 2015
(#) Bakman válasza killbill hozzászólására (») Nov 25, 2015 /
 
Egy kicsit kevered a dolgokat. Ezt írtad:
Idézet:
„Ha valamire ravezetsz egy 50% kitoltesu, 0-5V kozotti jelet, akkor annak bizony 2.5V lesz az egyenkomponense.”
50% -os PWM-nek ahol a két érték 0 és +5V, az effektív értéke 2,5 V (2,5 V egyenárammal megegyező munkát tud végezni, Ohm-os terhelés esetén), nem az egyenkomponense. Nincs benne egyenáramú komponens (offset). Igaz, hogy a hálózati feszültség elmegy mínuszba is, de az áram is, a kettő szorzata pedig pozitív, tehát az effektív értéke (amit a műszerek is mérnek) pozitív mindkét félperiódusban.
(#) killbill válasza Bakman hozzászólására (») Nov 25, 2015 /
 
Ertem, hogy mit mondasz, es nem is vitatom az effektiv ertek kerdeset. Viszont szerintem ofszet es DC komponens kerdesben nincs igazad. Ertem, hogy te azt tekinted DC komponensnek, amikor valoban DC jelrol van szo, amin esetleg lehet AC is. En meg maskepp tudom. A Wikipedia ezt irja, de kereshetunk magyar nyelvu, hitelesebb szakirodalmat is.

When describing a periodic function in the time domain, the DC bias, DC component, DC offset, or DC coefficient is the mean value of the waveform. If the mean amplitude is zero, there is no DC offset. In contrast, various other frequencies are analogous to superimposed AC voltages or currents, hence called AC components or AC coefficients.

Egyenkomponens, egyenaramu osszetevo, DC offset, mind ugyanaz szerinte. De a lenyeg a mean value, ami nem ugyanaz, mint az az effektiv ertek. Tulkepp a DC komponens a jel atlaga vagy, ha ugy jobban tetszik, akkor a kozeperteke, semmi mas.
(#) Bakman válasza killbill hozzászólására (») Nov 25, 2015 /
 
DC komponens (offset), effektív- és középérték három különböző fogalom. Egy 5V - 0V PWM jelnek nincs egyenáramú összetevője. Effektív- és középértéke van.
(#) kissi válasza Bakman hozzászólására (») Nov 25, 2015 /
 
Idézet:
„Egy 5V - 0V PWM jelnek nincs egyenáramú összetevője.”

Hogyne lenne, nézd meg a spektrumát vagy mérd meg egy DC feszültségmérővel !
A hozzászólás módosítva: Nov 25, 2015
(#) Bakman válasza kissi hozzászólására (») Nov 25, 2015 /
 
A (frekvencia?)spektrumból hogy jön ki bármi is, ami a DC összetevőre vonatkozna? A vízszintes szakaszon a frekvencia nulla, a függőleges szakaszon pedig végtelen (elméletileg). DC feszültségmérő pedig jó esetben valódi effektív értéket mér ("true RMS" ismerős lehet). Az előző hozzászólásomban ott van két szinusz. Az egyiknek van DC összetevője, a másiknak nincs.
(#) PDM válasza Bakman hozzászólására (») Nov 25, 2015 /
 
Idézet:
„50% -os PWM-nek ahol a két érték 0 és +5V, az effektív értéke 2,5 V (2,5 V egyenárammal megegyező munkát tud végezni, Ω-os terhelés esetén), nem az egyenkomponense.”

Ki van rúgva!

átlagérték = 1/T ∫ u dt ,integrálás után : U* k
effektívérték = gyök (1/T ∫ u↑2 dt) ,integrálás után : U * gyök(k)

ahol U a csúcsérték, k a kitöltési tényező

Fenti esetben

u átlag = 5 * 0.5= 2,5V
u eff = 5 * gyök(0.5)= 5 * 0.707 = 3.53V

Ezért van az, hogy pl egy motor,aminek a nyomatéka az átlagfesz.-szel arányos, jobban melegszik,ha ugyanolyan átlagfesz.-ű PWM-ről hajtjuk, a határértékeken egyforma.
A hozzászólás módosítva: Nov 25, 2015
(#) PDM válasza Bakman hozzászólására (») Nov 25, 2015 /
 
Jesszusom!
(#) kissi válasza Bakman hozzászólására (») Nov 26, 2015 /
 
Idézet:
„A (frekvencia?)spektrumból hogy jön ki bármi is, ami a DC összetevőre vonatkozna? A vízszintes szakaszon a frekvencia nulla, a függőleges szakaszon pedig végtelen (elméletileg). DC feszültségmérő pedig jó esetben valódi effektív értéket mér ("true RMS" ismerős lehet).”

Szerintem nézz utána a spektrum elméletének egy kicsit például !
A DC feszültségmérő nem true RMS-t mér műszerekről pl. !
Idézet:
„Az előző hozzászólásomban ott van két szinusz. Az egyiknek van DC összetevője, a másiknak nincs.”
Ez igaz, de a négyszögjel spektruma ettől egy kicsit bonyolultabb !
(#) killbill válasza killbill hozzászólására (») Nov 26, 2015 /
 
Idézet:
„Ertem, hogy mit mondasz, es nem is vitatom az effektiv ertek kerdeset.”
Pedig vitatnom kellett volna, csak benéztem. Hiszen az 50% 0-5V négyszög effektív értéke nem 2.5V, hanem 3.53V.
(#) usane válasza Attila86 hozzászólására (») Nov 26, 2015 /
 
Hát így már más a gyerek fekvése. Így már érthető. Mint a Class-D végfok. Ötletes. Azt sem értettem mit akarsz lejátszani, azt hittem csak valami egyszólamú dallamot. Real-tone zene esetén valóban lehet létjogosultsága az oda-vissza rángatásnak. Bár úgy látom a PWM-et illetően jó kis szakmai csevej indult.
(#) Attila86 hozzászólása Nov 27, 2015 /
 
Szeretnék egy dsPIC33FJ128GP804-el 12 bites mintákat venni két lábról, az AN2-ről és az AN3-ról, külső referenciaforrás használatával (2,5V), DMA nélkül. A PIC 70MHz-el megy. Úgy szeretném, hogy a mintavételezés automatikusan történjen mindkét bemeneten és minden egyes mintavétel (vagy mintavétel-pár) után megszakítást generáljon az ADC hogy göngyölhessem a mérési eredményeket.
Igyekeztem beállítani az ADC-t de nem vagyok benne biztos hogy jó lesz így:
  1. //Órajel:
  2.     CLKDIVbits.PLLPRE=0;
  3.     PLLFBDbits.PLLDIV=68;   //70MHz
  4.     CLKDIVbits.PLLPOST=0;
  5.  
  6.     //Analóg/digitális lábak:
  7.     AD1PCFGLbits.PCFG0=0;    //AN0 analóg lesz (referencia föld)
  8.     AD1PCFGLbits.PCFG1=0;    //AN1 analóg lesz (referencia pozitív)
  9.     AD1PCFGLbits.PCFG2=0;    //AN2 analóg lesz (mérés 1)
  10.     AD1PCFGLbits.PCFG3=0;    //AN3 analóg lesz (mérés 2)
  11.  
  12.     //A/D konverter:
  13.     AD1CON1bits.AD12B=1;        //12 bites mód
  14.     AD1CON1bits.FORM=0b00;      //Eredmény jobbra igazítása, előjel nélkül
  15.     AD1CON1bits.SSRC=0b111;     //Mintavételező órajel forrása: automatikus konverzió mód
  16.     AD1CON1bits.ASAM=1;         //Automatikus mintavételezés engedélyezése
  17.     AD1CON1bits.SIMSAM=0;       //Szimultán mintavételezés kikapcsolva (bár 12 bites módban úgysincs)
  18.     AD1CON2bits.ALTS=1;         //Alternáló mód bekapcsolása
  19.     AD1CON2bits.VCFG=0b011;     //Külső referenciaföld és referenciaforrás használata
  20.     AD1CON2bits.CHPS=0b00;      //Csak a CH0 mintavevő csatornát használjuk, bár 12 bites módban ennek úgy sincs jelentősége
  21.     AD1CON2bits.SMPI=0b0000;    //Minden egyes konverzió után történhessen megszakítás/DMA címléptetés
  22.     AD1CON3bits.ADRC=0;         //Az ADC konverziós órajelének a forrása a rendszer órajeléből származtatva
  23.     AD1CON3bits.ADCS=0b00000100;//TAD=5*TCY=142,85ns
  24.     AD1CON3bits.SAMC=0;         //Automatikus mintavételezés ideje TAD egységekben
  25.     AD1CHS0bits.CH0NA=0;        //A CH0 csatorna negatív jelének forrása A módban a VREFL lesz
  26.     AD1CHS0bits.CH0SA=2;        //A CH0 csatorna pozitív jelének forrása A módban az AN2 lesz
  27.     AD1CHS0bits.CH0NB=0;        //A CH0 csatorna negatív jelének forrása B módban a VREFL lesz
  28.     AD1CHS0bits.CH0SB=3;        //A CH0 csatorna pozitív jelének forrása B módban az AN3 lesz
  29.     AD1CON1bits.ADON=1;         //A/D modul bekapcsolva!
  30.  
  31.     //Megszakítások:
  32.     IEC0bits.AD1IE=1;           //ADC megszakítás engedélyezése
  33.     IPC3bits.AD1IP=4;           //ADC megszakítás prioritása 4-es legyen
  34.     IFS0bits.AD1IF=0;           //ADC flagbit törlése

Nem tudom, ez így jó? Nem hiányzik esetleg még hozzá valami?
Az AD1CON3bits.ADCS regiszter értékét egy másik áramkörömben (mely ugyan úgy 70MHz-el ment) már kiszámoltam és az elvileg jónak kell hogy legyen, azonban ott nem volt automatikus mintavételezés ezért nem tudom hogy az AD1CON3bits.SAMC milyen értéke kell hogy legyen.
Illetve: Tulajdonképpen most így megszakítás mikor fog történni? Ha vett 1-1 mintát az AN2-ről és az AN3-ról, és a két mérési eredmény két külön regiszterben lesz? Vagy vesz egy mintát az AN2-ről -> megszakítás, majd vesz az AN3-ról és az után is megszakítás lesz? Melyik regiszterbe, vagy regiszterekbe kapom az eredményeket?
A hozzászólás módosítva: Nov 27, 2015
(#) icserny válasza Attila86 hozzászólására (») Nov 27, 2015 /
 
Ha már DMA vezérlős ADC-vel vert meg a sors, akkor célszerű használni a DMA-t, mivel ezekből hiányzik a 16 szavas ADC kimeneti buffer - én legalábbis ezt a tanulságot szűrtem le.

Ha szimultán mintavételezést szeretnél, akkor az adc4simul.c mintaprogramot ajánlom figyelmedbe. A program részleteire már nem emlékszem (régen volt), de amit fontosnak tartottam, az le van írva... (a teljes program erre található)

Idézet:
„AD1CON3bits.SAMC milyen értéke kell hogy legyen?”

Nem tudom. Ha jól látom, nálam ADC_CONV_CLK_10Tcy szerepel, ami #0x0009-ként van definiálva.

DMA használat esetén az összes konverzió eredménye után a DMA tranzakció vált ki megszakítást.
(#) Attila86 válasza icserny hozzászólására (») Nov 27, 2015 /
 
A DMA-t nem szeretném használni. Azért nem, mert nincs szükségem a minták letárolására, csupán göngyölni szeretném őket. Azaz egy jó nagy változóhoz mindig hozzáadom az épp aktuális mintát és inkrementálok egy másik változót, mellyel így számolom hogy hány mintát vettem. Aztán amikor különböző okokból kifolyólag ténylegesen kíváncsi vagyok a lábon lévő analóg értékre, akkor a göngyöleget elosztom a számlálóval (átlagolok). Ehhez felesleges a DMA mert maguk a mintákra közvetlen nincs szükségem, csak feleslegesen foglalnák a memóriát.

Szimultán mintavételezést szintén nem szeretnék, nem kell hogy a két bemenetről egyszerre vegyen mintát a PIC. Teljesen jó nekem hogyha egymás után mintavételez a két lábról. Amúgy ha akarnék sem használhatnék szimultán mintavételezést, mivel 12 bites módban használom a ADC-t.

Az AD1CON3bits.SAMC tulajdonképpen mit határoz meg? Hogy automatikus mintavételezés esetén mennyi idő teljen el az n mintavétel befejezése és az n+1 mintavétel kezdete közt?
A hozzászólás módosítva: Nov 27, 2015
(#) Wezuv válasza Attila86 hozzászólására (») Nov 27, 2015 /
 
A DMA-val azt nem tudod megcsinálni, hogy egy területet kijelösz, majd indexeled, azaz ha megtelt, előröl kezded írni. Ezt a területet átlagolod, amikor kell. Csak egyszer kell megvárni, míg megtelik, utána az osztó is állandó lesz.
(#) Attila86 válasza Wezuv hozzászólására (») Nov 27, 2015 /
 
Nem tudom hogy lehet-e a DMA-val ilyet csinálni, valószínűleg igen.
De minek? Ez továbbra is feleslegesen foglalná a memóriát. Az hogyha az osztó állandó, az nem előny. (Na jó, legfeljebb ha a DMA terület mérete kettő hatványa, de egy hardveres osztáson most nem múlik semmi.)
Viszont ha így használnám ahogy írod, akkor mindig az utolsó X darab mintát tudnám átlagolni.

Viszont hogyha úgy dolgoztatom a PIC-et ahogyan én fentebb írtam, akkor bármikor azt mondhatom hogy na akkor most érdekel hogy mit mért a lábán a PIC. Ha egyetlen mintát sikerült csak vennie az előző 'lekérdezés' óta akkor azt kapom vissza, ha 7db mintát akkor annak az átlagát, ha 50000db mintát akkor pedig annak az átlagát.

A PIC 12 bites módban 500ksps-el tud mintavételezni. Én két bemenetét mintavételezném és átlagosan fél másodpercenként lenne szükségem új értékre, azaz csatornánként kb 125000 értékből kapom az átlagot. Az 125000 szó, a két csatorna esetében pedig 250000 szó. Ennyi adatmemóriája nincs a PIC-nek.
A hozzászólás módosítva: Nov 27, 2015
(#) Droot válasza Attila86 hozzászólására (») Nov 27, 2015 /
 
Attila!
Az ebayes IPS kijelzőről esetleg nincs videód vagy fotód amin látni a képminőséget?
Mondtad, hogy a touch nem olyan jó. Azzal mi a baj?
(#) Attila86 válasza Droot hozzászólására (») Nov 27, 2015 /
 
Ezen a videón ugyan az a kijelző látható mint amilyet én használok, az az Ebay-es IPS-es:
Bővebben: Youtube
Gyönyörű képe van, nagy a felbontása (480*320), szépek a színei és jó a betekintési szöge.
A touchpadja viszont használhatatlan sajnos. Lenyomod mondjuk a bal felső sarkában és más Y koordinátát ad hogyha ugyan úgy legfelül, de mondjuk középen vagy a jobb szélén nyomod meg. Írtam rá egy irgalmatlanul bonyolult linearizáló függvényt ami súlyozottan kiátlagolja az érintési koordinátákat és megpróbálja egy 6x5-ös mátrixra "ráhúzni az érintéseket" hogy használhatóbb legyen, de így sem az igazi sajnos. A durva linearitás-hibáján túl az egyik sarkában egy ujjnyi, háromszög alakú területen pedig teljesen érzéketlen a nyomásra.

A linearizáló függvény eredményéről van két képem. Az első a linearizálás nélküli, a második pedig a linearizáló függvénnyel készült.

Ja és van még hibája a tochpadnak! Eleve borzasztóan zajos és lenyomás után egy bizonyos ideig teljesen irreális koordinátákat ad.

Hogyha négy nagy, negyed képernyőnyi gombot akarsz kitenni a képernyőre akkor úgy még talán használható, de amúgy sajnos nem nagyon. Maga a képernyő viszont tényleg gyönyörű. Beszéltem az illetővel akié az a Youtube videó és ő vett már legalább 40-50db kijelzőt aminek azt mondja hogy kb a tizede ilyen touchpad-hibás.
(#) Wezuv válasza Attila86 hozzászólására (») Nov 27, 2015 /
 
A minták összege belefér minden eshetőség esetén a változódba?
(#) Attila86 hozzászólása Nov 27, 2015 /
 
Használta már valaki a DAC perifériát?
A dsPIC33FJ128GP804-ben van egy 16 bites sztereó audio DAC. Ennek a működéséről és használatáról van egy application note: Bővebben: Link
Semmi bonyolultat nem szeretnék, csak annyit hogy a két csatorna adjon ki magából egy-egy konstans DC szintet. Így próbáltam:
  1. TRISBbits.TRISB14=0;            //DAC L pozitív
  2.     TRISBbits.TRISB15=0;            //DAC L negatív
  3.     TRISBbits.TRISB12=0;            //DAC R pozitív
  4.     TRISBbits.TRISB13=0;            //DAC R negatív
  5.  
  6.     AD1PCFGLbits.PCFG9=0;    //AN9 analóg lesz (DAC L negatív)
  7.     AD1PCFGLbits.PCFG10=0;   //AN10 analóg lesz (DAC L pozitív)
  8.     AD1PCFGLbits.PCFG11=0;   //AN11 analóg lesz (DAC R negatív)
  9.     AD1PCFGLbits.PCFG12=0;   //AN12 analóg lesz (DAC R pozitív)
  10.  
  11.     DAC1STATbits.ROEN=1;        //R cstorna engedélyezve
  12.     DAC1STATbits.LOEN=1;        //L cstorna engedélyezve
  13.     DAC1STATbits.RITYPE=0;      //Megszakítás az R csatornán, ha a FIFO nem üres
  14.     DAC1STATbits.LITYPE=0;      //Megszakítás az L csatornán, ha a FIFO nem üres
  15.     DAC1CONbits.FORM=0;         //Előjel nélküli mód
  16.     DAC1STATbits.LMVOEN=0;      //Középponti kimenet tiltva az L csatornán
  17.     DAC1STATbits.RMVOEN=0;      //Középponti kimenet tiltva az R csatornán
  18.     DAC1DFLT=0;                 //A DAC alapértéke ha üres a FIFO
  19.     DAC1LDAT=50000;                 //L csatorna (feszültség) értéke
  20.     DAC1RDAT=20000;                 //R csatorna (áram) értéke
  21.     DAC1CONbits.DACEN=1;        //DAC engedélyezése

A bal csatorna negatívján 2,28V van, a pozitívján 1,13V. A jobb csatorna negatívján 2,35V, a pozitívján pedig 1,04V. Hiába írom át a két értéket, nem változik semmi. Debuggerben ha megnézem a DAC1LDAT és a DAC1RDAT regisztereket, nulla van bennük. Ha megpróbálom átírni manuálisan, akkor nem engedi, ugyan úgy nulla lesz bennük.
(#) Attila86 válasza Wezuv hozzászólására (») Nov 27, 2015 /
 
Bőven. Az előbb levezettem hogy maximum kb 125000db érték lesz csatornánként és azt is írtam hogy 12 bites a mintavétel. Ha mind a 125000db minta 4095 (0xFFF), akkor is bőven belefér egy 32 bites változóba. (De ha szükséges lenne, akkor lehetne 64 bites is az a változó.)
A hozzászólás módosítva: Nov 27, 2015
Következő: »»   1204 / 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