Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите с симуляцией ATTINY24
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Thebat
Хочу сделать регулятор температуры на АВРке.
В Протэусе сделал набросок схемки пока очень урезаной для отточки програмки.

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

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

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;

}



Вот файлыНажмите для просмотра прикрепленного файла

От модератора.
Пользуйтесь, пожалуйста, штатными тэгами code и codebox для оформления текста исходных кодов. Сообщение отредактировано.
SysRq
Переменные объявлять как unsigned, работы с отрицательными числами у вас вроде нет;
Флаги сбрасываются записью единицы, а не ноля;
ADIF не нужен, достаточно устанавливать и проверять ADSC (см. даташит), раз у вас не используется прерывание;

Нет бесконечного цикла в main(), алгоритм будет работать непредсказуемо, вообще программа построена как-то странно с учетом этого...
Thebat
Цитата(SysRq @ Jan 6 2009, 21:15) *
Флаги сбрасываются записью единицы, а не ноля;


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

цикл почти вечный пока ненажмешь кнопку
SysRq
Цитата(Thebat @ Jan 7 2009, 00:50) *
о каком именно флаге идет речь?

ADIF.

Да, забыл написать, что readADC() неверно написана: или надо ждать окончания процесса ац-преобразования и затем считывать, или возвращать условное значение что считывать еще рано. У вас функци возвращает мусор из стека запросто.
Thebat
Цитата(SysRq @ Jan 6 2009, 23:57) *
ADIF.

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



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

beer.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.