Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 23.07.2010
Сообщений: 75
1

ATmega 64 и цап TLC5615. Непонятки в программе.

05.01.2011, 14:02. Показов 3263. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго всем времени суток. Не хотел создавать данную тему т.к. мне говорили что данный вопрос обсуждался на
этом форуме не раз, однако читая форум ответ на свой вопрос я не получил. Так что прошу меня извинить за повторяемость тем. И так к делу. Есть цап TLC5615 и кнопка которая подключена к ногу ИНТ0. По нажатию конпки
происходит прерывание, в прерывании происходит увеличение переменной потом значение из этой переменной посылается на цап и на выходе цап должно увеличиваться напряжение. Вот код для данного случая:
Код
#include<iom64.h>
#include<inavr.h>

#define SetByt(x,y) (x|=y)
#define ClrByt(x,y) (x&=~y)
#define TestByt(x,y) (x&y)

#define SPI_PORT     PORTB
#define SS_DAC        0x10

unsykned int a=0;
unsykned char HB=0, LB=0;

void init_uart(void)
{
UBRR1L=71;               //9600 speed
UCSR1C=134;             //asymsh mode,  one stop bit, 8 bit data
UCSR1B=0x08;
}

void trans_data(unsykned char b)
{
while(!(UCSR1A&(1<<5)));
UDR1=b;
}

void init_spi(void)
{
//SPI init
DDRB=0x17; //SS out; SCK out; MOSI out; MISO in;  00010111
SetByt(SPI_PORT,SS_DAC);
//SPCR = ((1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0));
SPCR = ((1<<SPE)|(1<<MSTR));
}

void write_to_DAC(unsykned int n)
{
ClrByt(SPI_PORT,SS_DAC);
//first byte
SPDR=(unsykned char)(0x000F&(n>>6));
while (!(SPSR &(1<<SPIF)));

//second byte
SPDR=(unsykned char)(0x00FC&(n<<2));
while (!(SPSR &(1<<SPIF)));
SetByt(SPI_PORT,SS_DAC);
__delay_cycles(110);
}

void main(void)
{
unsykned int a;
init_spi();
write_to_DAC(0);
init_uart();
DDRD=0;
PORTD=0;
EICRA=3;
EIMSK=1;
SREG|=(1 << 7);
while(1);
}

#pragma vector = INT0_vect
__interrupt void flashing()
{
а=a+5;
if (a>1023)
{
a=0;
}
HB=(unsykned char)(a >> 8);
LB=(unsykned char)(a & 0xff);
trans_data(0x64);
trans_data(HB);
trans_data(LB);
trans_data(0x65);
write_to_DAC(a);
}
Однако глобальная переменая а постоянно сбрасывается и как результат напряжение на выходе цап тоже постоянно сбрасывается.

Переписал программу слудующим образом:
Код
#include<iom64.h>
#include<inavr.h>

#define SetByt(x,y) (x|=y)
#define ClrByt(x,y) (x&=~y)
#define TestByt(x,y) (x&y)

#define SPI_PORT     PORTB
#define SS_DAC        0x10

unsykned int flag=0;
//unsykned char HB=0, LB=0;

void init_uart(void)
{
UBRR1L=71;               //9600 speed
UCSR1C=134;             //asymsh mode,  one stop bit, 8 bit data
UCSR1B=0x08;
}

void trans_data(unsykned char b)
{
while(!(UCSR1A&(1<<5)));
UDR1=b;
}

void init_spi(void)
{
//SPI init
DDRB=0x17; //SS out; SCK out; MOSI out; MISO in;  00010111
SetByt(SPI_PORT,SS_DAC);
//SPCR = ((1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0));
SPCR = ((1<<SPE)|(1<<MSTR));
}

void write_to_DAC(unsykned int n)
{
ClrByt(SPI_PORT,SS_DAC);
//first byte
SPDR=(unsykned char)(0x000F&(n>>6));
while (!(SPSR &(1<<SPIF)));

//second byte
SPDR=(unsykned char)(0x00FC&(n<<2));
while (!(SPSR &(1<<SPIF)));
SetByt(SPI_PORT,SS_DAC);
__delay_cycles(110);
}

void main(void)
{
unsykned int a;
init_spi();
write_to_DAC(0);
init_uart();
DDRD=0;
PORTD=0;
EICRA=3;
EIMSK=1;
SREG|=(1 << 7);
a=0;
while(1)
{
if(flag==1)
{
a=a+5;
write_to_DAC(a);
flag=0;
}
}
}

#pragma vector = INT0_vect
__interrupt void flashing()
{
flag=1;
}
И всё заработало т.е при нажатии кнопки напряжение на выходе цап начало увеличиваться как я и хотел
Объясните пожалуйста почему в первом случае сбрасывается переменная а? Ведь изменение её происходит только
вот тут а=a+5; и при вызове функии write_to_DAC(a); фактический параметр передаётся по значению т.е. значение переменной не должно изменяться.
Пишу в ИАР оптимизация не включена.
Зарание всем ответившим спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.01.2011, 14:02
Ответы с готовыми решениями:

АЦП-ЦАП в ATmega или вопросы новичка :)
Сразу к делу- нужно собрать девайс, на вход которого подавалось бы 2 аналоговых сигнала (2...

1с 8.2 Непонятки в программе
В общем сделал я ФормуЭлемента, на этой Форме есть несколько кнопок и каждая кнопка открывает excel...

Непонятки в программе
/*Дан двухмерный массив целых чисел. В третьей строке имеются элементы, равные нулю. Определить...

Макетная плата для Atmega 32?atmega 8
Здравствуйте !Уважаемые мастера нужна помощь (а именно нужна схема макетной платы для меги 32 и...

ЦАП
как формируется пороговое напряжение на выходе ЦАП?

0
05.01.2011, 14:02
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.01.2011, 14:02
Помогаю со студенческими работами здесь

Дешёвый ЦАП
Ищется ЦАП 12-16 разрядов, интерфейс SPI или I2C. Скорость не важна, желателен внутренний ИОН, но...

Многокональный ЦАП
Многокональный ЦАП или как сделать так, что бы RGB светодиоды выдавали разные цвета свечения? ...

ЦАП И АЦП
Цифро-аналоговый преобразователь и аналого-цифровoй преобразователь относятся ли они к цифровой...

посоветуйте цап
день добрый, посоветуйте ЦАП, пожалуйста. примерно такие требования: параллельный вход, 6-8 бит,...

Выбор ЦАП
Здравствуйте.Помогите пожалуйста. Нужно выбрать ЦАП. Суть в том что DD1(задается ключами) должен...

stm32f103c8 цап
сваял себе кое какой девайсик на stm32f103c8 платке. очень нужно чтобы этот девайсик на один пин...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Как добавить пустую директорию в репозиторий Git
bytestream 22.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с ситуацией, когда необходимо сохранить пустую директорию в репозитории. Данная задача может показаться простой на первый. . .
Как валидировать адрес email в JavaScript
bytestream 22.01.2025
JavaScript, как основной язык веб-разработки, предоставляет разработчикам множество инструментов для реализации эффективной валидации email-адресов. От простых встроенных решений до сложных. . .
Как заменить все вхождения подстроки в JavaScript
bytestream 22.01.2025
Строки в JavaScript представляют собой неизменяемые последовательности символов, что делает их обработку особенно интересной с точки зрения оптимизации и выбора правильного подхода к решению задач. . . .
Управление версиями пакетов в Node.js. В чем разница между тильдой (~) и кареткой (^) в package.json
bytestream 22.01.2025
В современной разработке программного обеспечения управление версиями пакетов играет ключевую роль в обеспечении стабильности и надежности проектов. Node. js, как одна из самых популярных платформ для. . .
Аутентификация на сайте с помощью формы
bytestream 21.01.2025
В современном цифровом мире безопасная аутентификация становится краеугольным камнем защиты веб-приложений и пользовательских данных. Каждый день миллионы людей используют различные онлайн-сервисы,. . .
Как получить индекс в цикле for в Python
bytestream 21.01.2025
При работе с коллекциями данных в Python часто возникает необходимость не только получить доступ к элементам последовательности, но и знать их позицию в процессе итерации. Индексация в циклах. . .
Как определить адрес, из которого локальный репозиторий Git был клонирован
bytestream 21.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемой частью рабочего процесса. При работе с Git разработчики часто сталкиваются с необходимостью. . .
Какая разница между операторами == и === в сравнениях в JavaScript
bytestream 21.01.2025
В мире веб-разработки JavaScript занимает особое место как динамический язык программирования, предоставляющий разработчикам широкий набор инструментов для создания интерактивных веб-приложений. . . .
Из чего и как собрать свой домашний кинотеатр
bt_guru 21.01.2025
Создание домашнего кинотеатра: от идеи до реализации В современном мире домашний кинотеатр стал неотъемлемой частью комфортного жилого пространства, предоставляя возможность наслаждаться. . .
Ошибки стиральных машин
bt_guru 21.01.2025
Современные стиральные машины представляют собой сложные электронные устройства, оснащенные множеством датчиков и систем контроля. Они способны самостоятельно определять вес загруженного белья,. . .
Копирование (маппинг) объектов в JavaScript
bytestream 21.01.2025
В современной разработке программного обеспечения копирование объектов представляет собой фундаментальную операцию, которая требует особого внимания и понимания. Маппинг объектов в JavaScript – это. . .
Как работать с Apache Kafka в C# .NET
bytestream 21.01.2025
Apache Kafka представляет собой распределенную платформу потоковой передачи данных, которая произвела революцию в области обработки больших объемов информации в реальном времени. Эта система,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru