Страница 354 из 628
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср авг 29, 2012 17:58:15
Зукс
Вопрос по прерываниям. Прерывания только начал юзать. Стоит вектор прерывания на переполнения таймера и при выполнении прерывания небольшой код. В мэйне идет настройка портов итд, затем настройка таймера (таймер T0 настроен на 1 секунду) затем идет разрешение всех прерываний SEI а после него цыкл while с небольшим кодом. Так вот как только я разрешаю все прерывания проц тупо теряется и перестает дальше "думать" в итоге таймер отбивает каждую секунду но проц не возвращается назад в то место где закончил работать. Гдето читал что нужно правильно выходить из прерывания чтобы продолжить работу с тогоже места командой RET или RETI. Когда ставлю RETI в конце обработки прерывания срабатывает пес и перезагружает камень. Как мне сделать чтобы после включения всех прерываний проц продолжил свой основной цыкл программы?
Среда: 4-я студия, Камень: Мега8
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср авг 29, 2012 18:00:26
КРАМ
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср авг 29, 2012 18:02:56
Зукс
Тут значит у меня обработчик прерывания:
Код: Выделить всё
ISR(TIMER1_COMPA_vect)//îáðàáîò÷èê ïðåðûâàíèÿ ïî ñîâïàäåíèþ À
{
TCNT1H=0;//îáíóëÿåì ðåãèñòð TCNT1
TCNT1L=0;
p = ltoa(clock, buffer, 10);
put_string(0,0, " ", LCD_BLACK, LCD_YELLOW);
put_string(0,0, buffer, LCD_BLACK, LCD_YELLOW);
clock = 0;
cli();
}
А тут у меня основной цикл:
Код: Выделить всё
int main(void)
{
CHAR_W=8;
CHAR_H=14;
InitAVR();
LCD_Init();
LCD_SetOutputRectangle(0,0,131,175);
for(unsigned short n=0;n<132*176;n++) LCD_SetPixel(LCD_YELLOW);
LCD_XY(0,0);
LCD_SetOutputRectangle(0,0,131,175);
_delay_ms(1000);
//DDRB=0x02;//íàñòðàèâàåì OC1A êàê âûõîä
//PORTB=0x00;
//TCCR1A=0x40;//ïðè ñîâïàäåíèè óðîâåíü OC1A ìåíÿåòñÿ íà ïðîòèâîïîëîæíûé
TCCR1B=0x05;//CLK/1024
OCR1AH=0x1E;//çàïèñûâàåì â ðåãèñòð OCR1A 1000
OCR1AL=0x84;
TIMSK = 0x10;//ðàçðåøàåì ïðåðûâàíèå ïî ñîâïàäåíèþ
sei();//ðàçðåøàåì ïðåðûâàíèÿ ãëîáàëüíî
while(1)
{
clock++;
}
return(0);
}
Когда программа доходит до SEI то дальше не идет в цыкл While и не считает переменную clock, происходят прерывания по вектору а ленивый процессор тупо отдыхает и нехочет ничего делать
Еще прошу заметить что я поставил задержку в 1 секунду перед тем как инициализировать таймер так как в этот момент происходит заливка экрана и если задержку не поставить то даже заливка не доходит до конца
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср авг 29, 2012 18:13:16
ut1wpr
Выбросить cli нафиг.
Убрать вывод всей текстовки (работу с дисплеем) из обработчика.
В обработчике ТОЛЬКО поднимать флаг, типа Ready = 1;
В теле основной программы сделать блок по if(Ready) и выполнять все ваши печати-выводы. В конце блока сбросить флаг готовности. Reday = 0;
Ready модифицируется в прерывании, сделайте его volatile.
Вы бы глянули листинг дизасма, что там у вас в стек прячется, при входе в подобный вашему обработчик. Похоже, все регистры и все применяемые переменные. Вызов внешних функций, которые, наверняка еще вызывают какие-то функции. Одумайтесь. Первая заповедь начинающего кодера (ну, не знаю какого...) - обработчик должен быть максимально кратким (не по количеству написанных строк). Си очень гибкая система. Можно в двух строках понаписывать такого, что на ассемблере это будет Анна Каренина в трех томах...
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср авг 29, 2012 18:36:51
Зукс
ut1wpr, спасибо большое. Вынес код за пределы обработчика и все заработало как положено

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср авг 29, 2012 18:52:55
КРАМ
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср авг 29, 2012 18:57:24
Зукс
Да я уже понял свою ошибку. Та функция put_string далее из под себя вызывает put_char которая в свою очередь вызывает функции LCD_SendCommand, LCD_SendData8, LCD_SendData16 а те в свою очередь SPI_SendData... А я сижу и жду пока проц расчухается и вспомнит что его еще и основной цикл ждет

Спасибо. Кстати меня удивило когда я добавил в каждом цыкле дергание всех ног 1 и 0 и увидел на ЛСД экране показания в 288 кГц при 8 мГц тактирования... Собираю генератор прямоугольника чтоб частоту показывал и расчитывал с трудом выжать 50 кГц а тут аж 288)))
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт авг 30, 2012 00:53:28
vitalik_1984
Может просто у вас формула подсчета неправильная, как и пара команд в обработчике?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт авг 30, 2012 10:44:10
mr.boroda
Какая то проблема с питанием...
тини2313+дс18б20+индикатор на 4 сегмента
выводит с датчика температуру на индикатор.
На питании стоит стабилизатор лм7805
При работе от батареек 3или4шт по 1,5в - работает норм.
При работе от гелевого акб 6в, 5а\ч начинается бред на индикаторе и к конце концов светится 1 сегмент
Что может быть?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт авг 30, 2012 10:53:37
Gudd-Head
mr.boroda писал(а):Что может быть?
Маловато входное для динозавра 7805. АКБ может просаживается...
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт авг 30, 2012 11:26:19
mr.boroda
Gudd-Head писал(а):mr.boroda писал(а):Что может быть?
Маловато входное для динозавра 7805. АКБ может просаживается...
Так а батарейки ж не просаживаются...
аккум 6в - не работает
батарейки 4,5в - работает
может высокий ток?
На сегментах индикатора не висят резисторы
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт авг 30, 2012 11:28:33
Gudd-Head
mr.boroda писал(а):батарейки 4,5в - работает
4,5 В + 7805 и работает?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт авг 30, 2012 12:16:46
ut1wpr
mr.boroda писал(а):аккум 6в - не работает
батарейки 4,5в - работает
может высокий ток?
Ребята, учитесь!
При таких вопросах такой успешный бизнес!
Помогите человеку в его бизнесе! У него из инкубаторов на батарейках не то вылупляется.

Авометр вам в помощь! И закон Ома.
И не повторяйте больше в порядочном обществе фразы "высокий ток". Вызывает недопонимание (в лучшем случае).
ЗЫ
Возможна разработка устройст на базе AVR конкретно для ваших целей по вашему техническому заданию
И заказывают?!
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт авг 30, 2012 12:46:44
Зукс
vitalik_1984, почему это неправильная? В основном цикле идет счет переменной плюс дергание ног а таймер раз в секунду проверяет сколько насчиталось в переменной, выводит на экран и сбрасывает в ноль. Правда если честно то полный период происходит за два цыкла (1 и 0) такчто 288 кГц нужно разделить на 2 а так все верно. Далее поставлю кварц на 24 мГц и можно не парится что частота будет низкой
mr.boroda, питание от батареек без кренки а с акумом через кренку я правильно понял? в любом случае для нормальной работы кренки нужно на входе вольт 8 хотябы не меньше. 6 вольт для 7805 маловато будет. Померяй тестером выход с кренки. Насчет высокого тока это смешно. Сначала напряжения все померяй а потом вопросы задавай
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт авг 30, 2012 13:02:36
КРАМ
Стабилизаторы типа КРЕНа бывают разные. Обычным нужно, чтобы ПАДЕНИЕ НАПРЯЖЕНИЯ МЕЖДУ ВХОДОМ И ВЫХОДОМ было не менее 2,5 вольта, а некоторым достаточно и 0,5 вольт. А есть такие, которым достаточно 50 мВ...
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт авг 30, 2012 14:00:38
Зукс
КРАМ, речь идет о 7805, ей 6 вольт мало будет
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт авг 30, 2012 14:29:31
КРАМ
Ей нужно минимум 7,5 вольт на входе с учетом пульсаций.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт авг 30, 2012 23:21:42
vitalik_1984
Зукс писал(а): В основном цикле идет счет переменной плюс дергание ног а таймер раз в секунду проверяет сколько насчиталось в переменной, выводит на экран и сбрасывает в ноль.
Ладно, хорошо убедил, только таким образом частота плавать будет.Лучше уж тогда ничего не считать, а просто по таймеру инвертировать выход нужный и все.Частота стабильная
будет.
Зукс писал(а):
Правда если честно то полный период происходит за два цыкла (1 и 0) такчто 288 кГц нужно разделить на 2 а так все верно.
Это точно, только период не за два цикла, а за два такта проходит.Смена в 1 и смена в 0.
Просто так как вы сказали неясно что имели в виду
Зукс писал(а):
Далее поставлю кварц на 24 мГц и можно не парится что частота будет низкой
Можно поставить, а что у вас за контроллер?Как то не встречал AVR на частоту больше 20 МГц.У тини максимум 20 у мег 16.
Еще вопрос устройство ваше будет питаться от аккумулятора?Если да, то нужно подумать о высоком потреблении на такой частоте и еще об активации спящего режима.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Чт авг 30, 2012 23:41:28
Зукс
Это точно, только период не за два цикла, а за два такта проходит.Смена в 1 и смена в 0.
Просто так как вы сказали неясно что имели в виду
У меня цыкл while при первом проходе цыкла на порт идет 1 а при втором 0 далее повторяется. Тактов там не два а больше намного поэтому так и написал
Ладно, хорошо убедил, только таким образом частота плавать будет.Лучше уж тогда ничего не считать, а просто по таймеру инвертировать выход нужный и все.Частота стабильная
будет.
Насчет таймера сейчас думаю но выход у меня вручную будет через порт а не через выход OC1 так как выхода будет два и они будут переключатся с небольшой паузой между собой (это нужно для того чтобы емкость в затворе полевиков правильно передергивать)
Можно поставить, а что у вас за контроллер?Как то не встречал AVR на частоту больше 20 МГц.У тини максимум 20 у мег 16.
Еще вопрос устройство ваше будет питаться от аккумулятора?Если да, то нужно подумать о высоком потреблении на такой частоте и еще об активации спящего режима.
Мега8 20-ти мегагерцовая. Некоторые ее разгоняли под 30 мГц и она работала стабильно. И у мег по даташиту не 16 а 20 мГц но они хорошо разгоняются
Устройство питается от блока питания через кренку. спящий режим можно будет использовать только если генерация будет идти через таймер. Ито врядли я его буду использовать. Для входа в спящий режим нужно 4 тактовых импульса, для выхода столькоже. На высоких частотах генерации я не смогу себе этого позволить
И еще. Кварц на 24 уже стоит, мега на нем работает и выдает импульсы но вот экран пока не запускается с этим кварцем
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт авг 31, 2012 00:03:11
vitalik_1984
Зукс писал(а):
Мега8 20-ти мегагерцовая. Некоторые ее разгоняли под 30 мГц и она работала стабильно.
У вас похоже какой то китайский экземпляр наподобие айфона с телевизором
Зукс писал(а):
И у мег по даташиту не 16 а 20 мГц
Блин а мужики то не знали
atmega8