Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
Зукс
Вымогатель припоя
Сообщения: 564
Зарегистрирован: Чт июл 21, 2011 19:56:10

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Зукс »

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

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение КРАМ »

Может Вам код привести? :dont_know:
:) :wink:
Аватара пользователя
Зукс
Вымогатель припоя
Сообщения: 564
Зарегистрирован: Чт июл 21, 2011 19:56:10

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Зукс »

Тут значит у меня обработчик прерывания:

Код: Выделить всё

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 секунду перед тем как инициализировать таймер так как в этот момент происходит заливка экрана и если задержку не поставить то даже заливка не доходит до конца
Шуруп забитый молотком держится намного лучше чем гвоздь закрученный отверткой!
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ut1wpr »

Выбросить cli нафиг.
Убрать вывод всей текстовки (работу с дисплеем) из обработчика.
В обработчике ТОЛЬКО поднимать флаг, типа Ready = 1;
В теле основной программы сделать блок по if(Ready) и выполнять все ваши печати-выводы. В конце блока сбросить флаг готовности. Reday = 0;
Ready модифицируется в прерывании, сделайте его volatile.
Вы бы глянули листинг дизасма, что там у вас в стек прячется, при входе в подобный вашему обработчик. Похоже, все регистры и все применяемые переменные. Вызов внешних функций, которые, наверняка еще вызывают какие-то функции. Одумайтесь. Первая заповедь начинающего кодера (ну, не знаю какого...) - обработчик должен быть максимально кратким (не по количеству написанных строк). Си очень гибкая система. Можно в двух строках понаписывать такого, что на ассемблере это будет Анна Каренина в трех томах...
С уважением,
Виктор.
Аватара пользователя
Зукс
Вымогатель припоя
Сообщения: 564
Зарегистрирован: Чт июл 21, 2011 19:56:10

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Зукс »

ut1wpr, спасибо большое. Вынес код за пределы обработчика и все заработало как положено :beer:
Шуруп забитый молотком держится намного лучше чем гвоздь закрученный отверткой!
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25151
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение КРАМ »

Это было типа "несколько команд" в обработчике???
:))) :))) :)))
Аватара пользователя
Зукс
Вымогатель припоя
Сообщения: 564
Зарегистрирован: Чт июл 21, 2011 19:56:10

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: Мелкие вопросы по МК и ПЛИС.

Сообщение vitalik_1984 »

Может просто у вас формула подсчета неправильная, как и пара команд в обработчике?
В поисках истины человек развивается.
mr.boroda
Встал на лапы
Сообщения: 124
Зарегистрирован: Вт июл 10, 2012 00:13:27
Откуда: Белгородская обл.

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение mr.boroda »

Какая то проблема с питанием...
тини2313+дс18б20+индикатор на 4 сегмента
выводит с датчика температуру на индикатор.
На питании стоит стабилизатор лм7805
При работе от батареек 3или4шт по 1,5в - работает норм.
При работе от гелевого акб 6в, 5а\ч начинается бред на индикаторе и к конце концов светится 1 сегмент
Что может быть?
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Gudd-Head »

mr.boroda писал(а):Что может быть?

Маловато входное для динозавра 7805. АКБ может просаживается...
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
mr.boroda
Встал на лапы
Сообщения: 124
Зарегистрирован: Вт июл 10, 2012 00:13:27
Откуда: Белгородская обл.

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение mr.boroda »

Gudd-Head писал(а):
mr.boroda писал(а):Что может быть?

Маловато входное для динозавра 7805. АКБ может просаживается...


Так а батарейки ж не просаживаются...
аккум 6в - не работает
батарейки 4,5в - работает
может высокий ток?
На сегментах индикатора не висят резисторы
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Gudd-Head »

mr.boroda писал(а):батарейки 4,5в - работает

4,5 В + 7805 и работает?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ut1wpr »

mr.boroda писал(а):аккум 6в - не работает
батарейки 4,5в - работает
может высокий ток?
Ребята, учитесь!
При таких вопросах такой успешный бизнес!
Продаю, прошиваю устройства на МК AVR. http://hdevice.moy.su/
Помогите человеку в его бизнесе! У него из инкубаторов на батарейках не то вылупляется. :)
Авометр вам в помощь! И закон Ома.
И не повторяйте больше в порядочном обществе фразы "высокий ток". Вызывает недопонимание (в лучшем случае).
ЗЫ
Возможна разработка устройст на базе AVR конкретно для ваших целей по вашему техническому заданию
И заказывают?!
С уважением,
Виктор.
Аватара пользователя
Зукс
Вымогатель припоя
Сообщения: 564
Зарегистрирован: Чт июл 21, 2011 19:56:10

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Зукс »

vitalik_1984, почему это неправильная? В основном цикле идет счет переменной плюс дергание ног а таймер раз в секунду проверяет сколько насчиталось в переменной, выводит на экран и сбрасывает в ноль. Правда если честно то полный период происходит за два цыкла (1 и 0) такчто 288 кГц нужно разделить на 2 а так все верно. Далее поставлю кварц на 24 мГц и можно не парится что частота будет низкой
mr.boroda, питание от батареек без кренки а с акумом через кренку я правильно понял? в любом случае для нормальной работы кренки нужно на входе вольт 8 хотябы не меньше. 6 вольт для 7805 маловато будет. Померяй тестером выход с кренки. Насчет высокого тока это смешно. Сначала напряжения все померяй а потом вопросы задавай
Шуруп забитый молотком держится намного лучше чем гвоздь закрученный отверткой!
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25151
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение КРАМ »

Стабилизаторы типа КРЕНа бывают разные. Обычным нужно, чтобы ПАДЕНИЕ НАПРЯЖЕНИЯ МЕЖДУ ВХОДОМ И ВЫХОДОМ было не менее 2,5 вольта, а некоторым достаточно и 0,5 вольт. А есть такие, которым достаточно 50 мВ...
Аватара пользователя
Зукс
Вымогатель припоя
Сообщения: 564
Зарегистрирован: Чт июл 21, 2011 19:56:10

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Зукс »

КРАМ, речь идет о 7805, ей 6 вольт мало будет
Шуруп забитый молотком держится намного лучше чем гвоздь закрученный отверткой!
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25151
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение КРАМ »

Ей нужно минимум 7,5 вольт на входе с учетом пульсаций.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение vitalik_1984 »

Зукс писал(а): В основном цикле идет счет переменной плюс дергание ног а таймер раз в секунду проверяет сколько насчиталось в переменной, выводит на экран и сбрасывает в ноль.
Ладно, хорошо убедил, только таким образом частота плавать будет.Лучше уж тогда ничего не считать, а просто по таймеру инвертировать выход нужный и все.Частота стабильная
будет.
Зукс писал(а):
Правда если честно то полный период происходит за два цыкла (1 и 0) такчто 288 кГц нужно разделить на 2 а так все верно.

Это точно, только период не за два цикла, а за два такта проходит.Смена в 1 и смена в 0.
Просто так как вы сказали неясно что имели в виду
Зукс писал(а):
Далее поставлю кварц на 24 мГц и можно не парится что частота будет низкой
Можно поставить, а что у вас за контроллер?Как то не встречал AVR на частоту больше 20 МГц.У тини максимум 20 у мег 16.
Еще вопрос устройство ваше будет питаться от аккумулятора?Если да, то нужно подумать о высоком потреблении на такой частоте и еще об активации спящего режима.
В поисках истины человек развивается.
Аватара пользователя
Зукс
Вымогатель припоя
Сообщения: 564
Зарегистрирован: Чт июл 21, 2011 19:56:10

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: Мелкие вопросы по МК и ПЛИС.

Сообщение vitalik_1984 »

Зукс писал(а):Мега8 20-ти мегагерцовая. Некоторые ее разгоняли под 30 мГц и она работала стабильно.

У вас похоже какой то китайский экземпляр наподобие айфона с телевизором :)))
Зукс писал(а):
И у мег по даташиту не 16 а 20 мГц

Блин а мужики то не знали :)))
atmega8
В поисках истины человек развивается.
Ответить

Вернуться в «Разные вопросы по МК»