роботы
робототехника
микроконтроллеры
Главная
Как сделать робота
Новости
Спорт
Статьи
Wiki
Форум
Downloads
Ссылки
Контакты  


 Страниц (1): [1]   

> Без описания
Artem
Отправлено: 01 Января, 2013 - 18:08:06
Post Id


Главнокомандующий


Сообщений всего: 347
Дата рег-ции: Май 2012  





написал программу на си, в программе есть место, где на порт подается напряжение и он проводом соединён c reset, получается, что когда программа доходит до этого места она должна как бы самоперезагружаться. так вот вопрос: устройство я пока что не собрал, но мне нужно знать, не приведет ли частое использование сбрасывание через reset к каким-нибудь необратимым последствиям для микроконтроллера.
Заранее спасибо Улыбка
(Добавление)
Попробовал на давно сделаной макетной плате с мк, ничего не работает, почему-то программа не перезагружается, не знаю в чём дело Замешательство
Но возник другой вопрос. Для начала предыстория: Необходимо сделать прерывание по переполнению таймера. Например, основная программа просто включает порт и держит на нём высокий уровень(светодиод горит) затем, после переполнения таймера, в обработчике прерываний программа выключает светодиод и ждёт некоторое время затем поновой.
Но проблема вот в чём: в основной программе всё хорошо, но когда мы переходим в обработчик светодиод гаснет и всё... больше не включается. Я не знаю в чём дело Замешательство
Вот код, если нужно. Написан на си в Win AVR:
# define F_CPU 1000000UL // указываем частоту микроконтроллера в герцах
#include <avr/io.h> // подключаем библиотеку авр
#include <util/delay.h> // подключаем библиотеку прерываний, её мы используем для формирования задержки
#include <avr/interrupt.h> // подключаем библиотеку прерываний

ISR (TIMER1_COMPA_vect)

{

PORTD = 0x00;

_delay_ms(1000);


}

int main(void)

{

DDRD = 0xFF;

TCCR1A = 0x00;

TCCR1B = (1 << CS12)|(0 << CS11)|(1 << CS10)|(1 << WGM12); //предделитель clk/1024, режим таймера СТС

TCNT1 = 0x00;

OCR1A = 10000;

TIMSK |= (1 << OCIE1A); // разрешение прерывания по совпадению

sei(); // Разрешение прерываний

PORTD |=_BV(PD0);

while (1) {}; // Бесконечный цикл

}
 
 Top
Роботов
Отправлено: 01 Января, 2013 - 18:54:10
Post Id



Гуру


Сообщений всего: 1340
Дата рег-ции: Июнь 2011  





Artem пишет:
не приведет ли частое использование сбрасывание через reset к каким-нибудь необратимым последствиям для микроконтроллера
Нет, ничего страшного не произойдет.
А зачем такие сложности? Есть же сторожевой таймер для этих целей...
 
 Top
Predator
Отправлено: 02 Января, 2013 - 20:09:36
Post Id


Гуру


Сообщений всего: 1062
Дата рег-ции: Июль 2012  





ничего страшного от дерганья резета не будет, но по моему проще все эти операции запхать в бесконечный цикл - не будет момента, когда порты не сконфигурированы...
 
 Top
cjA
Отправлено: 02 Января, 2013 - 21:45:10
Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  





Роботов пишет:
Есть же сторожевой таймер для этих целей...
или просто джамп на ноль.
Я не понимаю зачем писать на языке высокого уровня так чтоб было еще непонятнее чем на ассемблере.

Вы его выключили через секунду после старта и больше не включали. Artem, МК не делает ничего о чем Вы его не просили, он же логическая машина, камень, булыжник тупой.
 
 Top
Artem
Отправлено: 03 Января, 2013 - 12:56:23
Post Id


Главнокомандующий


Сообщений всего: 347
Дата рег-ции: Май 2012  





cjA пишет:
Я не понимаю зачем писать на языке высокого уровня так чтоб было еще непонятнее чем на ассемблере.


ассемблер я не знаю Грустный

cjA пишет:
МК не делает ничего о чем Вы его не просили, он же логическая машина, камень, булыжник тупой.


Да, вы правы, я нашёл ошибку, сделал по-другому, всё работает
 
 Top
Страниц (1): [1]
« Обо всем »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown