|
|
View previous topic :: View next topic |
Author |
Message |
Zugzwang
Joined: 02 Aug 2018 Posts: 2
|
Can't send data to PC from PIC using USB-TTL |
Posted: Thu Aug 02, 2018 8:59 am |
|
|
I'm using a USB-TTL FT232RL http://buyhere22.com/components/usb-ttl-ft232rl-pinout.png connected to a PIC16F877A. I'm only using the TX & RX ports of the USB-TTL connected to the RX & TX of the uC respectively. The USB-TTL powers up when connected to the PC.
I want to see the data of the MPU6050 GY-521 on my PC, however, I can visualize it on the LCD screen without any problems.
By the way, I'm using HTerm to receive the data coming from the USB-TTL, so it seems, IMO, that the uC is not sending any instructions to the USB-TTL to be ready to send data.
Pls help
i2cmain.h:
Code: | #include <16F877A.h>
#device ADC=10
#FUSES NOWDT //No Watch Dog Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES HS
#use delay(crystal=20000000) |
Main:
Code: | #include <i2cmain.h>
#use standard_io(C)
#use standard_io(D)
#use standard_io(B)
#define Master_to_slave 0xD0 //!Para escribir datos al slave //! Con AD0 = 0;
#define Slave_to_master 0xD1 //!Para leer datos del slave //! Con AD0 = 0;
#use RS232(BAUD=9600,BITS=8,PARITY=N,XMIT=PIN_C6,RCV=PIN_C7, errors, stream=RS232)
#use i2C(master, scl=PIN_C3, sda=PIN_C4, fast, force_hw)
#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#include <lcd.c>
#define MPU6050_PWR_MGMT_1 0x6B
signed int16 accel_xout;
signed int16 accel_yout;
signed int16 accel_zout;
#define ACCEL_XOUT_H 0x3B
#define ACCEL_XOUT_L 0x3C
#define ACCEL_YOUT_H 0x3D
#define ACCEL_YOUT_L 0x3E
#define ACCEL_ZOUT_H 0x3F
#define ACCEL_ZOUT_L 0x40
int16 MPU6050_Leer_Registro(int8 registro){
int8 msb, lsb;
int16 valor;
i2c_start();
i2c_write(Master_to_slave);
i2c_write(registro);
i2c_start();
i2c_write(Slave_to_master);
msb = i2c_read(0);
i2c_stop();
i2c_start();
i2c_write(Master_to_slave);
i2c_write(registro + 0x01);
i2c_start();
i2c_write(Slave_to_master);
lsb = i2c_read(0);
i2c_stop();
valor = make16(msb,lsb);
return (valor);
}
void Get_Accel_Values(void){
accel_xout = MPU6050_Leer_Registro(ACCEL_XOUT_H);
//!accel_yout = MPU6050_Leer_Registro(ACCEL_YOUT_H);
//!accel_zout = MPU6050_Leer_Registro(ACCEL_ZOUT_H);
output_low(Pin_B7);
delay_ms(150);
}
void MPU6050_Setup(){
delay_ms(100);
i2c_start();
i2c_write(Master_to_slave);
i2c_write(MPU6050_PWR_MGMT_1);
i2c_write(0x00);
i2c_stop();
delay_ms(100);
}
void main()
{
lcd_init();
lcd_gotoxy(1,1);
MPU6050_Setup();
//! char string[30];
while(TRUE)
{
lcd_putc("\f");
Get_Accel_Values();
printf(lcd_putc,"%ld",accel_xout);
fprintf(RS232,"%ld",accel_xout);
//! sprintf(string,"%ld",accel_xout); //!ld = long signed
//! printf("Hola Mundo!");
output_high(Pin_B7);
delay_ms(150);
}
} |
Last edited by Zugzwang on Thu Aug 02, 2018 9:19 am; edited 1 time in total |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19561
|
|
Posted: Thu Aug 02, 2018 9:06 am |
|
|
One thing leaps out.
Jumper for 5v/3.3v.
First thing have you got this set to 5v (needed).
Second is what chip is used. Read it's part number and get it's data sheet.
Check what it's output voltage actually is?.
PIC serial needs a signal that goes up to 4v. Many '3.3v' boards even if they have an option to jumper their regulator for 5v, do not give sufficient output to be seen by the PIC.... |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9253 Location: Greensville,Ontario
|
|
Posted: Thu Aug 02, 2018 10:26 am |
|
|
Simple test. install a jumper from the module TX to RX pins (no PIC connections). Now, every keypress on the PC KBD should be seen on the PC monitor.
IF this works, you've confirmed PC end is OK.
Do you have PIC TX connected to module RX, PIC RX to module TX ?
Jay |
|
|
Zugzwang
Joined: 02 Aug 2018 Posts: 2
|
Re: Can't send data to PC from PIC using USB-TTL |
Posted: Thu Aug 02, 2018 12:05 pm |
|
|
Ok guys, I have found the solution and it's very simple. I though the only neccesary connections were the TX & RX of the USB-TTL because of previous projects I've made sending data FROM the PC to the uC without any problems.
But while reading the datasheet of this module it says I also have to connect the GND pin on my protoboard. That's all.
However I still wonder why since the power source for the USB-TTL is my PC USB Port and for my uC (which is on my protobard) is an independet 5v-DC source. |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19561
|
|
Posted: Thu Aug 02, 2018 12:27 pm |
|
|
Aaargh!......
You always need a ground connection. You've just been lucky in the past that parts you have been using happen to have their grounds connected to the same place.
Your usb module is using usb power to run it. It is powered from the PC. Your PIC is running off a wall-wart I guess, which is an isolated supply.
Something like 80% of circuitry now does not use the mains ground. It floats. That includes things like laptop PC's.... |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|