Загрузил(а) файлы в ''
This commit is contained in:
parent
9a4dae947e
commit
15151edee8
75
MASTER.ino
Normal file
75
MASTER.ino
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
#include <avr/interrupt.h>
|
||||||
|
#include <avr/io.h>
|
||||||
|
|
||||||
|
#define SPI_PORTX PORTB
|
||||||
|
#define SPI_DDRX DDRB
|
||||||
|
|
||||||
|
#define SPI_MISO 4
|
||||||
|
#define SPI_MOSI 3
|
||||||
|
#define SPI_SCK 5
|
||||||
|
#define SPI_SS 2
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void SPI_MasterInit(void)
|
||||||
|
{
|
||||||
|
/* Настройка MOSI и SCK как выход,
|
||||||
|
все остальные сигналы как вход: */
|
||||||
|
SPI_DDRX = (1 << SPI_MOSI)|(1 << SPI_SCK)|(1<<SPI_SS)|(0<<SPI_MISO);
|
||||||
|
/* Разрешить работу SPI, режим Master,
|
||||||
|
установить скорость тактов fck/16: */
|
||||||
|
SPCR = (1 << SPE)|(1 << MSTR)|(0<<CPOL)|(0<<CPHA)|(1 << SPR0);
|
||||||
|
SPI_PORTX |= (1 << SPI_SS);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SPI_MasterTransmit(char* buffer, size_t length)
|
||||||
|
{
|
||||||
|
SPI_PORTX &= ~(1 << SPI_SS);
|
||||||
|
|
||||||
|
for(int i=0; i<length; i++ ){
|
||||||
|
SPDR = buffer[i];
|
||||||
|
while(!(SPSR & (1 << SPIF)));
|
||||||
|
Serial.println("Transmitede");
|
||||||
|
delay(2000);
|
||||||
|
}
|
||||||
|
SPI_PORTX |= (1 << SPI_SS);
|
||||||
|
}
|
||||||
|
|
||||||
|
byte crc8(byte *data, int length) {
|
||||||
|
byte crc = 0x00;
|
||||||
|
byte poly = 0x07; //полином для CRC
|
||||||
|
for (int i=0; i<length-2; i++){
|
||||||
|
crc ^= data[i]; //XOR текущего байта с CRC
|
||||||
|
for (int j=0; j<length; j++) {
|
||||||
|
if (crc & 0x80){ //если старший бит CRC равен 1
|
||||||
|
crc = (crc << 1) ^ poly; //сдвигаем CRC на 1 бит влево и XOR с полиномом
|
||||||
|
}else{
|
||||||
|
crc <<= 1; //иначе просто сдвигаем на 1 бит влево
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return crc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
SPI_MasterInit();
|
||||||
|
Serial.begin(9600);
|
||||||
|
Serial.println("Arduino 1 starded");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
char buffer[] = {'a', 't', 'g', '1', 0};
|
||||||
|
for(int y=5; y<21; y++) {
|
||||||
|
buffer[0]=0x06;
|
||||||
|
buffer[1]=3;
|
||||||
|
buffer[2]=y;
|
||||||
|
buffer[3]=0x01;
|
||||||
|
buffer[4]=crc8(&buffer[0], 4);
|
||||||
|
SPI_MasterTransmit(&buffer[0], 5);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
85
sketch_apr13a2.ino
Normal file
85
sketch_apr13a2.ino
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
#include <avr/interrupt.h>
|
||||||
|
#include <avr/io.h>
|
||||||
|
|
||||||
|
#define SPI_PORTX PORTB
|
||||||
|
#define SPI_DDRX DDRB
|
||||||
|
|
||||||
|
#define SPI_MISO 4
|
||||||
|
#define SPI_MOSI 3
|
||||||
|
#define SPI_SCK 5
|
||||||
|
#define SPI_SS 2
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void SPI_MasterInit(void)
|
||||||
|
{
|
||||||
|
/* Настройка MOSI и SCK как выход,
|
||||||
|
все остальные сигналы как вход: */
|
||||||
|
SPI_DDRX = (1 << SPI_MOSI)|(1 << SPI_SCK)|(1<<SPI_SS)|(0<<SPI_MISO);
|
||||||
|
/* Разрешить работу SPI, режим Master,
|
||||||
|
установить скорость тактов fck/16: */
|
||||||
|
SPCR = (1 << SPE)|(1 << MSTR)|(0<<CPOL)|(0<<CPHA)|(1 << SPR0);
|
||||||
|
SPI_PORTX |= (1 << SPI_SS);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SPI_MasterTransmit(char* buffer, size_t length)
|
||||||
|
{
|
||||||
|
SPI_PORTX &= ~(1 << SPI_SS);
|
||||||
|
|
||||||
|
for(int i=0; i<length; i++ ){
|
||||||
|
SPDR = buffer[i];
|
||||||
|
while(!(SPSR & (1 << SPIF)));
|
||||||
|
Serial.println("Transmitede");
|
||||||
|
delay(2000);
|
||||||
|
}
|
||||||
|
SPI_PORTX |= (1 << SPI_SS);
|
||||||
|
}
|
||||||
|
|
||||||
|
byte crc8(byte* data, int length) {
|
||||||
|
byte crc = 0x00;
|
||||||
|
byte poly = 0x07;
|
||||||
|
for (int i=0; i<length-2; i++){
|
||||||
|
crc ^= data[i];
|
||||||
|
for (int j=0; j<length; j++) {
|
||||||
|
if (crc & 0x80){
|
||||||
|
crc = (crc << 1) ^ poly;
|
||||||
|
}else{
|
||||||
|
crc <<= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return crc;
|
||||||
|
}
|
||||||
|
/*void SPI_MasterTransmit(char cData)
|
||||||
|
{
|
||||||
|
Serial.println("SPI_MasterTransmitSPI_MasterTransmitSPI_MasterTransmit");
|
||||||
|
SPI_PORTX &= ~(1 << SPI_SS);
|
||||||
|
Запуск передачи данных:
|
||||||
|
SPDR = cData;
|
||||||
|
Ожидание завершения передачи:
|
||||||
|
while(!(SPSR & (1 << SPIF)));
|
||||||
|
Serial.println("Transmitede");
|
||||||
|
SPI_PORTX |= (1 << SPI_SS);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
SPI_MasterInit();
|
||||||
|
Serial.begin(9600);
|
||||||
|
Serial.println("Arduino 1 starded");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
char buffer[] = {'a', 't', 'g', '1', 0};
|
||||||
|
for(int y=5; y<21; y++) {
|
||||||
|
buffer[0]=0x06;
|
||||||
|
buffer[1]=3;
|
||||||
|
buffer[2]=y;
|
||||||
|
buffer[3]=0x01;
|
||||||
|
buffer[4]=crc8;
|
||||||
|
SPI_MasterTransmit(&buffer[0], 5);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user