AD8400 и AtMega16 не дружат
Добавлено: Сб фев 22, 2020 21:42:46
Взял атмегу16 и ад8400. подключил вот так:
пишу код:
В результате ничего не меняется. Мерил мультиметром - никаких изменений. В протеусе осилографом смотрел, вроде все норм. CS опускается, клоки клокают, данные прыгают.
В чем косяк?
Думал может слишком быстро. Атмега 8 мегагерц. 1/8000000 получается 125 нано секунд, этого с запасом хватает, по даташиту на 8400 там единицы наносекунд на переключения.
В чем еще может быть дело?
Добавлено after 6 hours 5 minutes 3 seconds:
Нашел на амперке тему про 8400, там он глючил, инога выставляя неверные значения. Но в большинтве случаев работал. Решилось все подтянув линии к питанию. Но там длина проводников 17 см. У меня они вплотную стоят практически, около 1 см длина проводников и у меня вообще не реагирует.
Могла она сдохнуть? Читал что к статике очень чувствительна. Как ее проверить?
Код: Выделить всё
#define PORT_SPI PORTB/*назначения портов и сигналов*/
#define DDR_SPI DDRB
#define SDI PB6 /*MiSO*/
#define CKL PB4 /*SS*/
#define CS PB7 /*SCK*/
void SPI_init(void) {
/*настройка портов ввода-вывода*/
DDR_SPI |= (1<<SDI) | (1<<CKL) | (1<<CS);//все сигналы выходы
PORT_SPI |= (1<<CS) ;//с лог. 1
PORT_SPI &= ~(1<<SDI);//и лог. 0
PORT_SPI &= ~(1<<CKL);//
}
void SPI_WriteByte(uint8_t data)
{
unsigned char i;//переменная для цикла
unsigned int addr_value;//промежуточная переменная для вычисления управляющего слова
addr_value = ((unsigned int) (0<<8)) | ((unsigned int) data);//формируем управляющее слово из двух бит адреса и байта сопротивления
PORT_SPI &= ~(1<<CS);//выбор микросхемы. CS в 0
for(i=0; i < 10; i++)//для 10 бит управляющего слова
{ if(0x0001 & (addr_value>>(9-i))) PORT_SPI |= (1<<SDI);//если бит-единица, то и выставляем единицу
else PORT_SPI &= ~(1<<SDI);//иначе - выставляем ноль
PORT_SPI |= (1<<CKL);//фронт синхроимпульса
PORT_SPI &= ~(1<<CKL);//спад синхроимпульса
}
PORT_SPI |= (1<<CS);//не выбираем микросхему. CS в 1
}
В чем косяк?
Думал может слишком быстро. Атмега 8 мегагерц. 1/8000000 получается 125 нано секунд, этого с запасом хватает, по даташиту на 8400 там единицы наносекунд на переключения.
В чем еще может быть дело?
Добавлено after 6 hours 5 minutes 3 seconds:
Нашел на амперке тему про 8400, там он глючил, инога выставляя неверные значения. Но в большинтве случаев работал. Решилось все подтянув линии к питанию. Но там длина проводников 17 см. У меня они вплотную стоят практически, около 1 см длина проводников и у меня вообще не реагирует.
Могла она сдохнуть? Читал что к статике очень чувствительна. Как ее проверить?