Autor Tema: Enviar Mensaje con USB-TTL a la PC desde PIC16F877A  (Leído 2931 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Zugzwang

  • PIC10
  • *
  • Mensajes: 2
Enviar Mensaje con USB-TTL a la PC desde PIC16F877A
« en: 01 de Agosto de 2018, 21:17:25 »
Hola, tengo problemas para enviar los datos adquiridos de un MPU6050 GY-521 por el puerto serial hacia la PC con un módulo USB-TTL FT232RL http://buyhere22.com/components/usb-ttl-ft232rl-pinout.png hacia la PC.

En la PC tengo Forms creado en C# que sí recibe datos. Esto lo confirmé porque usé el Virtual Serial Port y HTerm para simular el envío de datos.
La parte del código de adquisición de datos del MPU también sé que está funcionando correctamente porque en otro programa realizado pude visualizar los datos de este a través de una pantalla LCD.

El problema viene cuando quiero enviar datos a la PC utilizando rs232, por lo que sospecho que el problema está en que el módulo USB-TTL no está enviando los datos a la PC. La única conexión que he hecho es conectar el TX y RX del módulo USB-TTL al RX y TX del microcontrolador, respectivamente.
Cabe resaltar que en anteriores proyectos no he tenido problemas para enviar datos desde la PC al microcontrolador utilizando este mismo módulo y la misma conexión.

En otros foros parece ser que es un problema al utilizar conjuntamente #use i2c y #use rs232, pero no doy con la solución. Les agradecería su ayuda pls  :(

i2cmain.h:

Citar
Código: C
  1. #include <16F877A.h>
  2. #device ADC=10
  3.  
  4. #FUSES NOWDT                    //No Watch Dog Timer
  5. #FUSES NOBROWNOUT               //No brownout reset
  6. #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  7. #FUSES HS
  8.  
  9. #use delay(crystal=20000000)


Programa Principal:

Citar
Código: C
  1. #include <i2cmain.h>
  2. #use standard_io(C)
  3. #use standard_io(D)
  4. #use standard_io(B)
  5. #define Master_to_slave 0xD0 //!Para escribir datos al slave //! Con AD0 = 0;
  6. #define Slave_to_master 0xD1 //!Para leer datos del slave //! Con AD0 = 0;
  7. #use RS232(BAUD=9600,BITS=8,PARITY=N,XMIT=PIN_C6,RCV=PIN_C7, errors)
  8. #use i2C(master, scl=PIN_C3, sda=PIN_C4, fast, force_hw)
  9.  
  10. //!#define LCD_ENABLE_PIN  PIN_D0                                    
  11. //!#define LCD_RS_PIN      PIN_D1                                    
  12. //!#define LCD_RW_PIN      PIN_D2                                    
  13. //!#define LCD_DATA4       PIN_D4                                    
  14. //!#define LCD_DATA5       PIN_D5                                    
  15. //!#define LCD_DATA6       PIN_D6                                    
  16. //!#define LCD_DATA7       PIN_D7  
  17. //!#include <lcd.c>
  18.  
  19. #define MPU6050_PWR_MGMT_1 0x6B
  20.  
  21. signed int16 accel_xout;
  22. signed int16 accel_yout;
  23. signed int16 accel_zout;
  24.  
  25. #define ACCEL_XOUT_H 0x3B
  26. #define ACCEL_XOUT_L 0x3C
  27. #define ACCEL_YOUT_H 0x3D
  28. #define ACCEL_YOUT_L 0x3E
  29. #define ACCEL_ZOUT_H 0x3F
  30. #define ACCEL_ZOUT_L 0x40
  31.  
  32. int16 MPU6050_Leer_Registro(int8 registro){
  33. int8 msb, lsb;
  34. int16 valor;
  35.  
  36. i2c_start();
  37. i2c_write(Master_to_slave);
  38. i2c_write(registro);
  39. i2c_start();
  40. i2c_write(Slave_to_master);
  41. msb = i2c_read(0);
  42. i2c_stop();
  43.  
  44. i2c_start();    
  45. i2c_write(Master_to_slave);
  46. i2c_write(registro + 0x01);
  47. i2c_start();
  48. i2c_write(Slave_to_master);
  49. lsb = i2c_read(0);
  50. i2c_stop();
  51.      
  52. valor = make16(msb,lsb);
  53.  
  54. return (valor);
  55. }
  56.  
  57. void Get_Accel_Values(void){
  58.  
  59. accel_xout = MPU6050_Leer_Registro(ACCEL_XOUT_H);
  60. //!accel_yout = MPU6050_Leer_Registro(ACCEL_YOUT_H);
  61. //!accel_zout = MPU6050_Leer_Registro(ACCEL_ZOUT_H);
  62. output_low(Pin_B7);
  63. delay_ms(210);
  64. }
  65.  
  66. void MPU6050_Setup(){
  67.  
  68. delay_ms(100);
  69.  
  70. i2c_start();
  71. i2c_write(Master_to_slave);
  72. i2c_write(MPU6050_PWR_MGMT_1);
  73. i2c_write(0x00);
  74. i2c_stop();
  75.  
  76. delay_ms(100);
  77.  
  78.  
  79. }
  80.  
  81.  
  82. void main()
  83. {
  84. //!   lcd_init();
  85. //!   lcd_gotoxy(1,1);
  86.    MPU6050_Setup();
  87.    char string[30];
  88.    
  89.  
  90.    while(TRUE)
  91.    {
  92. //!      lcd_putc("\f");
  93.      
  94.       Get_Accel_Values();
  95.       //sprintf(string,"%ld",accel_xout); //!ld = long signed
  96.       printf("Hola Mundo!");
  97.       output_high(Pin_B7);
  98.       delay_ms(210);
  99.      
  100.      
  101.    }
  102.  
  103. }