реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Помогите с симуляцией ATTINY24
Thebat
сообщение Jan 6 2009, 15:36
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 9-01-07
Из: Украина, г. Ровно
Пользователь №: 24 257



Хочу сделать регулятор температуры на АВРке.
В Протэусе сделал набросок схемки пока очень урезаной для отточки програмки.

написал очень маленкую прогу и она глючит в симуляции. Мне просто интересно это глюк Протэуса или моей проги.

вот листинг проги

CODE
void main ()
{
char up ;

int vrem; //CUR_T current temperature
int CUR_T,T_OFF,DELTA; //T_ON - Temperature ON DELTA - Gisteresis

init_portA();
init_portB();
startADC();
up=1;
T_OFF=0x266;
DELTA=0xC1;
vrem=T_OFF-DELTA;

ON();
while ((PINB&0b0001)!=0)
{
CUR_T=readADC();

// ---------- отключения нагревателя -------
if(up==1&&CUR_T>T_OFF)
{
OFF();
up=0;
}
//---------------------------------------------------------------------------

// ---------- Включение -------

// vrem=T_OFF-DELTA; если эту строку оставить в теле цыкла то програма работает
некоректно, если вынести за пределы цыкло то работает нормально.


if(!up&&CUR_T<vrem)
{
ON();
up=1;
}
//---------------------------------------------------------------------------

}
PORTB = 0xFF;

}



Вот файлыПрикрепленный файл  Regulator.zip ( 15.79 килобайт ) Кол-во скачиваний: 96


От модератора.
Пользуйтесь, пожалуйста, штатными тэгами code и codebox для оформления текста исходных кодов. Сообщение отредактировано.
Go to the top of the page
 
+Quote Post
SysRq
сообщение Jan 6 2009, 19:15
Сообщение #2


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Переменные объявлять как unsigned, работы с отрицательными числами у вас вроде нет;
Флаги сбрасываются записью единицы, а не ноля;
ADIF не нужен, достаточно устанавливать и проверять ADSC (см. даташит), раз у вас не используется прерывание;

Нет бесконечного цикла в main(), алгоритм будет работать непредсказуемо, вообще программа построена как-то странно с учетом этого...
Go to the top of the page
 
+Quote Post
Thebat
сообщение Jan 6 2009, 21:50
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 9-01-07
Из: Украина, г. Ровно
Пользователь №: 24 257



Цитата(SysRq @ Jan 6 2009, 21:15) *
Флаги сбрасываются записью единицы, а не ноля;


о каком именно флаге идет речь? стараюсь по даташиту, там в основном говорять или записать "1" иди "0"

цикл почти вечный пока ненажмешь кнопку
Go to the top of the page
 
+Quote Post
SysRq
сообщение Jan 6 2009, 21:57
Сообщение #4


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(Thebat @ Jan 7 2009, 00:50) *
о каком именно флаге идет речь?

ADIF.

Да, забыл написать, что readADC() неверно написана: или надо ждать окончания процесса ац-преобразования и затем считывать, или возвращать условное значение что считывать еще рано. У вас функци возвращает мусор из стека запросто.
Go to the top of the page
 
+Quote Post
Thebat
сообщение Jan 6 2009, 22:14
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 9-01-07
Из: Украина, г. Ровно
Пользователь №: 24 257



Цитата(SysRq @ Jan 6 2009, 23:57) *
ADIF.

Да, забыл написать, что readADC() неверно написана: или надо ждать окончания процесса ац-преобразования и затем считывать, или возвращать условное значение что считывать еще рано. У вас функци возвращает мусор из стека запросто.



Огромное спасибо пока эту функ непоправил мучалься целый день, уже скачал 3 компилятора )))

beer.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01371 секунд с 7
ELECTRONIX ©2004-2016