You could emulate a supported communication protocol via UART (for example the P2 protocol).
instead of using analogRead() to get the signal values from the internal ADC, you would use the SPI interface of the external ADS1299.
(note that P2 is limited to a resoltion of 16 bits)
here i send you an example code which sends P2-compatible data packets,
here an i2c-ads (ADS1115) is used. You could modify this code to use the SPI interface instead:
<----------------------
// see
https://github.com/tonysteinbock/avr-ads1115//
https://arduino-projekte.webnode.at/mei ... c-ads1115///
https://learn.adafruit.com/adafruit-4-c ... /downloads//
https://cdn-shop.adafruit.com/datasheets/ads1115.pdf//
https://github.com/pietern/avr-i2c#define F_CPU 16000000
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#include "i2cmaster.h"
#include "ads1115.h"
/** ++++++++++ UART functions ++++++++++ */
void uart_init (uint32_t baudrate)
{
uint16_t ubrr = (F_CPU / 8 / baudrate) - 1;
UBRR0H = (uint8_t) (ubrr >> 8);
UBRR0L = (uint8_t) (ubrr & 0xff);
UCSR0A |= (1 << U2X0); // "double speed" (bit 1)
UCSR0B |= ( 1 << TXEN0); // enable UART transmit
UCSR0B |= ( 1 << RXEN0); // enable UART receive
}
void uart_transmit (uint8_t data)
{
while ( (UCSR0A & (1 << UDRE0)) == 0); // warten, bis bit UDRE0 (bit 5) in UCSR0A 1 wird -> free to send !
UDR0 = data; // data senden !
}
uint8_t uart_receive ()
{
while ( (UCSR0A & (1 << RXC0)) == 0);
return (UDR0);
}
int main(void)
{
uint8_t P2[17] = {0xa5,0x5a,0x02};
uart_init(115200);
i2c_init(400000);
TCCR1B = 2; // start timer1, prescaler 8 -> 2 MHz!
while (1)
{
TCNT1 = 0;
int16_t val = ads1115_readADC_SingleEnded(0x48, 0, ADS1115_DR_860SPS, FSR_6_144);
if (val<0) val=0;
uint16_t time = TCNT1 >> 1; // get duration in uS
uint16_t mV = ads1115_conv2mV(val, FSR_6_144);
P2[3]++;
P2[4]=val>>8;
P2[5]=val&0xff;
for (int i=0;i<17;i++) uart_transmit(P2[i]);
// 200Hz -> 5ms until next conversion!
while (TCNT1 < 2000 * 5);
}
}