This commit is contained in:
commit
dc23fd3aa8
1 changed files with 100 additions and 0 deletions
100
Piinterruptread
Normal file
100
Piinterruptread
Normal file
|
|
@ -0,0 +1,100 @@
|
||||||
|
//insert gpl code headers here
|
||||||
|
//macro cycle:
|
||||||
|
//setup: intitalise, read all devices and send, wait for gps acquisition
|
||||||
|
//loop: null
|
||||||
|
//interrupt:
|
||||||
|
//1)read in ADC's (direct port sampling)
|
||||||
|
//2)read out GPS timestamp (TIMEMARK) and position (UART or SPI)
|
||||||
|
//3)read out extra data (temp, pressure, humidity) (I2C)
|
||||||
|
//3.1)maybe read some more out of the adc's (3 samples?) direct port sampling, cycle clock
|
||||||
|
//4)apply high level trigger (threshold?) test.
|
||||||
|
//5)if test is positive then send the output to Pi over rx/tx port 1
|
||||||
|
//6)return to waiting state
|
||||||
|
|
||||||
|
//define pins for SPI
|
||||||
|
#define DATAOUT 11//MOSI
|
||||||
|
#define DATAIN 12//MISO
|
||||||
|
#define SPICLOCK 13//sck
|
||||||
|
#define SLAVESELECT 10//ss
|
||||||
|
|
||||||
|
|
||||||
|
//opcodes
|
||||||
|
#define WREN 6
|
||||||
|
#define WRDI 4
|
||||||
|
#define RDSR 5
|
||||||
|
#define WRSR 1
|
||||||
|
#define READ 3
|
||||||
|
#define WRITE 2
|
||||||
|
|
||||||
|
|
||||||
|
byte eeprom_output_data;
|
||||||
|
byte eeprom_input_data=0;
|
||||||
|
int tempsensor =0;
|
||||||
|
int pressuresensor =0;
|
||||||
|
int humiditysensor =0;
|
||||||
|
byte clr;
|
||||||
|
int address=0;
|
||||||
|
//data buffer
|
||||||
|
char buffer [128];
|
||||||
|
|
||||||
|
|
||||||
|
int pin = 13;
|
||||||
|
volatile int state = LOW;
|
||||||
|
byte adcpt1, adcpt2, adcpt3;
|
||||||
|
|
||||||
|
//directly read ports:
|
||||||
|
//Port F (8 bits) and Port K (8 bits) and Port A (8 bits) = 24 bits total
|
||||||
|
//set into two
|
||||||
|
|
||||||
|
void setup()
|
||||||
|
{
|
||||||
|
pinMode(pin, OUTPUT);
|
||||||
|
attachInterrupt(0, blink, CHANGE);
|
||||||
|
Serial.begin(9600);
|
||||||
|
|
||||||
|
//read SPI eeprom
|
||||||
|
address = 0; //set the address of the temp sensor here
|
||||||
|
tempsensor = read_eeprom(address);
|
||||||
|
address = 1; //set the address of the pressure sensor here
|
||||||
|
pressuresensor = read_eeprom(address);
|
||||||
|
address = 2; //set the address of the humidity sensor here
|
||||||
|
humiditysensor = read_eeprom(address);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
digitalWrite(pin, state);
|
||||||
|
}
|
||||||
|
|
||||||
|
void blink()
|
||||||
|
{
|
||||||
|
state = !state;
|
||||||
|
adcpt1= PINF;
|
||||||
|
adcpt2= PINK;
|
||||||
|
adcpt3= PINA;
|
||||||
|
Serial.println("done");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
char spi_transfer(volatile char data)
|
||||||
|
{
|
||||||
|
SPDR = data; // Start the transmission
|
||||||
|
while (!(SPSR & (1<<SPIF))) // Wait the end of the transmission
|
||||||
|
{
|
||||||
|
};
|
||||||
|
return SPDR; // return the received byte
|
||||||
|
}
|
||||||
|
|
||||||
|
byte read_eeprom(int EEPROM_address)
|
||||||
|
{
|
||||||
|
//READ EEPROM
|
||||||
|
int data;
|
||||||
|
digitalWrite(SLAVESELECT,LOW);
|
||||||
|
spi_transfer(READ); //transmit read opcode
|
||||||
|
spi_transfer((char)(EEPROM_address>>8)); //send MSByte address first
|
||||||
|
spi_transfer((char)(EEPROM_address)); //send LSByte address
|
||||||
|
data = spi_transfer(0xFF); //get data byte
|
||||||
|
digitalWrite(SLAVESELECT,HIGH); //release chip, signal end transfer
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
Loading…
Reference in a new issue