van i2c naar spi

This commit is contained in:
Mats van Reenen 2020-12-29 20:50:24 +01:00
parent fd389ca33b
commit bc71a50604
2 changed files with 126 additions and 134 deletions

View File

@ -11,61 +11,58 @@ typedef enum {
} packetID_t;
// packet structures
union {
struct {
packetID_t id = PACKET_NOODSTOP;
bool overheeat;
bool overload;
bool overspeed;
} initAandrijving;
struct {
packetID_t id = PACKET_INITPARAMS;
uint8_t maxVermogen;
uint16_t maxSnelhied;
uint8_t maxTemptratuur;
uint8_t vermogenSetpoint;
} initBelasting;
struct {
packetID_t id = 0x03;
uint8_t maxVermogen;
uint16_t maxSnelhied;
uint8_t maxTemptratuur;
} maxWaardesBelasting;
struct {
packetID_t id = 0x04;
uint8_t rendement;
uint16_t snelheid;
uint16_t stroom;
uint16_t spanning;
};
struct {
packetID_t id = 0x05;
uint16_t snelheidSetpoint;
uint16_t maxSpanning;
uint16_t maxStroom;
} initAandrijving;
struct {
packetID_t id = 0x06;
uint8_t rendement;
uint8_t vermogen;
uint16_t stroom;
uint16_t spanning;
};
} I2CPacket_t;
typedef struct {
packetID_t id;
bool overheeat;
bool overload;
bool overspeed;
} initAandrijving;
typedef struct {
uint8_t maxTemperatuur;
packetID_t id;
uint8_t maxVermogen;
uint16_t maxSnelheid;
} maxwaardes_t;
uint16_t maxSnelhied;
uint8_t maxTemptratuur;
uint8_t vermogenSetpoint;
} initBelasting;
mqd_t MaxWaardes_mq;
typedef struct {
packetID_t id;
uint8_t maxVermogen;
uint16_t maxSnelhied;
uint8_t maxTemptratuur;
} maxWaardesBelasting;
extern void mppt_setpoint(uint8_t vermogen);
typedef struct {
packetID_t id;
uint8_t rendement;
uint16_t snelheid;
uint16_t stroom;
uint16_t spanning;
} dataBelasting;
typedef struct {
packetID_t id;
uint16_t snelheidSetpoint;
uint16_t maxSpanning;
uint16_t maxStroom;
} initAandrijving;
typedef struct {
packetID_t id;
uint8_t rendement;
uint8_t vermogen;
uint16_t stroom;
uint16_t spanning;
} dataAandrijving;
union {
initAandrijving;
initBelasting;
maxWaardesBelasting;
dataBelasting;
initAandrijving;
dataAandrijving;
} I2CPacket_t;
#endif

View File

@ -1,102 +1,97 @@
#include <ti/drivers/I2CSlave.h>
#include <ti/drivers/SPI.h>
#include "communicatie.h"
#define COMM_I2C_ADDRESS 0xB1
#define SPI_PACKET_LENGTH 4
extern pthread_t createSimplePTread(int prio, void * fn);
union I2CPacket_t PacketBuffer;
unsigned char ReciveBuffer[SPI_PACKET_LENGTH];
unsigned char TransmitBuffer[SPI_PACKET_LENGTH];
void dataBijhouden(){
//BLOCK: wacht op werken
//??
uint16_t comm_snelheid;
while(1){
//BLOCK: vermogen DUT aflezen
//??
typedef enum {
SPIPARM_maxVermogen,
SPIPARM_maxSnelheid,
SPIPARM_maxTempratuur,
SPIPARM_setpoint,
SPIPARM_vermogen,
SPIPARM_snelheid,
SPIPARM_tempratuur,
SPIPARM_count
} SPI_Register_t;
//BLOCK: Snelheid aflezen
//??
//BLOCK: bereken koppel
//??
//BLOCK: Vermogen belasting aflezen
//??
//BLOCK: Spanning belasting aflezen
//??
//BLOCK: bereken rendement
//??
//BLOCK: Temperatuur aflezen
//??
//BLOCK: sleep 1ms
usleep(1000);
}
}
// communicatie I2C Taak
void comm_i2c(){
//BLOCK: init start begint
//??
//BLOCK: Initialiseer I2C
I2C_init();
//TODO: findout corect driver for this
Slave_Handle handle;
I2CSlave_Params params;
I2CSlave_Params_init(&params);
params.transferMode = I2CSLAVE_MODE_BLOCKING;
params.slaveAddress = COMM_I2C_ADDRESS;
handle = I2CSlave_open(CONFIG_I2C_0, &params);
if (!handle) {
System_printf("I2CSlave did not open");
// communicatie spi Taak
void comm_spi(){
// Initialiseer SPI
ISP_init();
SPI_Params spiParams;
SPI_Params_init(&spiParams);
spiParams.frameFormat = SPI_POL0_PHA0; // mode0
spiParams.bitRate = 1E6; // 1 MHz
SPI_Handle masterSpi = SPI_open(CONFIG_SPI_MASTER, &spiParams);
if (masterSpi == NULL) {
// Display_printf(display, 0, 0, "Error initializing master SPI\n");
while (1);
} else {
// Display_printf(display, 0, 0, "Master SPI initialized\n");
}
//BLOCK: GPIO init
//??
//BLOCK: maak thread aan om waardes te updaten
createSimplePTread(1, &dataBijhouden);
I2CPacket_t packet;
// create transaction
SPI_Transaction transaction;
transaction.count = SPI_PACKET_LENGTH;
transaction.txBuf = (void *) TransmitBuffer;
transaction.rxBuf = (void *) ReciveBuffer;
// start the loop
TransmitBuffer[0] = 0;
while(1){
//BLOCK: read package
//TODO: figgerout how it actualy works
I2C_read(handle, &packet, sizeof(Packet));
// zero the buffers
memset((void *) TransmitBuffer+1, 0, SPI_PACKET_LENGTH-1);
memset((void *) ReciveBuffer, 0, SPI_PACKET_LENGTH);
//BLOCK: send reply
//TODO: figgerout how it actualy works
I2C_send(handle, &PacketBuffer, sizeof(PacketBuffer));
//BLOCK: identificeer package
switch (packet){
case PACKET_UPDATEBELASTING:
//BLOCK: Update setpoint
mppt_setpoint(packet.vermogenSetpoint);
// set data in the transmit buffer
ReciveBuffer[0] = TransmitBuffer[0];
switch(TransmitBuffer[0]){
case SPIPARM_vermogen:
TransmitBuffer[1] = mppt_getVermogen();
break;
case PACKET_NOODSTOP:
//BLOCK: Update Overheat, Overspeed, overload waardes updaten
//??
case SPIPARM_snelheid:
TransmitBuffer[1] = comm_snelheid;
break;
case PACKET_INITPARAMS:
//BLOCK: Verstuur data naar noodstop
maxwaardes_t p;
p.maxTemperatuur = packet.maxTemperatuur;
p.maxVermogen = packet.maxVermogen;
p.maxSnelheid = packet.maxSnelheid;
//mq_send(MaxWaardes_mq, (const char*)&p, sizeof(p), 3);
//BLOCK: Verstuur data naar MPPT
mppt_setpoint(packet.vermogenSetpoint);
case SPIPARM_tempratuur:
TransmitBuffer[1] = noodstop_getTemptatuur();
break;
}
// do the transaction
SPI_transaction(masterSpi, &transaction);
// read the data out the recive buffer
switch (ReciveBuffer[0]){
case SPIPARM_maxVermogen:
uint8_t *maxVermogen = &ReciveBuffer[1];
noodstop_setMaxVermogen(*maxVermogen);
break;
case SPIPARM_maxSnelheid:
uint16_t *maxSnelheid = &ReciveBuffer[1];
noodstop_setMaxSnelheid(*maxSnelheid);
break;
case SPIPARM_maxTempratuur:
uint8_t *maxTemptratuur = &ReciveBuffer[1];
noodstop_setMaxTemptratuur(*maxTemptratuur);
break;
case SPIPARM_setpoint:
uint8_t *setpoint = &ReciveBuffer[1];
mppt_setpoint(*setpoint);
break;
}
// increment and loop parameter
TransmitBuffer[0]++;
if(TransmitBuffer[0] == SPIPARM_count)
TransmitBuffer[0] = 0;
usleep(5000);
}