Also mit dem Layout sollte es keine Probleme geben, da das ein Board von AnalogDevice ist.
Die Pins habe ich alle mit dem Oszilloskope nachgemessen.
Bis auf "MISO" dort kommt nichts, keine Antwort.
Hier ist die Initalisierung.:
CodeBox C
/* ONLY FOR MEGA32U4! */
#if defined (__AVR_ATmega32U4__)
{
/* set MOSI and SCK output, all others input */
MOSI_DDR |= (1<<MOSI_BIT);
MISO_DDR &= ~(1<<MISO_BIT);
SCK_DDR |= (1<<SCK_BIT);
SS_DDR |= (1<<SS_BIT); // software slave select signal
SS_HA_DDR |= (1<<SS_HA_BIT); // hardware slave select signal
/* enable SPI, Master */
SPCR |= ((1<<SPE) | (1<<MSTR));
/* clear the bit´s (for multi init) */
SPCR &= ~((1<<SPR0) | (1<<SPR1)); // fclk/4
SPSR &= ~(1<<SPI2X);
/* clear the bit´s (for multi init) */
SPCR &= ~((1<<CPOL) | (1<<CPHA));
/* config "Clock Polarity and "Clock Phase" */
switch(clock_option)
{
case 0 : {SPCR &= ~((1<<CPOL) | (1<<CPHA)); }break; // mode 1
case 1 : {SPCR |= (1<<CPHA); }break; // mode 2
case 2 : {SPCR |= (1<<CPOL); }break; // mode 3
case 3 : {SPCR |= ((1<<CPOL) | (1<<CPHA)); }break; // mode 4
default: {return 0; }; // error
}
/* config SPI Bus Speed fclk/prescaler */
switch (prescaler)
{
case 0: {SPSR |= (1<<SPI2X); }break; // 2
case 1: {SPCR |= (1<<SPR0); SPSR |= (1<<SPI2X); }break; // 8
case 2: {SPCR |= (1<<SPR1); SPSR |= (1<<SPI2X); }break; // 32
case 3: {SPCR |= (1<<SPR0); SPSR |= (1<<SPI2X); }break; // 64
case 4: {SPCR |= ((1<<SPR1) | (1<<SPR0)); }break; // 128
default: {return 0; }; // error
}
return 1;
}
#endif
So Initalisiere ich.:
CodeBox C
spi_master_init(PRESCALER_SPI_128,2);
Und hier mit versuche ich was zu lesen.:
CodeBox C
uint8_t AD7124_read_uint8(uint8_t reg)
{
uint8_t buffer[1] = {0};
/* build command */
buffer[0] = (AD7124_COMM_REG_WEN | AD7124_COMM_REG_RD | AD7124_COMM_REG_RA(reg));
chip_enable_high(); // \CS High
chip_disable_low(); // \CS Low -> start transmission condition
spi_master_transmit(buffer[0]); // register address
spi_master_transmit(0x00); // dummy byte
buffer[0] = (uint8_t)spi_receive(); // result
chip_enable_high(); // \CS High -> stop transmission condition
return (uint8_t)buffer[0];
}
Chip Enable klappt auch...
Wo ich mir noch nicht sicher bin, was mache ich mit dem SYNC Pin ? Muss ich den zwingend bedienen nur um erstmal die ID aus zu lesen?
Achja.. Ich arbeite aktuell mit 16MHz