mình đang muốn thiết kệ 1 hệ thống gồm 3 pic 16f877a
- 2 slave đọc ADC ở chân A0, sau đó chuyển dữ liệu qua master
- master hiện kết quả adc lên LCD.
Ý tưởng của mình là trong dùng chân C7 của master chọn 1 slave trong 1 thời điểm. đọc giá trị của nó và lưu vào 1 biến. sau đó output ra lcd 2 biến của 2 slave. mình dụng bộ NOT để chọn. (xem hình)
hai chân SDO của 2 slave nối với chân SDI của master
hai chân SDI của 2 slave nối với chân SD0 của master
tuy nhiên mình bị dính lỗi ở 2 con slave nó không đọc được ADC, code bình thường thì chạy, nhưng cứ thêm lệnh:
để truyền qua master thì lại không đọc ADC thành công. nó chỉ đọc được giá trị 170 (ADC 8bit) không biết ở đâu ra.
hình:

mong nhận được giúp đỡ của mọi người, cảm ơn rất nhiều.
code mình viết như sau:
MASTER:
SLAVE 1:
=============================
SLAVE 2
===========================
- 2 slave đọc ADC ở chân A0, sau đó chuyển dữ liệu qua master
- master hiện kết quả adc lên LCD.
Ý tưởng của mình là trong dùng chân C7 của master chọn 1 slave trong 1 thời điểm. đọc giá trị của nó và lưu vào 1 biến. sau đó output ra lcd 2 biến của 2 slave. mình dụng bộ NOT để chọn. (xem hình)
hai chân SDO của 2 slave nối với chân SDI của master
hai chân SDI của 2 slave nối với chân SD0 của master
tuy nhiên mình bị dính lỗi ở 2 con slave nó không đọc được ADC, code bình thường thì chạy, nhưng cứ thêm lệnh:
Code:
spi_write()
hình:
mong nhận được giúp đỡ của mọi người, cảm ơn rất nhiều.
code mình viết như sau:
MASTER:
Code:
#include <16f877a.h>
#include <stdio.h>
#include <math.h>
#fuses HS,NOLVP,NOWDT,PUT
#use delay(clock=20Mhz)
#use rs232(baud=9600, xmit=PIN_A0)
void to_lcd(float x1, float x2)
{
putc(254), putc(01);delay_ms(10);
printf("slave 1: %f",x1 );
putc(254), putc(192);delay_ms(10);
printf("slave 2: %f",x2 );
}
void main()
{
int adc1, adc2;
float x1, x2;
setup_spi(spi_master);
while(1)
{
output_high(PIN_C7);
delay_ms(100);
adc1 = spi_read();
x1 = adc1/51;
delay_ms(100);
output_low(PIN_C7);
delay_ms(100);
adc2 = spi_read();
x2 = adc2/51;
delay_ms(100);
to_lcd(x1, x2);
}
}
=============================
Code:
#include "16f877a.h"
#device ADC=8
#use delay( clock=20Mhz)
//#use rs232 (baud = 9600, xmit = pin_c6)
int x;
void main( )
{
Setup_ADC (ADC_clock_internal) ;
Setup_ADC_ports (AN0);
Set_ADC_channel (0) ;
Delay_us (10 );
setup_spi(spi_slave);
While (1)
{
x = read_adc() ;
Output_B (x) ; // xuat ra port B gia tri bien adc
spi_write(x);
}
}
===========================
Code:
#include "16f877a.h"
#device ADC=8
#use delay( clock=20Mhz)
int y;
void main( )
{
Setup_ADC (ADC_clock_internal) ;
Setup_ADC_ports (AN0);
Set_ADC_channel (0) ;
Delay_us (10 );
setup_spi(spi_slave);
While (1)
{
y = read_adc() ;
Output_B (y) ;
spi_write(y);
}
}

Comment