lama Postat Octombrie 8, 2012 Partajează Postat Octombrie 8, 2012 salut incerc sa imi fac o statie de lipit si am ajuns la partea de soft unde patesc o chestie tare ciudata astfel am facut testul pe o alta placa(tot cu acelasi pic , un led, doua butoane) si codul parea sa merga, adica aprindem progresiv ledul am folosit acelasi cod si letconul se tot incalzeste asa ca l-am prefixat pe duty cycle la 1 si face acelsi lucru, adica il tot incalzeste ..... mai jos codul poate vede cineva unde gresesc ..... /************************************************************************* ** Processor: 16F690 ** Pin assignments: ** RA0 - ICSPDAT ** RA1 - ICSPCLK ** RA2 - SCLK ** RA3 - MCLR ** RA4 - Tin ** RA5 - Test Led ** RB4 - SCE ** RB5 - Buton 1 ** RB6 - Buton 2 ** RB7 - Buton 3 ** RC0 - DNK ** RC1 - D/C ** RC2 - RST ** RC3 - Fan ** RC4 - DS18B20 ** RC5 - PWMout ** RC7 - Buton 4 ************************************************************************/#include <pic.h> #include <stdlib.h>#include <stdio.h>#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=0x71; /* Select 8 Mhz internal clock */TRISA = 0b00010000; TRISB = 0b11100000; //RB5,6,7TRISC = 0b10000000; // RC7 input PORTC = 0; PORTB = 0; PORTA = 0; ANSEL = 0b00001000; // Set PORT AN3 to analog input -AN0 to AN7 digital I/OANSELH = 0x00; // Set PORT AN8 to AN11 as Digital I/OADCON0=0b10001100; // select right justify result. ADC port channel AN3ADCON1=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; // disable comparator 2 (RC0, RC1, RC4 usable)C1ON=0; // Turn off Comparators C2ON=0;VRCON = 0; // disable CVref (RC2 usable) WPUB=0;WPUA=0;ADON=1; // turn on the A2D conversion moduleCCP1CON=0b00001100; // Single PWM mode; P1A, P1C active-high; P1B, P1D active-highCCPR1L=0; // Start with zero Duty Cycle T2CON=0b00000101; // Postscale: 1:1, Timer2=On, Prescale = 1:4PR2=0x65; // Frequency: 4.90 kHz - resolution 8 bitsTMR2=0; // Start with zero Counter}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("Solder-ADC");//partea de 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, "ADC=%d", adc_dec); nokia_gotoxy(0,4); nokia_printmessage(" "); nokia_gotoxy(0,4); nokia_printmessage(&buf); Led_test=OFF;//sf partea de ADC __delay_ms(1000); CCPR1L=0x01;//Duty cel mai mic de 1 sprintf(buf, "Duty: %d", 0x01); nokia_gotoxy(0,3); nokia_printmessage(&buf); }} Protel Schematic.pdf Link spre comentariu
lama Postat Octombrie 8, 2012 Autor Partajează Postat Octombrie 8, 2012 De fapt sa intreb ceva pe cei care cunosc mai multe. Poate am inteles eu gresit.Eu am intelesc ca pwm il folosesc ca sa inclazesc heterul pina se ajunge la un echilibru(dat de perioada cind acesta este alimentat cu perioada cind nu este alimentat).Daca e asa ar trebui sa reduc frecventa?Adica el nu reuseste sa se raceasca cind nu este alimentat?Caci din testul cu un duty de 1 el tot continua sa se incalzeaza(la 400 grade l-am oprit) Link spre comentariu
Liviu M Postat Octombrie 8, 2012 Partajează Postat Octombrie 8, 2012 Ai cum sa te asiguri ca semnalul PWM e atat de lung pe cat il vrei?Nu de alta, da' daca ai vreo "scama" in CCPR1H (nu-l initializezi pe nicaieri), poate ca ce ai in CCPR1L nici nu mai conteaza.Bati si eu campii ca tocmai ma joc cu modului PWM de la un PIC si inca nu stiu chiar de tot cu ce se mananca (desi am vazut deja pe osciloscop semnalul pe care il vreau ). Link spre comentariu
lama Postat Octombrie 8, 2012 Autor Partajează Postat Octombrie 8, 2012 Ai cum sa te asiguri ca semnalul PWM e atat de lung pe cat il vrei?Nu de alta, da' daca ai vreo "scama" in CCPR1H (nu-l initializezi pe nicaieri), poate ca ce ai in CCPR1L nici nu mai conteaza.Bati si eu campii ca tocmai ma joc cu modului PWM de la un PIC si inca nu stiu chiar de tot cu ce se mananca (desi am vazut deja pe osciloscop semnalul pe care il vreau ).din pacate nu am acces la un osciloscop. O sa initializez CCPR1H, dar teoretic nu are importanta ce e acolo rezoluti fiind pe 8.Sa vad ce iese.... Link spre comentariu
Rabulea Sergiu Postat Octombrie 8, 2012 Partajează Postat Octombrie 8, 2012 Doar prin PWM nu o sa ajungi la echilibru deoarece viteza de incalzire a varfului este mult mai mare decat viteza cu care acesta se raceste in aer.Pentru a ajunge la un echilibru trebuie sa compari valoarea data de ADC cu o valoare prestabilita, iar in momentul cand se ajunge acea valoare sa opresti PWM,in felul acesta reduci fluctuatiile de temperatura si poti folosi PWM-ul pana la 100%.Daca nu compari valoarea data de ADC cu o valoare prestabilita, o sa ai surpriza ca in momentul in care vrei sa incalzesti un traseu mai mare, nu o sa poti, pentru ca atuci viteza de racire va fi mai mare decat viteza de incalzire cu PWM = 1. 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