 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
primozsu Član


Pridružen-a: Sre 16 Feb 2005 9:11 Prispevkov: 412 Aktiv.: 1.74 Kraj: MB - Šentjur
|
Objavljeno: Pon Apr 16, 2012 11:01 am Naslov sporočila: MikroC |
|
|
Pozdravljeni!
Kako bi naredil v mikroC, da bi pri ADC pretvorbi "ADC_Read()" imel manjšo resolucijo. Da bi namesto 10 bit-ne pretvorbe imel 8 bit-no ali pa še manjšo, ker mi resolucija ni tako pomembna, hitrost pa mi je.
Lp, Primož
|
|
Nazaj na vrh |
|
 |
Tonny Član



Pridružen-a: Sre 23 Dec 2009 11:57 Prispevkov: 289 Aktiv.: 1.53 Kraj: Vrhnika - MS
|
Objavljeno: Pon Apr 16, 2012 11:21 am Naslov sporočila: |
|
|
Pozdravljen,
Enostavna rešitev je, da v svoji kodi ne uporabljaš ADC_Read, ampak bereš samo iz registra pomembnejših bitov rezultata pretvorbe (ADRESH). Tako boš dobil 8-bitni rezultat. Hitrejše možnosti mislim da ni. Ob tem pazi, da je bit ADFM=0 (rezultat je levo poravnan).
To je tako v splošnem. Je pa možno, da ima kateri od PIC-ev drugačno strukturo ADC registrov.
Lp, Toni
|
|
Nazaj na vrh |
|
 |
primozsu Član


Pridružen-a: Sre 16 Feb 2005 9:11 Prispevkov: 412 Aktiv.: 1.74 Kraj: MB - Šentjur
|
Objavljeno: Pon Apr 16, 2012 11:37 am Naslov sporočila: |
|
|
Problem je v tem, da sem popolni začetnik in nimam pojma kako bi to naredil.
Bi lahko prosim pripel primer kode kako bi prebral vrednost takšne pretvorbe?
Lp, Primož
|
|
Nazaj na vrh |
|
 |
Tonny Član



Pridružen-a: Sre 23 Dec 2009 11:57 Prispevkov: 289 Aktiv.: 1.53 Kraj: Vrhnika - MS
|
Objavljeno: Pon Apr 16, 2012 12:06 pm Naslov sporočila: |
|
|
Celotna tvoja koda ostane popolnoma enaka, zamenjaš le
Koda: |
tvoja_spremenljivka = ADC_Read(x); // x je kanal iz katerega bereš |
s to vrstico
Koda: |
tvoja_spremenljivka = ADRESH; |
Poleg tega je dobro, da optimiziraš še svojo spremenljivko. Namesto unsigned int tvoja_spremenljivka;, kot jo imaš verjetno definirano sedaj, uporabi unsigned short tvoja_spremenljivka;.
Lp, Toni
|
|
Nazaj na vrh |
|
 |
primozsu Član


Pridružen-a: Sre 16 Feb 2005 9:11 Prispevkov: 412 Aktiv.: 1.74 Kraj: MB - Šentjur
|
Objavljeno: Pon Apr 16, 2012 1:22 pm Naslov sporočila: |
|
|
Hvala.
Bom preizkusil.
|
|
Nazaj na vrh |
|
 |
MvE Član


Pridružen-a: Ned 04 Jan 2009 12:24 Prispevkov: 146 Aktiv.: 0.73 Kraj: MB
|
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.42
|
Objavljeno: Pon Apr 16, 2012 4:41 pm Naslov sporočila: |
|
|
MvE je napisal/a: |
Mislim da PIC nima možnosti izbire za 8 ali 10 bitno pretvorbo. |
Pretvorba je vedno 10 bit, lahko pa izbereš, kako se bo vrednosti poravnala v dveh registrih. Če rabiš samo 8 bitov izbereš levo poravnavo in enostavno ignoriraš ADRESL register.
_________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
 |
ljudsko Član


Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.65 Kraj: Koroška-Mežica
|
Objavljeno: Pon Apr 16, 2012 5:21 pm Naslov sporočila: |
|
|
gumby je napisal/a: |
MvE je napisal/a: |
Mislim da PIC nima možnosti izbire za 8 ali 10 bitno pretvorbo. |
Pretvorba je vedno 10 bit |
Se ne strinjam. Lahko je tudi 12 ali 16 bitna. Odvisno od mikrokrmilnika.
_________________ return;
brake; |
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.42
|
Objavljeno: Pon Apr 16, 2012 5:50 pm Naslov sporočila: |
|
|
Tiste z 10 bitnim A/D sem imel v mislih
_________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
 |
Tonny Član



Pridružen-a: Sre 23 Dec 2009 11:57 Prispevkov: 289 Aktiv.: 1.53 Kraj: Vrhnika - MS
|
Objavljeno: Pon Apr 16, 2012 6:16 pm Naslov sporočila: |
|
|
MvE je napisal/a: |
Mislim da PIC nima možnosti izbire za 8 ali 10 bitno pretvorbo. V vsakem primeru bo dal 10 bitni rezultat, z ADRESH boš jih pač prebral samo prvih 8. Tako, da če ti čas dopušča raje uporabiš "original" rezultat (da lepše zgleda)  |
To je seveda res, ampak če je hitrost kritična (kot je omenil primozsu), potem lahko z le nekoliko manj natančnim branjem rezultata prihraniš na nekaj ciklih, poleg tega pa še na pomnilniku. ADC pretvorbo pa tako ali tako potrebuješ v obeh primerih. Je pa res, da sem v drugem primeru pozabil še na ADCON0=1; za začetek pretvorbe in še while(ADCON0); za čakanje, da se ta bit ponovno postavi na 0 (ponavadi se sicer uporabi prekinitev). Šele nato lahko prebereš rezultat. Kanal (če uporabljaš enega) lahko nastaviš že v inicializaciji.
Vsekakor pa toplo priporočam branje datasheet-ov. Tam piše vse.
Me pa čisto iz firbca zanima, katera aplikacija potrebuje tako optimizacijo, glede na to, da se ima avtor za popolnega začetnika
|
|
Nazaj na vrh |
|
 |
ljudsko Član


Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.65 Kraj: Koroška-Mežica
|
Objavljeno: Tor Apr 17, 2012 12:28 am Naslov sporočila: |
|
|
gumby je napisal/a: |
Tiste z 10 bitnim A/D sem imel v mislih  |
apology accepted
_________________ return;
brake; |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|