Sari la conținut
ELFORUM - Forumul electronistilor

pic16f690 pwm hard


lama

Postări Recomandate

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

Top autori în acest subiect

  • lama

    3

  • Rabulea Sergiu

    1

  • Liviu M

    1

Zile populare

Top autori în acest subiect

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

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 :da ).

Link spre comentariu

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 :da ).

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

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

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