Hola a todos, tengo dos microcontroladores que se comunican por spi, un 16f887 que funciona como esclavo y un 18f458 que funciona como master, cada uno se conecta a una lcd para mostar lo que envia y lo que recibe. Hice pruebas para comprobar que los datos se envian y se reciben correctamente. Luego conecto al RA0 del master una señal entre 1 y 5 voltios para que sea leida por el adc del 18f458, este muestra el valor de la señal analogica en la lcd y luego la transmite por spi al 16f887 el cual solo muestra 127 o 129.
Esto solo ocurre al conectar la señal al RA0 del master. Por que sucede esto? Como puede solucionarse?
Estoy trabajando con un circuito en proteus.
Ojala puedan ayudarme.
Esto solo ocurre al conectar la señal al RA0 del master. Por que sucede esto? Como puede solucionarse?
Estoy trabajando con un circuito en proteus.
Ojala puedan ayudarme.
Código:
codigo master:
#include <18f458.h>
#device adc=10
#fuses hs, nowdt
#use delay(clock=20M)
#use standard_io(b)
#include <lcd.c>
#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
void main()
{
int16 lectura;
float voltaje;
lcd_init();
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_DIV_8);
setup_spi(spi_master | spi_l_to_h | spi_clk_div_16);
do
{
set_adc_channel(0);
lectura = read_adc();
voltaje = 5.0*lectura/1024;
printf(lcd_putc, "\f%01.2fV", voltaje);
spi_write(voltaje);
delay_ms(1000);
}
while(true);
}
########################
codigo esclavo
#include <16f887.h>
#fuses INTRC,nowdt
#use delay(clock=8M)
#use fast_io(B)
#include <lcd.c>
#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
void main()
{
float data;
lcd_init();
printf(lcd_putc, "hola");
output_high(pin_b1);
delay_ms(1000);
setup_spi(spi_slave | spi_l_to_h | spi_clk_div_16);
do
{
if(spi_data_is_in())
{
data = spi_read();
printf(lcd_putc, "\f%f", data);
delay_ms(1000);
}
}
while(true);
}
Adjuntos
Última edición por un moderador: