Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

A/D konverzija C - molim za pomoć

[es] :: Elektronika :: Mikrokontroleri :: A/D konverzija C - molim za pomoć

[ Pregleda: 1427 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mst.petrovic
milos petrovic
student
nis

Član broj: 256875
Poruke: 47
*.dynamic.sbb.rs.



+1 Profil

icon A/D konverzija C - molim za pomoć03.03.2013. u 22:44 - pre 135 meseci
poštovani,

pokušavam da shvatim kako funkcioniše a/d konverzija u c-u ali nigde odgovarajućeg uputstva za moj kompajler HITECH C compiler. Može li mi neko objasniti uopšteno pa ću pokušati da povežem sa ovim što sam napisao...
unapred hvala
Code:
  int read(void)
       {
         ADCON0bits.ADON=1;
         DelayUs(2);
         while(ADCON0bits.ADON)
            {
             ADCON0bits.ADON=0;
             return ADRESL;
            }
        }
-------------------------
ovo ispod je u main-u 
 while(1)
    {
    read();
      PORTC=ADRESL;
      PORTDbits.RD5=1;
    }
}


ovo je bila čisto proba da vidim da li radi ali kada probam da ga debagiram ADRESL ne menja svoje stanje čak i kad dovedem neki napon na pinu AN0

korisitm prvi kanal AN0 za konvertiju a na portu C sam povezao da mi izbaci neku vrednost, bilo šta, RD5 pali tranzistor za led displej
mst
 
Odgovor na temu

shpiki
Student
Novi Sad

Član broj: 50342
Poruke: 1651



+62 Profil

icon Re: A/D konverzija C - molim za pomoć04.03.2013. u 01:36 - pre 135 meseci
A kontroler je PIC??? ?
There are only 10 types of people in the world:
those who understand binary, and those who don't.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: A/D konverzija C - molim za pomoć04.03.2013. u 05:02 - pre 135 meseci
da li si procitao datasheet?
sta u datasheet-u za taj kontroler vezano za adc nije jasno?

 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: A/D konverzija C - molim za pomoć04.03.2013. u 06:58 - pre 135 meseci
Pogledaj primere koji su ti došli uz kompajler. Imaš ih u podirektorijumu samples\adc ili samples\a2d.
Pogledaj bolje datasheet. Sve je objašnjeno.
gorankg
 
Odgovor na temu

mst.petrovic
milos petrovic
student
nis

Član broj: 256875
Poruke: 47
*.dynamic.sbb.rs.



+1 Profil

icon Re: A/D konverzija C - molim za pomoć04.03.2013. u 08:54 - pre 135 meseci
kontroler je 16f1937, naravno da sam pročitao datash. ali izgleda da nešto propuštam...
pogledaću primere koji su došli uz kompajler pa možda naletim na nešto interesantno.
mst
 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: A/D konverzija C - molim za pomoć04.03.2013. u 09:48 - pre 135 meseci
Nigde nisi odabrao kanal koji ćeš da uzorkuješ. Evo npr. za PIC16F1827:

Code:


unsigned int itmp;

    ADCON0 = 0b00010000;                // AN4 ADC selected
    ADCON1 = 0b11010000;                // Right justified result, A/D Conversion Clock FOSC/16, VREF- is connected to VSS, VREF+ is connected to VDD
        ADON = 1;                    // A/D converter module is operating
    __delay_us(ACQ_TIME);              // Wait the required acquisition time
    ADGO = 1;                              // start AD conversion
        while(ADGO){}                         // conversion is complete?
    ADON = 0;                                   // A/D converter module is shutoff
    itmp = (unsigned int)ADRESH;
    itmp <<= 8;
    itmp |= (unsigned int)ADRESL;    



[Ovu poruku je menjao goran_68 dana 04.03.2013. u 14:59 GMT+1]

[Ovu poruku je menjao goran_68 dana 04.03.2013. u 14:59 GMT+1]
gorankg
 
Odgovor na temu

mst.petrovic
milos petrovic
student
nis

Član broj: 256875
Poruke: 47
*.dynamic.sbb.rs.



+1 Profil

icon Re: A/D konverzija C - molim za pomoć04.03.2013. u 11:26 - pre 135 meseci
Hvala svima na odgovorim.
@Gorane mozes li da mi pojasnis ovaj deo koda iz tvog zadnjeg posta:
Code:

    itmp = (unsigned int)ADRESH;
    itmp <<= 8;
    itmp |= (unsigned int)ADRESL;    



posle smestanja u promenljivu itmp rezulatata konverzije iz registra ADRESH....
mst
 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: A/D konverzija C - molim za pomoć04.03.2013. u 12:20 - pre 135 meseci
Video si u podešavanjima za AD konverziju da sam odabrao da mi rezultat bude desno poravnan tj. 10-bitni rezultat je smešten ovako:

Code:

                     ADRESH                                                                                ADRESL
bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0                      bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0              
  x      x     x       x      x      x     ad9    ad8                       ad7   ad6    ad5    ad4    ad3    ad2    ad1    ad0


Posle izraza koji sam dao u prethodnom postu će sadržaj dva bajta itmp biti ADRESH | ADRESL.
U prvom koraku je ceo ADRESH smešten na mesto "nižeg" bajta itmp.
Drugi korak sadržaj itmp pomera za 8 mesta ulevo čime je ADRESH sada došao na svoje mesto, u "gornji" bajt itmp.
Na kraju se radi logička ILI operacija nad bitovima itmp i ADRESL pa je u itmp smešten kompletan 10-bitni rezultat konverzije.

Elegantnije je da se piše ovako:

Code:

union bword
{
   unsigned int ui;
   unsigned char ub[2];   
}itmp;

   itmp.ub[1] = ADRESH;
   itmp.ub[0] = ADRESL;



pa je rezultat konverzije itmp.ui


Možeš rezultat i da poravnaš levo. U tom slučaju on izgleda ovako:

Code:

                     ADRESH                                                                                ADRESL
bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0                      bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0              
 ad9   ad8    ad7     ad6    ad5    ad4   ad3   ad2                        ad1    ad0     x       x       x       x       x       x


Ako u tom slučaju odbaciš zadnja dva bita konverzije (ad1 i ad0) i koristiš samo ADRESH rezultat ima 8 bita i možeš pisati:

Code:

unsigned char ad;

   ad = ADRESH;

E sad, 8-bita i 10-bita konverzije nije isto ali to ionako zavisi od toga šta radiš.
gorankg
 
Odgovor na temu

mst.petrovic
milos petrovic
student
nis

Član broj: 256875
Poruke: 47
*.dynamic.sbb.rs.



+1 Profil

icon Re: A/D konverzija C - molim za pomoć05.03.2013. u 19:40 - pre 135 meseci
Gorane,
hvala puno na pomoći, razjasnio si ga za 10-ku :D !!!! nema više nejasnoća! !!! ! ! ! ! !
sada radi kako treba, problem je bio i na pinu na koji dolazi sonda kty 81 nisam stavio da je ulazni... :D

Moram da idem sa 10-bitnim registrom zato što mi vrednost napona po koraku mnogo viša od vrednosti koje daje sonda po stepenu.

Imao sam i problem sa drugim delom ali ovoga puta sa 16-bitnim tajmerom, kada upišem H, šiftam za 8 mesta pa upišem L on sve to lepo u radi i u narednom koraku mi prikaže tu promenljivu kao 8 bitnu....(sve se to dešava u interaptu i naravno čuvam u promenljivoj rezultat koja je 16 bitna) čudno ali snaći ću se valjda. Još jednom hvala, mnogo ste mi pomogli !!!!



mst
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: A/D konverzija C - molim za pomoć

[ Pregleda: 1427 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.