Страница 354 из 628

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

Добавлено: Ср авг 29, 2012 17:58:15
Зукс
Вопрос по прерываниям. Прерывания только начал юзать. Стоит вектор прерывания на переполнения таймера и при выполнении прерывания небольшой код. В мэйне идет настройка портов итд, затем настройка таймера (таймер T0 настроен на 1 секунду) затем идет разрешение всех прерываний SEI а после него цыкл while с небольшим кодом. Так вот как только я разрешаю все прерывания проц тупо теряется и перестает дальше "думать" в итоге таймер отбивает каждую секунду но проц не возвращается назад в то место где закончил работать. Гдето читал что нужно правильно выходить из прерывания чтобы продолжить работу с тогоже места командой RET или RETI. Когда ставлю RETI в конце обработки прерывания срабатывает пес и перезагружает камень. Как мне сделать чтобы после включения всех прерываний проц продолжил свой основной цыкл программы?
Среда: 4-я студия, Камень: Мега8

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

Добавлено: Ср авг 29, 2012 18:00:26
КРАМ
Может Вам код привести? :dont_know:
:) :wink:

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, спасибо большое. Вынес код за пределы обработчика и все заработало как положено :beer:

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. http://hdevice.moy.su/
Помогите человеку в его бизнесе! У него из инкубаторов на батарейках не то вылупляется. :)
Авометр вам в помощь! И закон Ома.
И не повторяйте больше в порядочном обществе фразы "высокий ток". Вызывает недопонимание (в лучшем случае).
ЗЫ
Возможна разработка устройст на базе 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