Мелкие вопросы по МК и ПЛИС.
Re: Мелкие вопросы по МК и ПЛИС.
Вопрос по прерываниям. Прерывания только начал юзать. Стоит вектор прерывания на переполнения таймера и при выполнении прерывания небольшой код. В мэйне идет настройка портов итд, затем настройка таймера (таймер T0 настроен на 1 секунду) затем идет разрешение всех прерываний SEI а после него цыкл while с небольшим кодом. Так вот как только я разрешаю все прерывания проц тупо теряется и перестает дальше "думать" в итоге таймер отбивает каждую секунду но проц не возвращается назад в то место где закончил работать. Гдето читал что нужно правильно выходить из прерывания чтобы продолжить работу с тогоже места командой RET или RETI. Когда ставлю RETI в конце обработки прерывания срабатывает пес и перезагружает камень. Как мне сделать чтобы после включения всех прерываний проц продолжил свой основной цыкл программы?
Среда: 4-я студия, Камень: Мега8
Среда: 4-я студия, Камень: Мега8
Шуруп забитый молотком держится намного лучше чем гвоздь закрученный отверткой!
- КРАМ
- Друг Кота
- Сообщения: 25149
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Мелкие вопросы по МК и ПЛИС.
Может Вам код привести?

Re: Мелкие вопросы по МК и ПЛИС.
Тут значит у меня обработчик прерывания:
А тут у меня основной цикл:
Когда программа доходит до SEI то дальше не идет в цыкл While и не считает переменную clock, происходят прерывания по вектору а ленивый процессор тупо отдыхает и нехочет ничего делать
Еще прошу заметить что я поставил задержку в 1 секунду перед тем как инициализировать таймер так как в этот момент происходит заливка экрана и если задержку не поставить то даже заливка не доходит до конца
Код: Выделить всё
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: Мелкие вопросы по МК и ПЛИС.
Выбросить cli нафиг.
Убрать вывод всей текстовки (работу с дисплеем) из обработчика.
В обработчике ТОЛЬКО поднимать флаг, типа Ready = 1;
В теле основной программы сделать блок по if(Ready) и выполнять все ваши печати-выводы. В конце блока сбросить флаг готовности. Reday = 0;
Ready модифицируется в прерывании, сделайте его volatile.
Вы бы глянули листинг дизасма, что там у вас в стек прячется, при входе в подобный вашему обработчик. Похоже, все регистры и все применяемые переменные. Вызов внешних функций, которые, наверняка еще вызывают какие-то функции. Одумайтесь. Первая заповедь начинающего кодера (ну, не знаю какого...) - обработчик должен быть максимально кратким (не по количеству написанных строк). Си очень гибкая система. Можно в двух строках понаписывать такого, что на ассемблере это будет Анна Каренина в трех томах...
Убрать вывод всей текстовки (работу с дисплеем) из обработчика.
В обработчике ТОЛЬКО поднимать флаг, типа Ready = 1;
В теле основной программы сделать блок по if(Ready) и выполнять все ваши печати-выводы. В конце блока сбросить флаг готовности. Reday = 0;
Ready модифицируется в прерывании, сделайте его volatile.
Вы бы глянули листинг дизасма, что там у вас в стек прячется, при входе в подобный вашему обработчик. Похоже, все регистры и все применяемые переменные. Вызов внешних функций, которые, наверняка еще вызывают какие-то функции. Одумайтесь. Первая заповедь начинающего кодера (ну, не знаю какого...) - обработчик должен быть максимально кратким (не по количеству написанных строк). Си очень гибкая система. Можно в двух строках понаписывать такого, что на ассемблере это будет Анна Каренина в трех томах...
С уважением,
Виктор.
Виктор.
Re: Мелкие вопросы по МК и ПЛИС.
ut1wpr, спасибо большое. Вынес код за пределы обработчика и все заработало как положено 

Шуруп забитый молотком держится намного лучше чем гвоздь закрученный отверткой!
- КРАМ
- Друг Кота
- Сообщения: 25149
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Мелкие вопросы по МК и ПЛИС.
Это было типа "несколько команд" в обработчике???

Re: Мелкие вопросы по МК и ПЛИС.
Да я уже понял свою ошибку. Та функция put_string далее из под себя вызывает put_char которая в свою очередь вызывает функции LCD_SendCommand, LCD_SendData8, LCD_SendData16 а те в свою очередь SPI_SendData... А я сижу и жду пока проц расчухается и вспомнит что его еще и основной цикл ждет
Спасибо. Кстати меня удивило когда я добавил в каждом цыкле дергание всех ног 1 и 0 и увидел на ЛСД экране показания в 288 кГц при 8 мГц тактирования... Собираю генератор прямоугольника чтоб частоту показывал и расчитывал с трудом выжать 50 кГц а тут аж 288)))
Шуруп забитый молотком держится намного лучше чем гвоздь закрученный отверткой!
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Может просто у вас формула подсчета неправильная, как и пара команд в обработчике?
В поисках истины человек развивается.
-
mr.boroda
- Встал на лапы
- Сообщения: 124
- Зарегистрирован: Вт июл 10, 2012 00:13:27
- Откуда: Белгородская обл.
Re: Мелкие вопросы по МК и ПЛИС.
Какая то проблема с питанием...
тини2313+дс18б20+индикатор на 4 сегмента
выводит с датчика температуру на индикатор.
На питании стоит стабилизатор лм7805
При работе от батареек 3или4шт по 1,5в - работает норм.
При работе от гелевого акб 6в, 5а\ч начинается бред на индикаторе и к конце концов светится 1 сегмент
Что может быть?
тини2313+дс18б20+индикатор на 4 сегмента
выводит с датчика температуру на индикатор.
На питании стоит стабилизатор лм7805
При работе от батареек 3или4шт по 1,5в - работает норм.
При работе от гелевого акб 6в, 5а\ч начинается бред на индикаторе и к конце концов светится 1 сегмент
Что может быть?
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Мелкие вопросы по МК и ПЛИС.
mr.boroda писал(а):Что может быть?
Маловато входное для динозавра 7805. АКБ может просаживается...
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
-
mr.boroda
- Встал на лапы
- Сообщения: 124
- Зарегистрирован: Вт июл 10, 2012 00:13:27
- Откуда: Белгородская обл.
Re: Мелкие вопросы по МК и ПЛИС.
Gudd-Head писал(а):mr.boroda писал(а):Что может быть?
Маловато входное для динозавра 7805. АКБ может просаживается...
Так а батарейки ж не просаживаются...
аккум 6в - не работает
батарейки 4,5в - работает
может высокий ток?
На сегментах индикатора не висят резисторы
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Мелкие вопросы по МК и ПЛИС.
mr.boroda писал(а):батарейки 4,5в - работает
4,5 В + 7805 и работает?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Мелкие вопросы по МК и ПЛИС.
Ребята, учитесь!mr.boroda писал(а):аккум 6в - не работает
батарейки 4,5в - работает
может высокий ток?
При таких вопросах такой успешный бизнес!
Помогите человеку в его бизнесе! У него из инкубаторов на батарейках не то вылупляется.Продаю, прошиваю устройства на МК AVR. http://hdevice.moy.su/
Авометр вам в помощь! И закон Ома.
И не повторяйте больше в порядочном обществе фразы "высокий ток". Вызывает недопонимание (в лучшем случае).
ЗЫ
И заказывают?!Возможна разработка устройст на базе AVR конкретно для ваших целей по вашему техническому заданию
С уважением,
Виктор.
Виктор.
Re: Мелкие вопросы по МК и ПЛИС.
vitalik_1984, почему это неправильная? В основном цикле идет счет переменной плюс дергание ног а таймер раз в секунду проверяет сколько насчиталось в переменной, выводит на экран и сбрасывает в ноль. Правда если честно то полный период происходит за два цыкла (1 и 0) такчто 288 кГц нужно разделить на 2 а так все верно. Далее поставлю кварц на 24 мГц и можно не парится что частота будет низкой
mr.boroda, питание от батареек без кренки а с акумом через кренку я правильно понял? в любом случае для нормальной работы кренки нужно на входе вольт 8 хотябы не меньше. 6 вольт для 7805 маловато будет. Померяй тестером выход с кренки. Насчет высокого тока это смешно. Сначала напряжения все померяй а потом вопросы задавай
mr.boroda, питание от батареек без кренки а с акумом через кренку я правильно понял? в любом случае для нормальной работы кренки нужно на входе вольт 8 хотябы не меньше. 6 вольт для 7805 маловато будет. Померяй тестером выход с кренки. Насчет высокого тока это смешно. Сначала напряжения все померяй а потом вопросы задавай
Шуруп забитый молотком держится намного лучше чем гвоздь закрученный отверткой!
- КРАМ
- Друг Кота
- Сообщения: 25149
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Мелкие вопросы по МК и ПЛИС.
Стабилизаторы типа КРЕНа бывают разные. Обычным нужно, чтобы ПАДЕНИЕ НАПРЯЖЕНИЯ МЕЖДУ ВХОДОМ И ВЫХОДОМ было не менее 2,5 вольта, а некоторым достаточно и 0,5 вольт. А есть такие, которым достаточно 50 мВ...
Re: Мелкие вопросы по МК и ПЛИС.
КРАМ, речь идет о 7805, ей 6 вольт мало будет
Шуруп забитый молотком держится намного лучше чем гвоздь закрученный отверткой!
- КРАМ
- Друг Кота
- Сообщения: 25149
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Мелкие вопросы по МК и ПЛИС.
Ей нужно минимум 7,5 вольт на входе с учетом пульсаций.
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Ладно, хорошо убедил, только таким образом частота плавать будет.Лучше уж тогда ничего не считать, а просто по таймеру инвертировать выход нужный и все.Частота стабильнаяЗукс писал(а): В основном цикле идет счет переменной плюс дергание ног а таймер раз в секунду проверяет сколько насчиталось в переменной, выводит на экран и сбрасывает в ноль.
будет.
Зукс писал(а):
Правда если честно то полный период происходит за два цыкла (1 и 0) такчто 288 кГц нужно разделить на 2 а так все верно.
Это точно, только период не за два цикла, а за два такта проходит.Смена в 1 и смена в 0.
Просто так как вы сказали неясно что имели в виду
Можно поставить, а что у вас за контроллер?Как то не встречал AVR на частоту больше 20 МГц.У тини максимум 20 у мег 16.Зукс писал(а):
Далее поставлю кварц на 24 мГц и можно не парится что частота будет низкой
Еще вопрос устройство ваше будет питаться от аккумулятора?Если да, то нужно подумать о высоком потреблении на такой частоте и еще об активации спящего режима.
В поисках истины человек развивается.
Re: Мелкие вопросы по МК и ПЛИС.
Это точно, только период не за два цикла, а за два такта проходит.Смена в 1 и смена в 0.
Просто так как вы сказали неясно что имели в виду
У меня цыкл while при первом проходе цыкла на порт идет 1 а при втором 0 далее повторяется. Тактов там не два а больше намного поэтому так и написал
Ладно, хорошо убедил, только таким образом частота плавать будет.Лучше уж тогда ничего не считать, а просто по таймеру инвертировать выход нужный и все.Частота стабильная
будет.
Насчет таймера сейчас думаю но выход у меня вручную будет через порт а не через выход OC1 так как выхода будет два и они будут переключатся с небольшой паузой между собой (это нужно для того чтобы емкость в затворе полевиков правильно передергивать)
Можно поставить, а что у вас за контроллер?Как то не встречал AVR на частоту больше 20 МГц.У тини максимум 20 у мег 16.
Еще вопрос устройство ваше будет питаться от аккумулятора?Если да, то нужно подумать о высоком потреблении на такой частоте и еще об активации спящего режима.
Мега8 20-ти мегагерцовая. Некоторые ее разгоняли под 30 мГц и она работала стабильно. И у мег по даташиту не 16 а 20 мГц но они хорошо разгоняются
Устройство питается от блока питания через кренку. спящий режим можно будет использовать только если генерация будет идти через таймер. Ито врядли я его буду использовать. Для входа в спящий режим нужно 4 тактовых импульса, для выхода столькоже. На высоких частотах генерации я не смогу себе этого позволить
И еще. Кварц на 24 уже стоит, мега на нем работает и выдает импульсы но вот экран пока не запускается с этим кварцем
Шуруп забитый молотком держится намного лучше чем гвоздь закрученный отверткой!
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Зукс писал(а):Мега8 20-ти мегагерцовая. Некоторые ее разгоняли под 30 мГц и она работала стабильно.
У вас похоже какой то китайский экземпляр наподобие айфона с телевизором
Зукс писал(а):
И у мег по даташиту не 16 а 20 мГц
Блин а мужики то не знали
atmega8
В поисках истины человек развивается.