Advertisement
Electgpl

PIC - Transmisión Payload ADC 883

Sep 5th, 2017
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.15 KB | None | 0 0
  1. //
  2. // Programa que realiza el envió de 3 canales ADC de 0 a 255, mediante puerto UART a 600bps
  3. // El objetivo es realizar un enlace simplex mediante módulos ASK OOK UHF
  4. //
  5. #include <16F883.h>                                             //Biblioteca del microcontrolador
  6. #fuses NOMCLR, NOWDT, INTRC_IO                                  //Configuración de fuses
  7. #device adc=8                                                   //Configuración del ADC a 8bit
  8. #use delay(int=4000000)                                         //Configuración del clock interno a 4MHz
  9. #use rs232(baud=600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)     //Configuración de UART 600bps 8 N 1
  10. //
  11. // Funcion que realiza el parse de datos y armado del payload para enviar por UART
  12. //
  13. #define HEADER 200                                              //Definición de valor Header para el payload
  14. static char payload[5];                                         //Variable donde se aloja el payload
  15. void enivaRF(void){                                             //Declaración de función para enviar datos
  16.    payload[0]=HEADER;                                           //Carga el Header en byte 0 del payload
  17.    set_adc_channel(0);                                          //Selecciona canal ADC 0 y comienza la medición
  18.    delay_us(10);                                                //Delay propuesto por datasheet para conversión ADC
  19.    payload[1]=read_adc();                                       //Carga el valor del ADC canal 0 en byte 1 del payload
  20.    set_adc_channel(1);                                          //Selecciona canal ADC 1 y comienza la medicion
  21.    delay_us(10);                                                //Delay propuesto por datasheet para conversión ADC
  22.    payload[2]=read_adc();                                       //Carga el valor del ADC canal 1 en byte 2 del payload
  23.    set_adc_channel(2);                                          //Selecciona canal ADC 2 y comienza la medición
  24.    delay_us(10);                                                //Delay propuesto por datasheet para conversión ADC
  25.    payload[3]=read_adc();                                       //Carga el valor del ADC canal 2 en byte 3 del payload
  26.    payload[4]=payload[1]+payload[2]+payload[3];                 //Realiza suma de los tres datos y lo carga en el byte 4 del payload
  27.    putc(payload[0]);                                            //Envía el byte 0 del payload por UART
  28.    delay_ms(50);                                                //Delay de espera entre bytes enviados por UART
  29.    putc(payload[1]);                                            //Envía el byte 1 del payload por UART
  30.    delay_ms(50);                                                //Delay de espera entre bytes enviados por UART
  31.    putc(payload[2]);                                            //Envía el byte 2 del payload por UART
  32.    delay_ms(50);                                                //Delay de espera entre bytes enviados por UART
  33.    putc(payload[3]);                                            //Envía el byte 3 del payload por UART
  34.    delay_ms(50);                                                //Delay de espera entre bytes enviados por UART
  35.    putc(payload[4]);                                            //Envía el byte 4 del payload por UART
  36.    delay_ms(50);                                                //Delay de espera entre bytes enviados por UART
  37.    printf("\r");                                                //Envía carácter de retorno de linea como final de payload
  38. }
  39. //
  40. //Programa principal, realiza el envió de los tres canales del ADC mediante UART por cada llamado a la función enviaRF()
  41. //
  42. void main(){                                                    //Función principal
  43.    setup_adc_ports(sAN0|sAN1|sAN2|VSS_VDD);                     //Configuración de canales ADC
  44.    setup_adc(ADC_CLOCK_DIV_2);                                  //Configuración de velocidad de conversión de ADC
  45.    while(true){                                                 //Loop principal repetitivo
  46.       enivaRF();                                                //Llamado a la función que envía datos
  47.       delay_ms(5000);                                           //Delay de 5s para cada envió de datos
  48.    }
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement