AD8400 и AtMega16 не дружат

Все прочитали, вроде даже поняли, взяли паяльник - а нифига не получается? Скорее сюда! Поможем. Чем можем...
Ответить
alex1126
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

AD8400 и AtMega16 не дружат

Сообщение alex1126 »

Взял атмегу16 и ад8400. подключил вот так:
2020-02-22_15-31-00.png
(12.16 КБ) 140 скачиваний
2020-02-22_15-30-08.png
(7.76 КБ) 115 скачиваний
пишу код:

Код: Выделить всё

#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	
}
В результате ничего не меняется. Мерил мультиметром - никаких изменений. В протеусе осилографом смотрел, вроде все норм. CS опускается, клоки клокают, данные прыгают.

В чем косяк?
Думал может слишком быстро. Атмега 8 мегагерц. 1/8000000 получается 125 нано секунд, этого с запасом хватает, по даташиту на 8400 там единицы наносекунд на переключения.
В чем еще может быть дело?

Добавлено after 6 hours 5 minutes 3 seconds:
Нашел на амперке тему про 8400, там он глючил, инога выставляя неверные значения. Но в большинтве случаев работал. Решилось все подтянув линии к питанию. Но там длина проводников 17 см. У меня они вплотную стоят практически, около 1 см длина проводников и у меня вообще не реагирует.
Могла она сдохнуть? Читал что к статике очень чувствительна. Как ее проверить?
Реклама
alex1126
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Re: AD8400 и AtMega16 не дружат

Сообщение alex1126 »

ну может хоть идеи есть у кого какие
Реклама
alex1126
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Re: AD8400 и AtMega16 не дружат

Сообщение alex1126 »

Отбой. Мне повезло вытащить мертвую микросхему с первого раза :)
Ответить

Вернуться в «Практика»