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