Пытаюсь подключить к ATmega16 и заставить работать внешнее АЦП TLV1570 - появились некоторые затруднения, прошу помочь разобратьсяИнтерфейс соединения с микроконтроллером - SPI вот с этим я и борюсь.
Исходная информация:1. Схема подключения:В даташите структурно это выглядит так:

На деле так:

2. Алгоритм работы и прошивка для МКРаботает данное АЦП следующим образом:
а. Передаем 16 конфигурационных бит с настройками.
б. Передаем 16 конфигурационных бит с настройками и читаем 10 бит результата (то что сконфигурировали в пункте а.)
... и т.д.
Т.е на каждую выборку, я должен отсылать конфигурационную последовательность, и получать свой результат.* Для оцифровки сигнала на канале 0, с внутренней опорой в 2.3В, мне необходима следующая комбинация битов:
[00000000 01000000] или 0x40h
1. ОпределенияКод
#define ADC_SCLK PORTA.0
#define ADC_SDIN PORTA.1
#define ADC_SDOUT PORTA.2
#define ADC_CS PORTA.3
2. Функция передачи 16 бит на АЦПКод
void spi_send (void) {
char ctr = 8;
ADC_CS = 1;
ADC_SCLK = 0;
ADC_CS = 0;
while (ctr) {
ADC_SDIN = adc_conf_hi & 0b10000000;
ADC_SCLK = 1;
adc_conf_hi <<= 1;
ADC_SCLK = 0;
ctr--;
test_sdout = test_sdout + ADC_SDOUT;
}
ctr = 8;
while (ctr) {
ADC_SDIN = adc_conf_low & 0b10000000;
ADC_SCLK = 1;
adc_conf_low <<= 1;
ADC_SCLK = 0;
ctr--;
}
ADC_CS = 1;
}
}
3. Основная процедураКод
while (1)
{
adc_conf_hi = 0x00;
adc_conf_low = 0x40;
spi_send();
};
* Состояние ноги ADC_SDOUT (т.е. там где должны появлятся оцифрованные данные) - контролирую по УАРТУ (код посылки состояния ноги в ПК не стал приводить, дабы не загромождать(putchar(ADC_SDOUT)

)
3. Временные диаграммыПроэмулировал работу прошивки в VMLAB - вроде всё как в даташите:
Диаграмма из ДШ:
Диаграмма из VMLAB (передача [00000000 01000000]):
* насколько я понял чтение данных происходит по спаду.Признаки жизниПри передачи 16 бит конфига: [00000000 01000000] - я говорю АЦП что бы использовался канал #0. Тогда напряжение, подаваемое на CH0 отобразится на ноге AIN - т.е на аналоговом входе. Путем изменения номеров каналов, и подачи постоянного напряжения туда - убедился в том что
АЦП распознает конфигурационные 16 бит, и правильно выбирает канал для оцифровки. => оно живое, оно работает, просто вредничает и не хочет оцифровывать мой сигнал
Перепробывал уже почти всё, на выходе (ADC_SDOUT) всегда 0 оцифрованных данных. Может кто советом поможет?