Witam.
Mam podłączony ten DAC do Atmegi 128. SPI dobrze skonfigurowane, chodzi na nim ADC MCP3208.
Komunikacja z przetwornikiem odbywa się w ten sposób, że wysyła się 2 bajty. Połowa bajtu MSB to ustawienia, 2 połowa oraz bajt LSB to 12-bitowa wartość do przetwornika.
Pin /LDAC jest na chwilę ściągany do 0, żeby przepisać rejestry wejściowe do wyjściowych.
Kod mam taki:
definicja LDAC oraz init:
Za nic nie mogę tego uruchomić, cały czas na wyjściach jest 0V. Męczę się z tym cały dzień, połączenia sprawdzane kilka razy i wszystko wydaje się ok. W czym może być problem?
Sprawdzałem dwa przetworniki.
Jak coś to tu jest data: http://ww1.microchip.com/downloads/en/DeviceDoc/21953a.pdf
Mam podłączony ten DAC do Atmegi 128. SPI dobrze skonfigurowane, chodzi na nim ADC MCP3208.
Komunikacja z przetwornikiem odbywa się w ten sposób, że wysyła się 2 bajty. Połowa bajtu MSB to ustawienia, 2 połowa oraz bajt LSB to 12-bitowa wartość do przetwornika.
Pin /LDAC jest na chwilę ściągany do 0, żeby przepisać rejestry wejściowe do wyjściowych.
Kod mam taki:
LDAC_WYSOKI();
SS_NISKI();
SPDR = 0x2F;
while(!(SPSR & (1<<SPIF)));
SPDR = 0xFF;
while(!(SPSR & (1<<SPIF)));
SS_WYSOKI();
LATCH_NISKI();
czekaj_us(1);
LDAC_WYSOKI();definicja LDAC oraz init:
#define LDAC_NISKI() (PORTG &= ~0x08); //stan niski na SS
#define LDAC_WYSOKI() (PORTG |= 0x08); //stan wysoki na SS
#define SS_NISKI() (PORTB &= ~0x01); //stan niski na SS
#define SS_WYSOKI() (PORTB |= 0x01); //stan wysoki na SS
void spi_init(void)
{
DDRB |= 0b00000111; //ustawienie kierunku bitow portu
SPCR = _BV(SPE) | _BV(MSTR); //tryb nadrzedny, predkosc 4MHz, wlaczenie SPI, big endian, wlaczenie przerwania
SS_WYSOKI(); //stan wysoki na SS
}
Za nic nie mogę tego uruchomić, cały czas na wyjściach jest 0V. Męczę się z tym cały dzień, połączenia sprawdzane kilka razy i wszystko wydaje się ok. W czym może być problem?
Sprawdzałem dwa przetworniki.
Jak coś to tu jest data: http://ww1.microchip.com/downloads/en/DeviceDoc/21953a.pdf