cirip Postat Aprilie 10, 2009 Partajează Postat Aprilie 10, 2009 Cred ca sunt multe neintelegeri la mijloc. Picul poate primi semnale analogice daca are convertor A/D. Daca nu are, cum e cazul lui F84, intrarile sunt exclusiv digitale.Uite o sugestie:Termometru digital DS18B20. Picul il poate citi prin semnale digitale, dar protocolul de comunicatie trebuie inteles foarte bine, ca sa il faci sa mearga.In prima etapa picul poate comanda ventilatorul on/off. Pe urma te dai cu PWM.Ce zici? Link spre comentariu
Liviu M Postat Aprilie 10, 2009 Partajează Postat Aprilie 10, 2009 Daca 16F84 nu e impus si vrei sa-ti usurezi (putin) viata, poti cauta un PIC care sa aiba PWM si interfata seriala i2c si sa folosesti un senzor de temperatura/termometru digital de asemenea cu interfata i2c (ds1631 e un exemplu). Care PIC satisface criteriile de mai sus afli pe site la microchip. Link spre comentariu
masterpic77 Postat Aprilie 10, 2009 Partajează Postat Aprilie 10, 2009 Iti recomad un PIC16F873 (mult peste 16F84A) , are si PWM si ADC daca vrei senzor analogic ; sau poti folosi modulul MSSP pentru comunicatia de exemplu pe I2C/SPI cu un senzor digital de ex. LM92 Link spre comentariu
grifonul_alb Postat Noiembrie 24, 2011 Partajează Postat Noiembrie 24, 2011 Salut.De ceva vreme am inceput sa ma joc cu microcontrolere si am gasit PIC16C74A. Am mai gasit prin pisele mele un LCD la care i-am aflat pinii. Vreau sa fac un Controler de temperatura dar m-am impotmolit la citirea si conversia temperaturii dion LM335. Ca mediu de programare folosesc MikroC.Specific ca LM335 este conectat la portul RA0.Versiunea 1 *************************// LCD module connectionssbit LCD_RS at RB4_bit;sbit LCD_EN at RB5_bit;sbit LCD_D4 at RB0_bit;sbit LCD_D5 at RB1_bit;sbit LCD_D6 at RB2_bit;sbit LCD_D7 at RB3_bit;sbit LCD_RS_Direction at TRISB4_bit;sbit LCD_EN_Direction at TRISB5_bit;sbit LCD_D4_Direction at TRISB0_bit;sbit LCD_D5_Direction at TRISB1_bit;sbit LCD_D6_Direction at TRISB2_bit;sbit LCD_D7_Direction at TRISB3_bit;// End LCD module connections// Define Messages char text1[] = "Testing LCD"; char text2[] = "using PIC16C74A"; char text3[] = "Test successful"; char text4[] = "in 4-bit made"; unsigned int temp1;void main() { Lcd_Init(); // Initialize LCD // Initializare porturi analogice TRISA=0b00000001; //set RA0 and RA1 to input TRISC = 0; TRISD = 0; ADCON0 = 0b10000000; //setup adc ADCON1 = 0b00000000; ADC_Init(); do { Lcd_Cmd(_LCD_CLEAR); // Clear display Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off PortD = 0XFF; Delay_ms(1000); // temp1 = ADC_Get_Sample(0); temp1 = ADC_Read(0); PortD = temp1; Delay_ms(1000); PortD = ADRES; Delay_ms(1000); ShortToStr(temp1, text1); // ByteToStr(temp1, text1); // Get 10-bit results of AD conversion Lcd_Out(1,3,text1); // Write message1 in 1st row Lcd_Out(2,1,text2); // Write message1 in 2nd row Delay_ms(2000); // delay 3s Lcd_Cmd(_LCD_CLEAR); // Clear display Delay_ms(1000); // delay 1s Lcd_Out(1,2,text3); // Write message3 in 1st row Lcd_Out(2,3,text4); PortD = 0X00; Delay_ms(2000); // delay 3s } while(1);}************************* Versiunea 2 *************************//ADC conversion and outputting digital value on leds void ADCInit(){ //configuring A/D module ADCON1 = 0b00000000; } //function to read ADC channel unsigned int ADCRead( unsigned char ch){ ADCON0 = 0x00;//configuring analog channel ADCON0 = (ch<<0); //selecting analog channel ADON_bit = 1; //switch on adc module GO_DONE_bit =1;//Start conversion while(GO_DONE_bit); //wait for the conversion to finish ADON_bit =0; //switch off adc return ADRES; } void main() { ADCInit(); //initialises adc in main program TRISC = 0; TRISB = 0x00;//putting port b as output while(1){ //always true condition. Endless loop unsigned int val; //adc value val=ADCRead(0); //read from channel 0 PORTB = val; // outputting result of AD conversion } }Nu-mi merge nici una din variante.Va rog ajutati-ma , ca nu stiu ce gresesc , desi am citit datasheetul PIC-ului si despre conversia analog -> digital. Link spre comentariu
vasile eugen Postat Noiembrie 24, 2011 Partajează Postat Noiembrie 24, 2011 este o versiune de termostat cu PIC16F628+DS1820 care regleaza temperatura de la domeniul - la + grade celsius ,in plus are si functia histezis,daca dai pe GOOGLE termostat elektor vei gasi si functioneaza foarte bine Link spre comentariu
grifonul_alb Postat Noiembrie 24, 2011 Partajează Postat Noiembrie 24, 2011 Am gasit multe scheme si programe cu senzor digital de temperatura. Eu vreau sa "storc" cat pot din ceea ce am adica din acest PIC16C74A si LM335. Si mai mult m-a provocat faptul ca nu-mi merge partea de conversie Analog-Digital. Link spre comentariu
grifonul_alb Postat Noiembrie 27, 2011 Partajează Postat Noiembrie 27, 2011 Help. Nu stiu ce sa-i fac sa functioneze convertorul analog - digital la programul de mai sus. Ceva gresesc si nu setez ori nu setez corect. Ajutati un incepator in ale PIC-ului. Link spre comentariu
nico_2010 Postat Noiembrie 30, 2011 Partajează Postat Noiembrie 30, 2011 ADCON0 = 0b10000000; //setup adc ; aici trebuia ADCON0.ADON=0 (ADC oprit) sau ADCON0.ADON=1 (ADC pornit) ADCON1 = 0b00000000; ; ADCON1 = 0b00000111 ADC_Init(); do {... PortD = temp1; Delay_ms(1000); PortD = ADRES; ce vrei sa faci aici? Vrei sa scoti pe Portul D rezultatul masurarii? daca da, deja ai facut-o mai sus! Delay_ms(1000); . Verifica cu modificarile de mai sus si vezi ce obtii. Link spre comentariu
grifonul_alb Postat Decembrie 2, 2011 Partajează Postat Decembrie 2, 2011 Am facut modificarile sugerate de tine (nico_2010) si tot nu merge. Precizez ca nu am scris programul in pic ci simulez functionarea lui in ISIS . Si nu merge deloc . Am folosit si Watchdog si am observat ca registrul ADRES isi schimba valoare dar aceasta nu ajunge in variabila folosita de mine (tempa) si nici daca o trimit direct la portul D.Nu stiu ce sa mai modific ca sa functioneze convertorul A/D. Link spre comentariu
nico_2010 Postat Decembrie 2, 2011 Partajează Postat Decembrie 2, 2011 OK! Incearca codul de mai jos: // LCD module connectionssbit LCD_RS at RB4_bit;sbit LCD_EN at RB5_bit;sbit LCD_D4 at RB0_bit;sbit LCD_D5 at RB1_bit;sbit LCD_D6 at RB2_bit;sbit LCD_D7 at RB3_bit;sbit LCD_RS_Direction at TRISB4_bit;sbit LCD_EN_Direction at TRISB5_bit;sbit LCD_D4_Direction at TRISB0_bit;sbit LCD_D5_Direction at TRISB1_bit;sbit LCD_D6_Direction at TRISB2_bit;sbit LCD_D7_Direction at TRISB3_bit;// End LCD module connectionsunsigned int temp_res;unsigned int temp_res;char txt_val[13];void main() { ADCON0= 0X48; ADCON1= 0X05 ; TRISA = 0xFF; // PORTA is input TRISC = 0; // PORTC is output TRISD = 0; // PORTD is output Lcd_Init(); // Initialize LCD Lcd_Cmd(_LCD_CLEAR); // Clear display Lcd_Cmd(_LCD_CURSOR_OFF); do { temp_res = ADC_Read(1); // Get 10-bit results of AD conversion INTtostr(temp_res, txt_val); LCD_OUT (1,2,txt_val); } while(1);}Ar trebui sa mearga. Aplica o tensiune pe RA1 si pe LCD ar trebui sa apara valoarea ADC. Link spre comentariu
grifonul_alb Postat Decembrie 5, 2011 Partajează Postat Decembrie 5, 2011 Tot nu-mi functioneaza conversia A/D a acestui program - montaj in ISIS. Am adaptat programul pentru PIC 16F877 si a functionat.Ultima concluzie la care am ajuns pana acum este ca simulatorul ISIS nu functioneaza corect, nu face simularea completa si corecta a PIC16C74a sau PIC16C77 . Zilele astea sper sa am timp si sa scriu o varianta a softului in PIC si sa vad cum functioneaza PIC-ul. Multumesc inca o data pentru ajutor. Link spre comentariu
grifonul_alb Postat Decembrie 19, 2011 Partajează Postat Decembrie 19, 2011 Dupa ce mi-am facut si programator JDM si am inceput scrierea PIC-ului am observat ca PIC16C74A-20/P este de fapt OTP = One Time Programable ( o singura data programabil) )Asta a fost experienta mea cu PIC-uri pana amu. Link spre comentariu
XAN77 Postat Decembrie 26, 2011 Partajează Postat Decembrie 26, 2011 1. cititi fratilor datasheet, mama lui de pdf nemernic.2. eu inteleg de ce eviti un 18b20, pesemne ca asta ar presupune o comanda la magazin online. deci vrei sa faci cu ce ai la indemana. Ar mai fi o solutie analogica care presupune AD dar vrei musai sa folosesti controler fara AD. Controlerul va masura timpul in care un condensator se incarca sau descarca printr-un termistor. Se poate folosi o comanda a limbajelor avansate de citire a potentiometrelor, daca au asa ceva. Basicul (proton ide) are asa ceva, parca POT IN este comanda, descrie in help-ul compilatorului ce face si cum se foloseste. Eu am facut asa ceva acum mai multi ani cand eram mic si prost si functiona bine. Singura problema e neliniaritatea termistorului si atunci nu stiam nici o formula cu care sa corectez informatia, ma rog, nici acum nu stiu. Dar cum ma interesa o plaja mica de temperaturi, am masurat comparand cu un termometru banal si am notat valorile la diferite temperaturi, ce sa-i fac daca habar nu aveam/am, am facut babeste. 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