TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: robotic en 30 de Septiembre de 2010, 02:05:22
-
Hola amigos del foro, ya que pude en proyectos anteriores conectar 4 sensores de temperatura lm35 al pic 16f877a y hacer que cambiara los sensores de temperatura de labview.
y también a través de labview poder cambiar la frecuencia de un motor simulado en proteus.
junte los dos códigos en C compile y no me funciono ni lo uno ni lo otro.que podrá ser?
habrá que colocar interrupciones para que cuando este escribiendo deje de leer y viceversa?
la idea es
proteus => Labview
labview => proteus
acá esta el código
#include <ccs_tesis.h>
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,stream=HOSTPC)
#define LCD_ENABLE_PIN PIN_D0 //comunica el pin enable del lcd con el pin d0 del pic
#define LCD_RS_PIN PIN_D1//comunica el pin RS del lcd con el pin d1 del pic
#define LCD_RW_PIN PIN_D2//comunica el pin RW del lcd con el pin d2 del pic
#define LCD_DATA4 PIN_D4//comunica el pin D4 del lcd con el pin d4 del pic
#define LCD_DATA5 PIN_D5//comunica el pin D5 del lcd con el pin d5 del pic
#define LCD_DATA6 PIN_D6//comunica el pin D6 del lcd con el pin d6 del pic
#define LCD_DATA7 PIN_D7//comunica el pin D7 del lcd con el pin d7 del pic
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#use delay(clock=4000000)
#include <lcd.c> //incluye la configuracion del lcd en este documento
int8 valor;
void leerSensor(int sensor);
#int_RDA
void RDA_isr(void) //configuracion de la interrupcion
{
valor=getc(HOSTPC); //toma el valor del dial del motor de labview
leerSensor(0);
leerSensor(1);
leerSensor(2);
leerSensor(3);
}
unsigned int8 tension;
//------Programa principal----------
void main(){
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
setup_adc_ports(AN0_AN1_AN2_AN3_AN4);
setup_adc(ADC_CLOCK_INTERNAL);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_2 ( T2_DIV_BY_4, 249, 1);
setup_ccp1(CCP_PWM);
setup_comparator(NC_NC_NC_NC);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
setup_vref(FALSE);
lcd_init(); //inicializo e lcd
lcd_putc ("Electronic Tesis"); //escribo en el lcd
while (1){
switch(Valor){
case '0':
set_pwm1_duty(0);
break;
case '1':
set_pwm1_duty(35);
break;
case '2':
set_pwm1_duty(54);
break;
case '3':
set_pwm1_duty(81);
break;
case '4':
set_pwm1_duty(108);
break;
case '5':
set_pwm1_duty(135);
break;
case '6':
set_pwm1_duty(162);
break;
case '7':
set_pwm1_duty(189);
break;
case '8':
set_pwm1_duty(216);
break;
case '9':
set_pwm1_duty(249);
break;
}
}
//TODO: User Code
}
void leerSensor(int sensor) //
{
set_adc_channel(sensor); //
delay_us(20); //espero 20 microsegundos
tension=read_adc(); //
printf("%c", tension); //envia el valor de la tension
delay_ms(80); //espero 80 milisegundos
}
(http://s2.subirimagenes.com/fondosycapturas/5276697dibujo.jpg)
-
Hola Robotic,
No tengo a la mano el labview para probar tu código, pero yo por lo pronto dejaría las funciones leerSensor(n) fuera de la interrupción #int_RDA, yo he tenido problemas con esta interrupción cuando ejecuta un delay y en este caso tu tienes ocho.
ahora ¿cada cuanto tiempo envias el comando a través de labview a tu pic?
Saludos.