From 3141c7a8589de99a288fb435bba632f7c50d8197 Mon Sep 17 00:00:00 2001 From: Lukas Loidold Date: Wed, 22 Apr 2020 10:35:58 +0200 Subject: [PATCH 1/3] IO specialized for SPI --- main.cpp | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/main.cpp b/main.cpp index 4a2ce87..22f6c56 100644 --- a/main.cpp +++ b/main.cpp @@ -11,8 +11,8 @@ #include "arduino_core/ArduinoCore-avr/libraries/SPI/src/SPI.h" //Define which port to use for the SPI Chip Select -#define CS_PORT PORTC -#define CS_DDR DDRC +#define CS_PORT PORTB +#define CS_DDR DDRB #define RING_BUFFER_SIZE 100 #define MAX_PACKET_LENGTH 100 @@ -47,11 +47,21 @@ void sendData(uint8_t *data, size_t len) { } void transferSPI(uint8_t address, uint8_t *data, size_t datalen) { - SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE3)); - CS_PORT = ~address; - SPI.transfer(data, datalen); + SPI.beginTransaction(SPISettings(100000, MSBFIRST, SPI_MODE3)); + //CS_PORT = ~address; + digitalWrite(10, LOW); + //included + for (size_t i = 0; i < datalen; i++) + { + Serial.print("SentData is: ");Serial.println(data[i]); + data[i] = SPI.transfer(data[i]); + Serial.print("Back from n-1 ");Serial.println(data[i]); + + } + //SPI.transfer(data, datalen); delay(100); - CS_PORT = 0xff; + digitalWrite(10, HIGH); + //CS_PORT = 0xff; SPI.endTransaction(); } @@ -159,10 +169,17 @@ void serialEvent() { } void setup() { - CS_DDR = 0xff; - CS_PORT = 0xff; + //CS_DDR = 0xff; + //CS_PORT = 0xff; + + //CS_DDR |= (1<<); + //CS_PORT |= (1< Date: Wed, 22 Apr 2020 10:59:25 +0200 Subject: [PATCH 2/3] with data check befor write to serial --- main.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/main.cpp b/main.cpp index 22f6c56..1f152a1 100644 --- a/main.cpp +++ b/main.cpp @@ -43,6 +43,12 @@ void sendData(uint8_t *data, size_t len) { if (result != HasReturnvaluesIF::RETURN_OK) { return; } + for (size_t i = 0; i < writtenLen; i++) + { + Serial.print("buffer is: ");Serial.println(buffer[i]); + + + } Serial.write(buffer, writtenLen); } From 8536d048684ba344a5b0413ec5bfc0b1d5a20c0c Mon Sep 17 00:00:00 2001 From: Lukas Loidold Date: Thu, 23 Apr 2020 14:39:34 +0200 Subject: [PATCH 3/3] Timing Problem dummy solution --- main.cpp | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/main.cpp b/main.cpp index 1f152a1..c7f081a 100644 --- a/main.cpp +++ b/main.cpp @@ -43,12 +43,7 @@ void sendData(uint8_t *data, size_t len) { if (result != HasReturnvaluesIF::RETURN_OK) { return; } - for (size_t i = 0; i < writtenLen; i++) - { - Serial.print("buffer is: ");Serial.println(buffer[i]); - - } Serial.write(buffer, writtenLen); } @@ -59,9 +54,9 @@ void transferSPI(uint8_t address, uint8_t *data, size_t datalen) { //included for (size_t i = 0; i < datalen; i++) { - Serial.print("SentData is: ");Serial.println(data[i]); + //Serial.print("SentData is: ");Serial.println(data[i]); data[i] = SPI.transfer(data[i]); - Serial.print("Back from n-1 ");Serial.println(data[i]); + //Serial.print("Back from n-1 ");Serial.println(data[i]); } //SPI.transfer(data, datalen); @@ -83,14 +78,14 @@ void handlePacket(uint8_t *packet, size_t packetLen) { if (crc != 0) { - Serial.println("invalid Checksum"); + //Serial.println("invalid Checksum"); return; } uint16_t payloadLen = (packet[2] << 8) | packet[3]; if (payloadLen != packetLen - 6) { - Serial.println("invalid len"); + //Serial.println("invalid len"); return; } @@ -105,14 +100,11 @@ void handlePacket(uint8_t *packet, size_t packetLen) { //echo the data back, no need to change the header fields, they are the same //checksum will be written by sendData() //check reply: - Serial.println("Data response check: "); - for(size_t i =0; i< packetLen; i++){ - Serial.print("packet nr ");Serial.print(i);Serial.print(" ");Serial.println(packet[i]); - } + sendData(packet, packetLen); break; default: - Serial.println("invalid command"); + //Serial.println("invalid command"); break; } @@ -129,13 +121,13 @@ void handleNewData() { size_t firstSTXinRawData = 0; while ((firstSTXinRawData < rawDataSize) && (rawData[firstSTXinRawData] != DleEncoder::STX)) { - Serial.println(rawData[firstSTXinRawData]); + //Serial.println(rawData[firstSTXinRawData]); firstSTXinRawData++; } if (rawData[firstSTXinRawData] != DleEncoder::STX) { //there is no STX in our data, throw it away... - Serial.println("NO STX"); + //Serial.println("NO STX"); ringBuffer.deleteData(rawDataSize); return; }