0 / 0 / 0
Регистрация: 18.12.2016
Сообщений: 113
|
|
1 | |
UART + таймеры mega802.05.2017, 10:33. Показов 1039. Ответов 14
Метки нет (Все метки)
День добрый! Первая большая программа на Си, не получается запустить в железе.
Опишу вкратце, если необходимо скину код позже. В программе обрабатываются 3 прерывания: UART_Rx, T0_OVF и T1_OVF. Основной режим работы это обработка Т0 и Т1. Когда приходит первый байт в UART, запрещаются прерывания от таймеров и происходит сеанс связи по UART. По окончанию сеанса связи вновь запускаются таймеры. В Proteus'е все крутится. В железе такая ситуация: Отрабатываются прерывания Т0, Т1. На UART не реагирует. Если изменить код и отключить Т0 и Т1, начинает работать UART, т.е. происходит сеанс связи. Как такое может быть? Я понимаю, что "наука имеет много гитек", но может кто-то разъяснит мне, буду премного благодарен.
0
|
02.05.2017, 10:33 | |
Ответы с готовыми решениями:
14
Конфигурация UART и просмотр файла, в который приходят данные с UART Сообщения для 2 UART выводятся в 1 UART, STM32F103C8T6 Два TX UART на один RX. Мультиплексирование UART. Реанимация mega8 |
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
|
|
02.05.2017, 10:49 | 2 |
Код бы выложали, а так только ванговать.
Вангую 1. Не правильно выставлены фузы для тактирования МК 2. Прерывания T0_OVF и T1_OVF содержат слишком много кода (в прерывании код должен быть коротким) РАЗОРВАНА СВЯЗЬ С ИНФОРМАЦИОННОЙ СЕТЬЮ ВСЕЛЕННОЙ !!! Как восстановится напишу еще что нибудь, но код выложите
0
|
0 / 0 / 0
Регистрация: 18.12.2016
Сообщений: 113
|
|
02.05.2017, 11:13 [ТС] | 3 |
1.Выставлял и внутренний 8 MHz, внешний кварц 16. Работает и на 8, и на 16 но по отдельности.
2. В последнем варианте кода в прерываниях устанавливаются только флаги - одна строчка.
0
|
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
|
|
02.05.2017, 11:15 | 4 |
RAR не входит в поставку Windows и его на рабочем компе нет, так что только дома смогу посмотреть.
0
|
0 / 0 / 0
Регистрация: 18.12.2016
Сообщений: 113
|
|
02.05.2017, 11:27 [ТС] | 5 |
ZIP подойдет?
0
|
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
|
|
02.05.2017, 11:42 | 6 |
В первом приближение ошибок не видно.
Вы уверены, что передавая с компа 'b' приходит в МК 'b' ИМХО: попробуйте передать/принять код, а не мнемоническое его определение
0
|
0 / 0 / 0
Регистрация: 18.12.2016
Сообщений: 113
|
|
02.05.2017, 12:02 [ТС] | 7 |
Да в том и дело, что если в программе, в цикле while(1) убираю проверку флагов Т0 и Т1, сеанс связи проходит как миленький, это в железе, а если в Протезе - так и с этими проверками сеанс связи проходит.
0
|
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
|
||||||
02.05.2017, 12:15 | 8 | |||||
Ваш код
Смущает переменная "к" если она достигает 256 как в этом случаи ведет МК, 256 превращается в 0 и далее ...
0
|
0 / 0 / 0
Регистрация: 18.12.2016
Сообщений: 113
|
||||||
02.05.2017, 12:57 [ТС] | 9 | |||||
Это вариант с использованием только Т0, так как при инициализации таймеров Fx/64/256 для Т0, а для Т1 Fx/64/65536,т.е. после 256 прерываний Т0 следует Т1.
Исходный вариант:
0
|
0 / 0 / 0
Регистрация: 18.12.2016
Сообщений: 113
|
|
04.05.2017, 12:17 [ТС] | 10 |
Все оказалось до обидного просто - в обработчике прерывания Т1 была пропущена строчка
Flag_T1 = 0; т.е. после выхода из обработчика снова вызывался обработчик и т.д. Но почему программа реагировала на прерывание от UART при моделировании в Протеусе и не реагировала на него в железе - вот это непонятно.
0
|
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
|
|
04.05.2017, 12:46 | 11 |
как говорил Китайский мудрец "нельзя найти черную кошку в темной комнате, особенно если там её нет"
писал в соседней ветки, но повторюсь. Протеус - УГ
0
|
0 / 0 / 0
Регистрация: 18.12.2016
Сообщений: 113
|
|
04.05.2017, 14:39 [ТС] | 12 |
Что-то я тоже склоняюсь к Вашей мысли о Протеусе. Поморгать диодиками это можно, но что-то посерьезнее...
Давно хочу прикупить себе Dragon. На АлиЭкспрессе не нашел(!), а из России доставка в Киргизию проблемная.
0
|
1978 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
04.05.2017, 15:40 | 13 |
все относительно. Есть специфичные задачи, которые нормально работают в Протеусе. в нем можно отладить очень многие узлы программы, макеты и наброски. Если есть сомнения в том, что Протеус не работает или работает как-то не так - эти узлы программы можно опционально опустить, чтобы дат возможно отладить другие.
0
|
0 / 0 / 0
Регистрация: 18.12.2016
Сообщений: 113
|
|
04.05.2017, 16:13 [ТС] | 14 |
Я не собираюсь ставить полный и безоговорочный крест на Протеусе. Согласен с Voland'ом (моё почтение мессир), есть задачи. Но как мне кажется, отлаживать на железе, находясь в AVR(Atmel) Studio, гораздо быстрее и комфортнее. Правда опыта работы через AVR Dragon не имею, поэтому и не говорю ИМХО.
0
|
1978 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
04.05.2017, 16:39 | 15 |
У протеуса есть один неоспоримый козырь - он все делает задачи реалтайм. Или эмулирует этот реалтайм. В имбеддед часто этого не хватает.
0
|
04.05.2017, 16:39 | |
04.05.2017, 16:39 | |
Помогаю со студенческими работами здесь
15
недопрошилась mega8 Программирование mega8 BLDC на mega8 mega8 and RF 433mhz BootLoader vs mega8 Mega8 и Mega88 mega8 и usb Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |