[an error occurred while processing this directive]
Связка Atmega8515+AD9834, не работает, частота неустанавливается. Подскажите!.(Программу прилагаю)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Леонтий 03 февраля 2006 г. 22:57

Сигналы все передаются, по LTP - AD9834 частота устанавливается.
Могу выслать схему.
//ICC-AVR application builder : 26.01.2006 10:50:59 Target : Atmega8515+AD9834
/* Подключение:
Atmega8515 AD9834
РВ5(MOSI) - SDATA
PB6(MISO) - -----
PB7(SCK) - SCLK
PB4(SS) - FSYNC
PB3 - RESET (соединены и через резистор (10кОМ) на землю, но неиспользум?)
*/
#include
#include
#include
#include "gss.h"

void F_YST (void);
const double F=2000; // Значение устанавливаемой частоты
const float AD_MClkFreq=25000000; //Частота кварцевого генератора
const unsigned int AD_Control1=0x2100;
const unsigned int AD_Control2=0x2000;
//Инициализация SPI
void SPI_Init(void)
{
SPCR = 0x53; //setup SPI
DDRB |= 0xB0; // Set SCK, MOSI & SS as outputs
PORTB &= 0x5F; // clear bits MOSI, & SCK
PORTB|=BIT(4);
PORTB&=~BIT(5); // очистка MOSI
PORTB&=~BIT(7); //очистка SCK
NOP();
}
//Функция передачи байта по SPI
void SpiWriteByte(unsigned char byte)
{
SPDR = byte;
while (!(SPSR & 0x80));
}
//Функция установки частоты в AD9834
void F_YST (void)
{
float FF;
unsigned long L;
unsigned int h1, h2;
unsigned char tmp1=0, tmp2=0;
//Задать частоту генерации,
FF = (((F*0x4000)*0x4000))/AD_MClkFreq;
FF = floor (FF);//Возращает целое значение
L = (unsigned long)(FF);
SPI_Init();
//Передаем байты для установки частоты: 0х2100; F_частота; 0x2000
// Пишем в регистр контроля 0х2100
tmp1=(unsigned char)((AD_Control1>>8)& 0xFF);
tmp2=(unsigned char)((AD_Control1)& 0xFF);
PORTB&=~BIT(4); // CS установить в 0
SpiWriteByte(tmp1); // Запись старш. байта регистра
SpiWriteByte(tmp2); // Запись младш. байта регистра
PORTB|=BIT(4); // CS установить в 1
// Подготавливаем данные, получаем два 2-х байтовых числа
h1=( 0x4000 | ( L & 0x3FFF ) );
h2=( 0x4000 | ( ( L >> 14 ) & 0x3FFF ) );
//Преобразование unsigned_int в 2 байта и запись AD9834
tmp1=(unsigned char)((h1>>8)& 0xFF);
tmp2=(unsigned char)((h1)& 0xFF);
//Записываем старшие данные частоты
PORTB&=~BIT(4); // CS установить в 0
SpiWriteByte(tmp1); // Запись байта данных
SpiWriteByte(tmp2); // Запись байта данных
PORTB|=BIT(4); // CS установить в 1
NOP();
//Преобразование unsigned_int в 2 байта и запись AD9834
tmp1=(unsigned char)((h2>>8)& 0xFF);
tmp2=(unsigned char)((h2)& 0xFF);
//Записываем младшие байты данных частоты
PORTB&=~BIT(4); // CS установить в 0
SpiWriteByte(tmp1); // Запись байта данных
SpiWriteByte(tmp2); // Запись байта данных
PORTB|=BIT(4); // CS установить в 1
NOP();
// Пишем в регистр контроля 0х2000
tmp1=(unsigned char)((AD_Control2>>8)& 0xFF);
tmp2=(unsigned char)((AD_Control2)& 0xFF);
PORTB&=~BIT(4); // CS установить в 0
SpiWriteByte(tmp1); // Запись старш. байта регистра
SpiWriteByte(tmp2); // Запись младш. байта регистра
PORTB|=BIT(4); // CS установить в 1
// Частота установлена, конец функции
}

void main(void)
{
NOP();
F_YST();
while(1)
{
NOP();
NOP();
}
}

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru