Sari la conținut
ELFORUM - Forumul electronistilor

Reglarea temperaturii!HELP!


Vizitator geo_george517

Postări Recomandate

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
  • Răspunsuri 27
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • grifonul_alb

    6

  • jeepers

    5

  • Liviu M

    2

  • masterpic77

    2

Top autori în acest subiect

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

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
  • 2 ani mai târziu...

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

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

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

 

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

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

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

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
  • 2 săptămâni mai târziu...

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

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

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări