Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 02.03.2013, 14:54  
pavned
Прописка
 
Регистрация: 25.10.2012
Сообщений: 112
Сказал спасибо: 50
Сказали Спасибо 1 раз в 1 сообщении
pavned на пути к лучшему
По умолчанию Не получается запустить генератор AD9834 с ЦАП AD5620

Доброго времени суток.

Не получается запустить генератор AD9834 с ЦАП AD5620.
Схемку и печатную плату прикрепил, делал по даташитам, проверьте пожалуйста!

Сигналы с ножек MOSI, SCK и CS МК проверял на осциллографе, все ок. А вот чипы не воспринимают, программа в МК "виснет" на ожидании окончания передачи по SPI. Что интересно - если передача до цикла while(1) то не виcнет, если же пробую в цикле - на первой же отправке стоп. В даташитах на AD9834 и AD5620 указано, что данные принимаются на спадающем фронте SCK, поэтому инициализировал SPI как
SPCR = (1‹‹SPE)|(1‹‹MSTR)|(1‹‹CPHA)|(1‹‹SPR0);
или
SPCR = (1‹‹SPE)|(1‹‹MSTR)|(1‹‹CPOL)|(1‹‹SPR0);
,т.е. пробовал по спад. фронту и с отрицательными сигналами SPI, не работает.
Проверял напряжение на ножках REF - как и должно быть, 1.2V. Значит ли это, что чип рабочий? Просто боюсь, что мог перегреть при паянии. Как еще можно проверить?

Микроконтроллер Atmega32 с кварцем 16 МГц, фьюзы изменял только для кварца.

Схема


Печатная плата


Даташит AD9834
Даташит AD5620
CN0156_Ampl_control_AD9834
AN-1070_programming_9834

Вот мой код в AVR Studio 5.

Код:
/*
 * ad9834_123.c
 *
 * Created: 3/1/2013 10:56:28 AM
 *  Author: Administrator
 */ 

#include ‹avr/io.h›
#include ‹stdio.h›
#define F_CPU 16000000UL  // 16 MHz
#ifndef ALIBC_OLD
#include ‹util/delay.h›
#else
#include ‹avr/delay.h›
#endif
#include "lcd16.h"


#define AD9834_CONTROL_PORT		PORTB
#define AD9834_CONTROL_DDR		DDRB
#define AD9834_CONTROL_MISO		PORTB6
#define AD9834_CONTROL_MOSI		PORTB5
#define AD9834_CONTROL_SCK		PORTB7

#define AD9834_CONTROL_CS_PORT	PORTB
#define AD9834_CONTROL_CS_DDR	DDRB
#define AD9834_CONTROL_CS		PORTB0

#define AD9834_CONTROL_RESET_PORT	PORTB
#define AD9834_CONTROL_RESET_DDR	DDRB
#define AD9834_CONTROL_RESET		PORTB1

// set CS to 0 = active
#define CSACTIVEAD9834 AD9834_CONTROL_CS_PORT &= ~(1‹‹AD9834_CONTROL_CS)
// set CS to 1 = passive
#define CSPASSIVEAD9834 AD9834_CONTROL_CS_PORT |= (1‹‹AD9834_CONTROL_CS)

///////////////////////////////////////////////////

#define AD5620_CONTROL_PORT   PORTB
#define AD5620_CONTROL_DDR    DDRB
#define AD5620_CONTROL_MISO PORTB6
#define AD5620_CONTROL_MOSI PORTB5
#define AD5620_CONTROL_SCK PORTB7

#define AD5620_CONTROL_CS_PORT   PORTB
#define AD5620_CONTROL_CS_DDR    DDRB
#define AD5620_CONTROL_CS     PORTB2

// set CS to 0 = active
#define CSACTIVEAD5620 AD5620_CONTROL_CS_PORT &= ~(1‹‹AD5620_CONTROL_CS)
// set CS to 1 = passive
#define CSPASSIVEAD5620 AD5620_CONTROL_CS_PORT |= (1‹‹AD5620_CONTROL_CS)

#define waitspi() while(!(SPSR & (1‹‹SPIF)))


void SPI_write16_AD9834 (unsigned short data)    	// 	send a 16bit word and use fsync
{

	unsigned char MSdata = ((data››8) & 0x00FF);  	//filter out MS
	unsigned char LSdata = (data & 0x00FF);			//filter out LS

	CSACTIVEAD9834;								// 	Fsync Low --› begin frame
	
	SPDR = MSdata;							// 	send First 8 MS of data
	waitspi();								//	while busy

	SPDR = LSdata;							// 	send Last 8 LS of data
	waitspi();								//	while busy

	CSPASSIVEAD9834;								// 	Fsync High --› End of frame
}

void SPI_write16_AD5620 (unsigned short data)    	// 	send a 16bit word and use fsync
{

	CSACTIVEAD5620;								// 	Fsync Low --› begin frame
	
    write data
    SPDR = data;
    waitspi();

	CSPASSIVEAD5620;								// 	Fsync High --› End of frame
}

int main(void)
{
	//LED
	DDRC = 0x02; //set C.1 as out - led
	PORTC = 0x02;
	
	CSPASSIVEAD9834;
	CSPASSIVEAD5620;
	
	AD5620_CONTROL_DDR = (1‹‹AD5620_CONTROL_MOSI)|(1‹‹AD5620_CONTROL_SCK);
	AD5620_CONTROL_CS_DDR = (1‹‹AD5620_CONTROL_CS);
	AD9834_CONTROL_CS_DDR = (1‹‹AD9834_CONTROL_CS);
	AD9834_CONTROL_RESET_DDR = (1‹‹AD9834_CONTROL_RESET);
	
    // SPI Clock Phase: falling edge
    // SPI Data Order: MSB First
    // set clock rate fck/16
	SPCR = (1‹‹SPE)|(1‹‹MSTR)|(1‹‹CPOL)|(1‹‹SPR0);
	
	
	//AD9834_init
	SPI_write16_AD9834(0x2100);		// control word, set output to mid value voltage 
	SPI_write16_AD9834(0x429F);		// Freq0 registerdata LSB  = approx. 50 hz
	SPI_write16_AD9834(0x4000);		// Freq0 registerdata MSB  = approx. 50 hz
	//Freq_write (50,0);
	SPI_write16_AD9834(0x82C7);		// Freq1 registerdata LSB  = approx. 53 hz
	SPI_write16_AD9834(0x8000); 	// Freq1 registerdata MSB  = approx. 53 hz
	//Freq_write (53,1);
	SPI_write16_AD9834(0xC000);		// Phase offset of Phase0 = 0
	//Phase_write(0,0);
	SPI_write16_AD9834(0xE155);		// Phase offset of Phase1 = 30_grad
	//Phase_write(30,1);
	SPI_write16_AD9834(0x2000);		// control word, set output = sine
	
	SPI_write16_AD5620 (0x0000);
	
	//LCD
	DDRD = 0xFF;
	int i; i = 0;
	char lcd_buffer[33];
	lcdInit();	// init the LCD screen
	_delay_ms(50);
	lcdCmd(0x01); // clear lcd
	_delay_ms(50);
    gotoXy(5,0); // goto (0.0)
	prints("LCD");
	
	CSACTIVEAD9834;
	_delay_ms(2000);
	CSPASSIVEAD9834;
	
	CSACTIVEAD5620;
	_delay_ms(2000);
	CSPASSIVEAD5620;
	
	
	_delay_ms(2000);
	gotoXy(0,1); // goto (0.1)
	prints("LCD_ATMEGA32");
	_delay_ms(2000);

    while(1)
    {
		i = i+1;
		//TODO:: Please write your application code
		sprintf(lcd_buffer,"counter: %u",i);
		lcdCmd(0x01); // clear lcd
		gotoXy(0,0); // goto (0.0)
		prints(lcd_buffer);
		_delay_ms(100);
		//SPI_write16_AD9834(0x2000);
		_delay_ms(100);
		//SPI_write16_AD5620(0x03E8);
		PORTC |= (1‹‹PORTC1);
		//SPI_write16_AD5620 (0x0000);
		_delay_ms(1000);
		
		sprintf(lcd_buffer,"counter: %u",i);
		lcdCmd(0x01); // clear lcd
		gotoXy(0,0); // goto (0.0)
		prints(lcd_buffer);
		_delay_ms(100);
		//SPI_write16_AD9834(0x2800);
		_delay_ms(100);
		//SPI_write16_AD5620(0x0001);
		PORTC &= ~(1‹‹PORTC1);
		//SPI_write16_AD5620 (0x03E8);
		_delay_ms(1000);
		
    }
}
Реклама:
pavned вне форума  
Непрочитано 02.03.2013, 16:51  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Не получается запустить генератор AD9834 с ЦАП AD5620.

Вот такая инициализация не смущает ?
PHP код:
    AD5620_CONTROL_DDR = (1‹‹AD5620_CONTROL_MOSI)|(1‹‹AD5620_CONTROL_SCK);
    
AD5620_CONTROL_CS_DDR = (1‹‹AD5620_CONTROL_CS);
    
AD9834_CONTROL_CS_DDR = (1‹‹AD9834_CONTROL_CS);
    
AD9834_CONTROL_RESET_DDR = (1‹‹AD9834_CONTROL_RESET); 
Реально только последняя строка работает - ибо реальный DDR везде ddrb
Boba_spb вне форума  
Непрочитано 02.03.2013, 17:04  
pavned
Прописка
 
Регистрация: 25.10.2012
Сообщений: 112
Сказал спасибо: 50
Сказали Спасибо 1 раз в 1 сообщении
pavned на пути к лучшему
По умолчанию Re: Не получается запустить генератор AD9834 с ЦАП AD5620.

Сообщение от Boba_spb Посмотреть сообщение
Вот такая инициализация не смущает ?
Реально только последняя строка работает - ибо реальный DDR везде ddrb
эм...
А разве предыдущие биты стираются с каждой новой строкой?
pavned вне форума  
Непрочитано 02.03.2013, 17:46  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Не получается запустить генератор AD9834 с ЦАП AD5620

А что Вы хотите от "=". Иль оно должно отгадывать где "равно", а где "или", а может быть "и".

Вроде эт не С++ где можно переопределить оператор
Boba_spb вне форума  
Непрочитано 02.03.2013, 19:17  
pavned
Прописка
 
Регистрация: 25.10.2012
Сообщений: 112
Сказал спасибо: 50
Сказали Спасибо 1 раз в 1 сообщении
pavned на пути к лучшему
По умолчанию Re: Не получается запустить генератор AD9834 с ЦАП AD5620

Сообщение от Boba_spb Посмотреть сообщение
А что Вы хотите от "=". Иль оно должно отгадывать где "равно", а где "или", а может быть "и".
Вроде эт не С++ где можно переопределить оператор
Изменил на
Код:
AD5620_CONTROL_DDR |= (1‹‹AD5620_CONTROL_MOSI)|(1‹‹AD5620_CONTROL_SCK);
AD5620_CONTROL_CS_DDR |= (1‹‹AD5620_CONTROL_CS);
AD9834_CONTROL_CS_DDR |= (1‹‹AD9834_CONTROL_CS);
AD9834_CONTROL_RESET_DDR |= (1‹‹AD9834_CONTROL_RESET);
всё равно в бесконечном цикле не выполняет отправку
может в схеме ошибка?
pavned вне форума  
Непрочитано 02.03.2013, 19:25  
jump
Почётный гражданин KAZUS.RU
 
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,003
Сказал спасибо: 0
Сказали Спасибо 4,946 раз(а) в 2,374 сообщении(ях)
jump на пути к лучшему
По умолчанию Re: Не получается запустить генератор AD9834 с ЦАП AD5620

Сообщение от pavned Посмотреть сообщение
может в схеме ошибка?
а может лучше на асм?
jump вне форума  
Непрочитано 02.03.2013, 20:03  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Не получается запустить генератор AD9834 с ЦАП AD5620

В LCDini() случаем DDRB - не трогается?
Boba_spb вне форума  
Непрочитано 02.03.2013, 20:14  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Не получается запустить генератор AD9834 с ЦАП AD5620

AD5620 вроде как 16 битный, а Вы ему токо 8 бит посылаете, иль ему хвататет?
Boba_spb вне форума  
Непрочитано 02.03.2013, 20:17  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Не получается запустить генератор AD9834 с ЦАП AD5620

А внутри while(1) все посылки по spi закоментированы - это не влияетни на что?
Boba_spb вне форума  
Непрочитано 02.03.2013, 20:22  
pavned
Прописка
 
Регистрация: 25.10.2012
Сообщений: 112
Сказал спасибо: 50
Сказали Спасибо 1 раз в 1 сообщении
pavned на пути к лучшему
По умолчанию Re: Не получается запустить генератор AD9834 с ЦАП AD5620

Сообщение от Boba_spb Посмотреть сообщение
В LCDini() случаем DDRB - не трогается?
LCD настроен на порт D, кроме него в lcd16.c ничего не трогается

Сообщение от Boba_spb Посмотреть сообщение
AD5620 вроде как 16 битный, а Вы ему токо 8 бит посылаете, иль ему хвататет?
Ему нужно 16 конечно.
Вы имеете ввиду, что такая отправка
Код:
SPDR = data;
waitspi();
берет только 8 бит? То есть нужно сделать как в функции записи для AD9834?

Сообщение от Boba_spb Посмотреть сообщение
А внутри while(1) все посылки по spi закоментированы - это не влияетни на что?
Закоментированы потому, что на них программа стопорится, это пока на время отладки, а так конечно должны быть без комментариев.
Вложения:
Тип файла: txt lcd16.c.txt (1.9 Кб, 59 просмотров)
pavned вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генератор тока на умножающем ЦАП newfor Электроника - это просто 7 20.05.2012 11:40
ЦАП - AD7541AKN, можно ли с её помощью сделать генератор? al3xey Микроконтроллеры, АЦП, память и т.д 2 13.02.2010 00:06
PL-2303 не получается запустить dimonbest Микроконтроллеры, АЦП, память и т.д 31 19.11.2009 11:29
не могу запустить генератор ra0wbj Электроника - это просто 1 02.08.2005 16:48


Часовой пояс GMT +4, время: 02:50.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot