Hallo zusammen,
ich versuche gerade einen AD5293 zum Laufen zu überreden, aber er wehrt sich.
Das SPI Format ist:
CPOL = 0; CPHA = 1 (spi mode 1)
MSB First
Die SPI_Init sieht so aus:
CodeBox C
Der Chip ist nach dem reset in einem write protect Modus, der erstmal gelöscht werden muss. Dazu sendet man ein 0x1802 an den Chip und damit ist er aus dem Write protect raus.
Alles klar, kein Problem, hier der Code dazu:
CodeBox C
Mein uint16_t data hat den Wert 0x1802, also raus damit.
Und die SPI 16-bit Senderoutine sieht so aus:
CodeBox C
Nur interessiert es den Chip herzlich wenig. Nun habe ich drei Leitungen angelötet und einen LA dran gehängt:
Warum ist der LA der Meinung, dass da 0x1840 gesendet wurde und nicht 0x1802? Hat es was mit der Wartezeit in der Mitte der Übertragung zu tun?
Danke Euch!
ich versuche gerade einen AD5293 zum Laufen zu überreden, aber er wehrt sich.
Das SPI Format ist:
CPOL = 0; CPHA = 1 (spi mode 1)
MSB First
Die SPI_Init sieht so aus:
CodeBox C
void spi_init(void) { // spi master, 16 divider = 921,6kHz spi freq DDR_SPI |= (1 << DD_MOSI)|(1 << DD_SCK)|(1 << DD_CS); SELECT_CS(); SPCR |= (1 << SPE)|(1 << DORD)|(1 << MSTR)|(0 << CPOL)|(1 << CPHA)|(1 << SPR0); // SPI enable, Master mode, divider 16, cpol = 0, cpha = 1, msb first // SPCR |= (1 << SPE)|(1 << MSTR); // SPI enable, Master mode, divider 4 }
Der Chip ist nach dem reset in einem write protect Modus, der erstmal gelöscht werden muss. Dazu sendet man ein 0x1802 an den Chip und damit ist er aus dem Write protect raus.
Alles klar, kein Problem, hier der Code dazu:
CodeBox C
void ad5293_init (void) { uint16_t data = 0; data |= (1 << 12)|(1 << 11)|(1 << 1); DESELECT_CS(); spi_write16(data); SELECT_CS(); }
Mein uint16_t data hat den Wert 0x1802, also raus damit.
Und die SPI 16-bit Senderoutine sieht so aus:
CodeBox C
void spi_write16 (uint16_t data) { SPDR = ((uint8_t) (data >> 8)); while(!(SPSR & (1<<SPIF))); SPDR = ((uint8_t) (data & 0xff)); while(!(SPSR & (1<<SPIF))); }
Nur interessiert es den Chip herzlich wenig. Nun habe ich drei Leitungen angelötet und einen LA dran gehängt:
Warum ist der LA der Meinung, dass da 0x1840 gesendet wurde und nicht 0x1802? Hat es was mit der Wartezeit in der Mitte der Übertragung zu tun?
Danke Euch!