Autor Tema: Contro de nivel y Temperatura de un calderin por medio de RF  (Leído 24379 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #15 en: 05 de Mayo de 2009, 12:29:41 »
resulta q pensando en mi proyecto me surguió una de tantas dudas posibles, si estoy mandando datos de temperatura y nivel hacia labview a traves de modulo de RF, como haría para diferenciar cuales datos son de temperatura y cuales son los datos de nivel, por que en el micro puedo cada cierto tiempo alternar el sensado de las dos variables y enviarlas por el modulo RF, pero cuando lleguen a labview como hago para diferenciar una de otra
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #16 en: 05 de Mayo de 2009, 13:23:00 »
Lo que puedes hacer es enviar un dato antes del valor censado. Por ejemplo, utilizas una variable llamado dato_censado. Si el bit 0 es 0, el dato a enviar es de temperatura, si es 1, el dato a enviar es el nivel. Entonces cuando lees en el receptor, primero chequeas este bit para saber que dato es el que se recibe (temperatura o nivel)
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #17 en: 05 de Mayo de 2009, 13:33:45 »
estaba pensando q tambien podria implementar el noveno bits de datos? el TX9? y comprobar el estado de ese bit, asi solo enviaria una trama con "dato + ID de la variable"
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #18 en: 05 de Mayo de 2009, 14:39:36 »
Hola.

Lo mejor es discriminar la trama enviada. Podes colocar entre dos T el valor de la temperatura: TxT y entre dos N el valor del nivel: NxN, como sabes que tu envio es de 1byte -si la conversion es de 8bits- en LabView lo que haces es tomar el valor entre T y T y discriminarlo del de nivel. De haber algun fallo en la transmision, podes validar el dato, seteando el contador de recepcion a 0 y esperar el string de T o de N.

Saludos

Edito: Este metodo te permite adicionar muchas mas variables de medida.
El papel lo aguanta todo

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #19 en: 05 de Mayo de 2009, 19:00:54 »
aaaa ya, bien MLO_,

ahora pasando la idea de MLO_ al assembler, hice esto
Código: [Seleccionar]
MOVLW 'T'                      ;CARGO EL CARACTER N
CALL TX_DATO               ;ENVIO N
MOVF TEMPERATURA,W   ;CARGO W CON LA VARIABLE TEMPERATURA
CALL TX_DATO               ;ENVIO LA VARIABLE TEMPERATURA
MOVLW 'T'                      ;CARGO W CON T
CALL TX_DATO               ;ENVIO T, ES DECIR ENTRE T y T  VA EL DATO
CALL DEMORA

MOVLW 'N'                     ;CARGO EL CARACTER N
CALL TX_DATO               ;ENVIO N
MOVF NIVEL,W                ;CARGO W CON LA VARIABLE NIVEL
CALL TX_DATO                ;ENVIO LA VARIABLE NIVEL
MOVLW 'N'                       ;CARGO W CON N
CALL TX_DATO                 ;ENVIO N, ES DECIR ENTRE N y N  VA EL DATO

a modo de prueba cargué nivel con 0x1 y temperatura con 0x50 y el hiperterminal me muestra entre las N una carita que supongo corresponde al 0x01 y entre la T me muestra una P que corresponderia al 0x50, en labview pasa lo mismo con lo que envio entre las T y entre las N muestra un cuadrado que será porque no reconoce ese caracter, pero en ultimas supongo que con esa prueba podria asumir que estoy enviando bien el dato?

adjunto la captura de la prueba en hiperterminal


por otro lado, empecé a hacer esta rutina para alternar las conversiones A/D del canal0 y el canal1, entonces pongo el codigo y luego la duda
Código: [Seleccionar]
                                                LIST P=16F877A
#INCLUDE "P16F877A.INC"

CBLOCK 0X20
PDel0
PDel1
PDel2
_INT_SAVE_W
_INT_SAVE_STATUS
_INT_SAVE_FSR
_INT_SAVE_PCLATH

ENDC

ORG 0
GOTO INICIO






ORG 4
GOTO INTER




;@@@@@@@@@@@@@@@@@ SELECCION DE CANALES ANALOGOS @@@@@@@@@@@@@@@@@@@@@@@
CANAL0                  BCF STATUS,RP0
MOVLW B'01000001' ; Fosc/8, CANAL0 ACTIVO, CONVERSION OFF, CONVERSOR ON
MOVWF ADCON0
RETURN ; PARA EMPEZAR CONVERSION SETEAR ADCON0,2 = GO_DONE

CANAL1                  BCF STATUS,RP0
MOVLW B'01001001' ;Fosc/8, CANAL1 ACTIVO, CONVERSION OFF, CONVERSOR ON
MOVWF ADCON0
RETURN

CONVERSION                             BSF ADCON0,GO_DONE
ESPERE                  CALL DEMORA
BTFSC ADCON0,GO_DONE
GOTO ESPERE
MOVF ADRESH,W
MOVWF PORTB
RETURN
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@


;@@@@@@@@@@@@ RUTINA CONTROL DEL TX @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

TX_DATO                 BCF PIR1,TXIF ;RESTAURA FLAG DEL TRANSMISOR
MOVWF TXREG ;ALMACENA EL DATO A ENVIAR Y ENVIA
BSF STATUS,RP0 ; BANCO1

TX_DATO_WAIT
BTFSS TXSTA,TRMT ; BYTE TRANSMITIDO?
GOTO TX_DATO_WAIT ;NO
BCF STATUS,RP0 ;SI, BANCO0
RETURN
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@


;@@@@@@@@@@@@@@@@@@@@@@@@ MANEJO DE INTERRUPCION @@@@@@@@@@@@@@@@@@@@@@@@@@
INTER

PUSH                 MOVWF _INT_SAVE_W ;GUARDAR W
SWAPF STATUS,W ;GUARDAR STATUS
MOVWF _INT_SAVE_STATUS
SWAPF FSR,W ;GUARDAR FSR
MOVWF _INT_SAVE_FSR
SWAPF PCLATH,W ;GUARDAR PCLATH (PAGINA DE PROGRAMA)
MOVWF _INT_SAVE_PCLATH
SWAPF OPTION_REG,W ;GUARDAR OPTION_REG (BANCOS)
MOVWF _INT_SAVE_OPTION_REG

;>>>>>>>AQUI RUTINAS DE INTERRUPCION POR RECEPCION DE LA USART<<<<<<<<<<<<<<<<

POP                 SWAPF _INT_SAVE_PCLATH,W ;RESTAURAR VALOR DE PCLATH
MOVWF PCLATH
SWAPF _INT_SAVE_FSR,W ;RESTAURAR VALOR DE FSR
MOVWF FSR
SWAPF _INT_SAVE_STATUS,W ;RESTAURAR VALOR DE STATUS
MOVWF STATUS
SWAPF _INT_SAVE_W,W
RETFIE
;@@@@@@@@@@@@@@@@@@@@@@@@@@ FIN DE INTERRUPCION @@@@@@@@@@@@@@@@@@@@@@@@@@@@@

INICIO                 BSF STATUS,RP0
BCF STATUS,RP1 ;BANCO1

MOVLW 0XFF
MOVWF TRISA ;PORTA COMO ENTRADA
MOVLW B'00000001'
MOVWF ADCON1 ;TODAS ENTRADAS ANALOGAS, +VREF=RA3 -VREF=GND
;8 bits mas significativo=ADRESH                                     
;Los 2 BIT memos significativos se quedan en ADRESL.

CLRF TRISB
CLRF TRISE

BCF STATUS,RP0 ; BANCO0
BSF ADCON0,ADCS0
BCF ADCON0,ADCS1 ;RELOJ PARA EL CONVERSOR AD = Fosc/8
BSF ADCON0,ADON


;@@@@@@@@@@@@@@@ CONFIG USART @@@@@@@@@@@@@@
BSF STATUS,RP0 ;BANCO1
MOVLW B'10111111' ;RC6 SALIDA(TX), RC7 ENTRADA(RX)
MOVWF TRISC
MOVLW B'00100100'
MOVWF TXSTA ;TX en On, modo asíncrono con 8 bits y alta velocidad
MOVLW .25
MOVWF SPBRG ;9600 baudios con Fosc=4MHz
BSF PIE1,RCIE ;Habilita interrupción en la recepción
BCF STATUS,RP0 ; BANCO0

MOVLW B'10010000'
MOVWF RCSTA ;USART en On, recepción contínua
BSF INTCON,PEIE ;Activa interrupción de periféricos
BSF INTCON,GIE ;Activa interrupciones
CLRF RCREG
CLRF PORTB

;@@@@@@@@@@@@@@ FIN CONFIG USART @@@@@@@@@@@@@


;########## PROGRAMA PRINCIPAL ####################
ALT          CALL CANAL0
CALL CONVERSION
CALL CANAL1
CALL CONVERSION
GOTO ALT


;########################## RUTINA 1 SEGUNDO ###############################
DEMORA  movlw     .14       ; 1 set numero de repeticion  (C)
        movwf     PDel0     ; 1 |
PLoop0  movlw     .72       ; 1 set numero de repeticion  (B)
        movwf     PDel1     ; 1 |
PLoop1  movlw     .247      ; 1 set numero de repeticion  (A)
        movwf     PDel2     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        decfsz    PDel2, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel1,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (C)
        goto      PLoop0    ; 2 no, loop
PDelL1  goto PDelL2         ; 2 ciclos delay
PDelL2  clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.

      end         ;Fin del programa fuente

simulando el proteus me tira " ADC conversion started before 'wait' time has expired following previous conversion or channnel change", igual funciona bien pero me sale este error multiples veces, entonces no si es por el tiempo de espera ( 1 SEGUNDO!!!!! ) q doy al preguntar si ya se termino la conversion o es por la configuracion de los bits ADCS1, ADCS0 que son los que determinan la Fosc del conversor. cualquier sugerencia es bienvenida
« Última modificación: 06 de Mayo de 2009, 19:11:21 por jhozate »
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #20 en: 06 de Mayo de 2009, 19:06:33 »
buenos, respondiendome, con respecto al AD el problema no resulta ser ni la configuracion de los bits ADCS0 ADCS1 porque ya use todas las combinaciones y sigue proteus sigue dando el mismo mensaje, tampoco es el tiempo en q espero para preguntar si ya se termino la conversion AD porque incluso le puse dos segundo y dos segundos ya es una eternidad en el PIC
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #21 en: 07 de Mayo de 2009, 13:53:26 »
tenia configurado todo como entradas analogas, pero segun lei era mejor poner como entradas analogas solo las q necesite, tambien pude encontrar que para alternar los canales al realizar la conversion A/D debia esperar almenos 10 microsegundos, pero tampoco eso solucionó el mensaje q muestra proteus, ni siquiera poniendole un segundo
« Última modificación: 07 de Mayo de 2009, 13:55:48 por jhozate »
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #22 en: 12 de Junio de 2009, 12:45:24 »
a que elemento puedo recurrir  para mantener caliente el agua, en un tanque?
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #23 en: 12 de Junio de 2009, 14:20:00 »
Podrías ponerle una resistencia de la duchas eléctricas.


Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #24 en: 12 de Junio de 2009, 14:26:08 »
pero como se llaman ...o como se consiguen comercialmente? lo que pasa es que la idea es que me sea posible configurarla o hacerle un arreglo para comunicarla con el pic y tratar de mantener muy constante la temperatura del agua en el tanque
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #25 en: 12 de Junio de 2009, 14:28:56 »
¿Resistencia para calefón eléctrico?


Para controlarlo, lo podes hacer con un relay y a medida que vas censado la temperatura, sabes si tenés que seguir dándole mas temperatura o no.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #26 en: 12 de Junio de 2009, 14:43:53 »
seria mas rapido switchear con relé o con transistor??
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #27 en: 12 de Junio de 2009, 15:57:33 »
Mejor con control de fase no? y con un PID quedaria bien.
El papel lo aguanta todo

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #28 en: 12 de Junio de 2009, 16:21:27 »
si la idea es q el PID se realiza en el PC y enviar desde el PC las acciones de control hacia el PIC para  tratar mantener el agua a temperatura constante... como seria lo de control de fase?...tengo un compañero que lo q esta haciendo es controlar intensidad luminica y lo que hace el algo así como recortar o dejar pasar la solo fragmentos de la onda seno..esto lo hace con un triac creo...sera que puedo pensar en el mismo sistema?
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Contro de nivel y Temperatura de un calderin por medio de RF
« Respuesta #29 en: 14 de Junio de 2009, 14:11:14 »
como estoy en un proceso migratorio de ASM a CCS, pss he decidido empezar el sensor de temperatura en lenguaje c, me dio por empezar a ensayar con el conversor AD y mostrar el resultado por el puerto B y tambien enviar la lectura del ADC al lcd, para simular la entrada analoga puse el LM35, y me encuentro con la sorpresa de que el valor representado en el lcd corresponde a la temperatura, salvo que apartir de los 30° se empieza a descuadrar
pongo el codigo y disculpen cualquier torpeza pero es q apenas en el C
Código: CSS
  1. #include "C:\PICC\Projects\proyecto_temp_niv.h"
  2. #include <lcd.c>
  3.  
  4. char i;
  5. char a;
  6. char b;
  7. int q;
  8. float p;
  9. void main()
  10. {
  11.    SETUP_ADC_PORTS(RA0_RA1_ANALOG_RA3_RA2_REF);
  12.    SETUP_ADC(ADC_CLOCK_DIV_32);
  13.    setup_psp(PSP_DISABLED);
  14.    setup_spi(SPI_SS_DISABLED);
  15.    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  16.    setup_timer_1(T1_DISABLED);
  17.    setup_timer_2(T2_DISABLED,0,1);
  18.    setup_comparator(NC_NC_NC_NC);
  19.    
  20.    #define use_portd_lcd true
  21.    SET_TRIS_C(0X00);
  22.    lcd_init();
  23.    OUTPUT_C(0X00);
  24.  
  25.    // TODO: USER CODE!!
  26.    for(;;)
  27.    {
  28.    SET_ADC_CHANNEL(0);
  29.    DELAY_MS(20);
  30.    Q=READ_ADC();
  31.    OUTPUT_B(Q);
  32.     lcd_gotoxy(1,1);
  33.      printf( lcd_putc "ADC= %4U", Q );
  34.    
  35.    }
  36. }


fuses
Código: CSS
  1. #include <16F877A.h>
  2. #device adc=8
  3.  
  4. #FUSES NOWDT                    //No Watch Dog Timer
  5. #FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
  6. #FUSES NOPUT                    //No Power Up Timer
  7. #FUSES NOPROTECT                //Code not protected from reading
  8. #FUSES NODEBUG                  //No Debug mode for ICD
  9. #FUSES NOBROWNOUT               //No brownout reset
  10. #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  11. #FUSES NOCPD                    //No EE protection
  12. #FUSES NOWRT                    //Program memory not write protected
  13.  
  14. #use delay(clock=20000000)
  15. #use rs232(baud=1200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

una de las cosas q aun no asimilo bien es la representacion de datos en el lcd, cuando debo poner eso de %d y todas esos detalles, tienen q ver algo con el tipo de variable a representar?
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA