forum.mcontrollers.com - hlavní stránka forum.mcontrollers.com - fórum

 

.: fórum - hlavní stránka :.
FAQFAQ HledatHledat Seznam uživatelůSeznam uživatelů Uživatelské skupinyUživatelské skupiny RegistraceRegistrace
ProfilProfil StatistikaStatistika Soukromé zprávySoukromé zprávy PřihlášeníPřihlášení

 
ADC-převodník

 
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> Microchip
 
Ted
Anonymní





PříspěvekZaslal: 28 červen 2020, 20:04    Předmět: ADC-převodník Citovat

Ahoj,
mam asi začátečnický dotaz, ale k věci. Vyvíjím si PWM regulátor topení a potřebuji načítat dva potenciometry skrze AD převodník u PIC 18F46K22, jenže mam problém. Bez problému načtu pouze jeden potenciometr a druhý nikoli, oba dva se mi "třískají" a ovlivňují navzájem. Netuším kde bych mohl mít chybu, nastavení MCU jsem prošel 3x tam i zpátky a chybu tam vysloveně nevidím, vstupy mam nastavené na vstupy skrze TRIS registr, analogy mam nastavené také správně skrze ANSELx registr. KÓd jsem použil z nějakého tutoriálu na webu.Aplikaci budu přepínat skrze push button; dva režimy - auto/manual, přičemž v manuálu budu číst ty dva analogové vstupy. Na nepájivém poli mi to sice sepne LED signalizující změnu režimu, ale při vyplé LED a nastavení potenciometrů se mi LED rozbliká a nebo zhasne.Je možné, že to způsobuje to nepájivé pole? MCU mam odrušené skrze keramiky na napájení i v tom nepájivém poli.

Tady je kód pro ADC:



kód:

    ADCON1 = 0x0C;
    ADCON2 = 0x92;
   
    ADCON0 = (channel << 2);
    ADCON0 |= 0x03;
       
    while (ADCON0bits.GO_nDONE);
   
    return ((ADRESH << 8)| ADRESL);


V ADC jsem zadal reálné číslo kanálu - pinu, kde mam připojený potenciometr

kód:

  ADC_hodnota[0] = ADC(11);


a nastavení MCU:

kód:

    PMD1 = 0xFF;                //setting peripheral module
    RCON  = 0x1F;               //setting reset control register
    STATUS = 0xC;               //setting status bits
    ANSELA = 0x00;              //digital port
    ANSELB = 0xF0;              //RB <0-3> digital, other as analog ports
    ANSELC = 0x00;              //digital ports
    ANSELD = 0x00;              //digital ports   
    ANSELE = 0x00;              //digital ports
    VREFCON0 = 0x00;            //nastaveni napetove reference


kód:

    TRISEbits.RE0 = 0;          //vystup pro LED1
    TRISDbits.RD3 = 1;          //vstup pro SW_1
    TRISEbits.RE2 = 0;          // PWM_1 - topeni_1
    TRISDbits.RD1 = 0;          // PWM_2 - topeni_2
    TRISBbits.RB4 = 1;          // vstup PTC_1
    TRISBbits.RB5 = 1;         CCPTMRS1 = 0x4; // vstup PTC_2


kód:

CCPTMRS1 = 0x4;


Co se týče frekvence MCU tak ho taktuji na 4 MHz.

Budu rád za pomoct, protože jestli tam mam chybu, tak já jí teda nevidím Sad
Návrat nahoru
 

 
MiloPS3
Profesionál
Profesionál


Založen: 24.12.2008
Příspěvky: 908
Bydliště: LAZNE KYNZVART

PříspěvekZaslal: 29 červen 2020, 18:24    Předmět: Citovat

cau,tohle ma delat co ?
kód:
ADC_hodnota[0] = ADC(11);

hodnota se cte z adresH/L
kód:
unsigned int16  ADC_hodnota_1;
ADC_hodnota_1=((ADRESH << 8)| ADRESL);

zapnes ad prevodnik, nastavis vstupy,nastavis referenci,nastavis kanal,pockas,spustis mereni,pockas nes se dokonci prevod,prectes hodnotu, zmenis kanal,pockas,spustis mereni.....

http://forum.mcontrollers.com/viewtopic.php?p=18191#18191

_________________
PIC,ASM / C , Mplab + CCS C Compiler
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
 

 
Ted
Anonymní





PříspěvekZaslal: 29 červen 2020, 18:40    Předmět: Funkce Citovat

MiloPS3 napsal:
cau,tohle ma delat co ?
kód:
ADC_hodnota[0] = ADC(11);

hodnota se cte z adresH/L
kód:
unsigned int16  ADC_hodnota_1;
ADC_hodnota_1=((ADRESH << 8)| ADRESL);

zapnes ad prevodnik, nastavis vstupy,nastavis referenci,nastavis kanal,pockas,spustis mereni,pockas nes se dokonci prevod,prectes hodnotu, zmenis kanal,pockas,spustis mereni.....

http://forum.mcontrollers.com/viewtopic.php?p=18191#18191


Sakra, když jsem to kopíroval, tak mi vypadla část fce. Tadu je celý kód té funkce:

kód:

unsigned int ADC (unsigned int channel) {   
           
    ADCON1 = 0x0C;
    ADCON2 = 0x92;
    ADRESH = 0x00;
    ADRESL = 0x00;
   
         
   
    ADCON0 = (channel << 2);
    ADCON0 |= 0x03;
       
   
    while (ADCON0bits.GO_nDONE);
   
    //ADC_value = ((ADRESH*256)| (ADRESL));   
   
    return ((ADRESH << 8)| ADRESL);   
   
}


No, jde mi o to, že když zadám parametru funkce číslo kanálu (portu) na kterém mam připojený potenciometr, tak aby vrátila hodnotu z AD převodníku. A tu hodnotu předávám do pole se kterým dále pracuji. Měním střídu PWM signálu, jenže v tom nepájivém poli se to chová prapodivně - potenciometry se navzájem ovlivňují.
Návrat nahoru
 

 
MiloPS3
Profesionál
Profesionál


Založen: 24.12.2008
Příspěvky: 908
Bydliště: LAZNE KYNZVART

PříspěvekZaslal: 29 červen 2020, 18:54    Předmět: Citovat

oblibena fraze :predchozi prispevky se necituji..

kolik bitu ma unsigned int v tvim prekladaci ? pouzivas 8/10 bit adc ?

rozchod pouze jeden kanal bez nakyho morfovani, precist a nejak zobrazit hodnotu

_________________
PIC,ASM / C , Mplab + CCS C Compiler
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
 

 
Ted
Anonymní





PříspěvekZaslal: 30 červen 2020, 16:11    Předmět: ADC Citovat

Ok, citovat předchozí nebudu.
No, přiznám se že netuším kolik bitů má unsigned int v XC8.
Na ADC používám 10 bitů - vycházel jsem z nějakého tutoriálu na webu.
Návrat nahoru
 

 
MiloPS3
Profesionál
Profesionál


Založen: 24.12.2008
Příspěvky: 908
Bydliště: LAZNE KYNZVART

PříspěvekZaslal: 30 červen 2020, 16:52    Předmět: Citovat

v xc8 nedelam...
https://microchipdeveloper.com/tls2101:type-qualifiers

https://microchipdeveloper.com/projects:mcu1101-project-3
https://microchipdeveloper.com/projects:mcu1101-project-5

a jak sem uz psal je potreba zacit postupne...

_________________
PIC,ASM / C , Mplab + CCS C Compiler
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
 

 
Anonymní






PříspěvekZaslal: 30 červen 2020, 18:33    Předmět: Citovat

Jo, pustím se do toho o víkendu pěkně po jednom kanálu ADC.
Návrat nahoru
 

Zobrazit příspěvky z předchozích:   
Zobrazit předchozí téma :: Zobrazit následující téma  
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> Microchip Časy uváděny v GMT + 2 hodiny
 
Strana 1 z 1
Přejdi na:  
Můžete přidat nové téma do tohoto fóra.
Můžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Můžete k příspěvkům připojovat soubory
Můžete stahovat a prohlížet přiložené soubory
 



Copyright © 2020 Rudolf Veselý, mcontrollers.com.
Je zakázáno používat části tohoto webu bez souhlasu autora.