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

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

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

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

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

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

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

 
Опции темы

Не получается запустить генератор AD9834 с ЦАП AD5620

Непрочитано 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.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 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.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 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.RUN
 
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,011
Сказал спасибо: 0
Сказали Спасибо 4,955 раз(а) в 2,379 сообщении(ях)
jump на пути к лучшему
По умолчанию Re: Не получается запустить генератор AD9834 с ЦАП AD5620

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

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

AD5620 вроде как 16 битный, а Вы ему токо 8 бит посылаете, иль ему хвататет?
Boba_spb вне форума  
Непрочитано 02.03.2013, 20:17  
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 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, время: 00:35.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.