lama Postat Iunie 27, 2012 Partajează Postat Iunie 27, 2012 Salutincerc sa fac o conversie AD folosind un pic16f690Am facut codul si obtin niste valorii care se tot schimba fara o logica anumeCitirea o fac pe AN7 adica pe pinul RC3.Atasez codul , poate vedeti unde e eroarea./************************************************************************* ** Processor: 16F690 ** Pin assignments: ** RA0 - ICSPDAT ** RA1 - ICSPCLK ** RA2 - SCLK ** RA3 - MCLR ** RA4 - Ain ** RA5 - Test Led ** RB4 - SCE ** RB5 - Buton 1 ** RB6 - Buton 2 ** RB7 - Buton 3 ** RC0 - DNK ** RC1 - D/C ** RC2 - RST ** RC3 - Vin **************************************************************************/#include #include #include #include "5110.h"#define CLK RA2 #define RST RC2 __CONFIG(FOSC_INTRCIO & // INTOSC oscillator internal WDTE_OFF & // Watchdog timer disabled PWRTE_ON & // Power up timer enabled BOREN_OFF & // Brown-out detect modes disabled CPD_OFF & // Protection of program code off disabled CP_OFF & // Protection of data block disabled MCLRE_OFF); // Master clear reset#define _XTAL_FREQ 8000000 /* Crystal frequency in MHz */#define cit_delay 1000#define Led_test RA5#define ON 1#define OFF 0void init(void){OSCCON=0x70; /* Select 8 Mhz internal clock */TRISA = 0x00; TRISB = 0x00; TRISC = 0b00001000; // RC3 input PORTC = 0; PORTB = 0; PORTA = 0; ANSEL = 0b10000000; // Set PORT AN7 to analog input AN0 to AN6 digital I/OANSELH = 0x00; // Set PORT AN8 to AN11 as Digital I/OADCON0=0b10011100; // select right justify result. ADC port channel AN7ADCON1=0b00110000; // Select the FRC for 8 Mhz//ADCON1=0b00100000; //Fosc/32VCFG=0; //referinta la VDd- mai fortez odata desi e facuta mai susCM1CON0 = 0; CM2CON0 = 0; C1ON=0; // Turn off Comparators C2ON=0;VRCON = 0; WPUB=0;WPUA=0;ADON=1; // turn on the A2D conversion module}void main(void){ char i;unsigned int adc,adc_dec;unsigned char buf[10]; init(); CLK=0; // SLED4C clock pin must idle low init_nokia(); __delay_ms(250); nokia_build_DDRAM(); // clear the display while(1) { nokia_gotoxy(0,0); nokia_printmessage(" ADC"); Led_test=ON; adc=0; adc_dec=0;for(i=0;i<100;i++) { GO_nDONE=1; // initiate conversion on the channel 0 while(GO_nDONE) continue; // Wait conversion done adc += ADRESL; // Get the 8 bit LSB result adc += (ADRESH << 8); // Get the 2 bit MSB result adc_dec += ( ADRESH << 8) + ADRESL; } adc /= 100; adc_dec /=100; sprintf(buf, " %d", adc_dec); nokia_gotoxy(0,4); nokia_printmessage(" "); nokia_gotoxy(0,4); nokia_printmessage(&buf); Led_test=OFF; __delay_ms(1000); }} Link spre comentariu
Liviu M Postat Iunie 27, 2012 Partajează Postat Iunie 27, 2012 OSCCON nu trebuie sa fie 0x71? Intreb, n-am lucrat cu serii de-astea noi si n-am timp acum sa citesc toata documentatia, asta mi-a sarit singur in ochi (voiam sa vad daca chiar au clock intern de 8MHz). Link spre comentariu
lama Postat Iunie 27, 2012 Autor Partajează Postat Iunie 27, 2012 OSCCON nu trebuie sa fie 0x71? Intreb, n-am lucrat cu serii de-astea noi si n-am timp acum sa citesc toata documentatia, asta mi-a sarit singur in ochi (voiam sa vad daca chiar au clock intern de 8MHz).Asa am zis si eu dar peste tot am gasit ca e 0x70desi si mie mi-a iesit 0b01110001 adica 0x71.oricum face la fel cu ambele valori: adica citeste ceva aiurea chiar daca am sau nu tensiune la intrare Link spre comentariu
Liviu M Postat Iunie 27, 2012 Partajează Postat Iunie 27, 2012 Din cate m-am prins eu pana acum (mai mult din ce am citit decat din experienta proprie), asta inseamna ca pinul pe care faci achizitia e prost configurat.Esti sigur ca i-ai dezactivat toate celelalte functii? Link spre comentariu
lama Postat Iunie 27, 2012 Autor Partajează Postat Iunie 27, 2012 Din cate m-am prins eu pana acum (mai mult din ce am citit decat din experienta proprie), asta inseamna ca pinul pe care faci achizitia e prost configurat.Esti sigur ca i-ai dezactivat toate celelalte functii?RC3/AN7/C12IN3-/P1C RC3 ST CMOS General purpose I/O.AN7 AN — A/D Channel 7 input.C12IN3- AN — Comparator C1 or C2 negative input.P1C — CMOS PWM output.Astea sunt functiile luiPartea de ADC am setat-o,comparator e offMai ramine dor partea de PWM care cred ca e anulata odata cu comparatorulSau nu? Link spre comentariu
Liviu M Postat Iunie 27, 2012 Partajează Postat Iunie 27, 2012 Nu mai am idei. :(Spor! Link spre comentariu
lama Postat Iunie 27, 2012 Autor Partajează Postat Iunie 27, 2012 Faza tare e ca am mutat pe pinul alaturat care e RC6/AN8 si face la felCe e gresit ....... Link spre comentariu
costi002 Postat Iunie 27, 2012 Partajează Postat Iunie 27, 2012 pinul folosit, e legat la Vcc/Gnd sau este in aer.LE: pinul care este analog, este setat ca intrare? (trisc,6 sau 7) Link spre comentariu
lama Postat Iunie 27, 2012 Autor Partajează Postat Iunie 27, 2012 pinul folosit, e legat la Vcc/Gnd sau este in aer.LE: pinul care este analog, este setat ca intrare? (trisc,6 sau 7)E legat la o sursa de tensiune variabila prin doua rezistente .Pai aveti codul. Eu zic ca e setat ca intrare in trisc si e selecat ca intrare la ADC. Link spre comentariu
costi002 Postat Iunie 27, 2012 Partajează Postat Iunie 27, 2012 asa este, nu am fost atent. Acum, vin cu o alta intrebare? pe ce afisezi valoarea citita? ce inseamna valori fara logica? Link spre comentariu
lama Postat Iunie 27, 2012 Autor Partajează Postat Iunie 27, 2012 asa este, nu am fost atent. Acum, vin cu o alta intrebare? pe ce afisezi valoarea citita? ce inseamna valori fara logica?pe un LCD nokia 5110(este .h in fata codului)Valori fara logica: chiar fara nimic conecat la intrare el pare sa citeasca ceva, niste valori aleatoare , nerepetitive. Link spre comentariu
costi002 Postat Iunie 27, 2012 Partajează Postat Iunie 27, 2012 pune intrarea pic-ului direct la masa sau vcc fara rezistenta sau alt circuit auxiliar. daca este setat corect, vei citi 0 sau 255. Link spre comentariu
lama Postat Iunie 27, 2012 Autor Partajează Postat Iunie 27, 2012 L-am pus la masasi comportamentul se mentine Link spre comentariu
costi002 Postat Iunie 27, 2012 Partajează Postat Iunie 27, 2012 In acest caz, chiar nu stiu ce sa mai spun. Problema mea este ca nu ma pricep la C, eu is cu asembler-ul. De fiecare data cand am lucrat cu adc, pur si simplu am urmati pasii descrisi in datasheet, pas cu pas si de fiecare data a mers perfect. Link spre comentariu
Ashky Postat Iunie 27, 2012 Partajează Postat Iunie 27, 2012 Si eu sunt tot cu asm-ul.Presupunand ca lucrezi la 8 Mhz, incearca sa incarci in ADCON1 0b0101000 si vezi daca merge.Vezi ca in datasheet la pagina 109 e un tabel cu valorile in functie de frecventa de lucru.La config eu am __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)Nu am gasit ce inseamna FOSC_INTRCIO si INTOSC.Si inca o chestie.IntreGO_nDONE=1; // initiate conversion on the channel 0siwhile(GO_nDONE) continue; // Wait conversion done am un delay de 5usecLa 4 Mhz a mers si fara, la 8 nu. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum