Zdravím,
potřeboval bych radu od zkušenějších. Mám A/D převodník komunikující přes SPI a používám ATmegu8.
V kódu níže inicializuji SPI, poté zapíšu do konfiguračního registru A/D převodníku. Vždy když signál DRDY padne do logické nuly, znamená to, že jsou připravena nová data a mají se vyčíst příslušné registry obsahující výsledek převodu. Avšak provoz po SPI probíhá neustále (tzn. registry jsou zbytečně čteny pořád dokola i když obsahují "stará" data). Používám správně příkaz "while(PORTD & (1<<DRDY));"? Jde mi o to, aby mikrokontrolér počkal na log.0 na DRDY a až pak vyčetl obsah registrů. Napadlo mě, že by to mohlo být optimalizací, ale po vypnutí se nic nezměnilo. DRDY je na pinu PD2 a je nastaven jako vstup. Předem děkuji za rady.
void main(void)
{
uint16_t ADC_Code = 0;
spi_init_master();
spi_write(Configuration_write, 0xC1);
while (1)
{
while(PORTD & (1<<DRDY));
ADC_Code |= spi_read(Reg_MSBs) <<8;
ADC_Code |= spi_read(Reg_LSBs);
}
}