С Новым годом! Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 18.12.2016
Сообщений: 113
1

UART + таймеры mega8

02.05.2017, 10:33. Показов 1039. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
День добрый! Первая большая программа на Си, не получается запустить в железе.
Опишу вкратце, если необходимо скину код позже.
В программе обрабатываются 3 прерывания: UART_Rx, T0_OVF и T1_OVF. Основной режим работы это обработка Т0 и Т1.
Когда приходит первый байт в UART, запрещаются прерывания от таймеров и происходит сеанс связи по UART.
По окончанию сеанса связи вновь запускаются таймеры. В Proteus'е все крутится.
В железе такая ситуация:
Отрабатываются прерывания Т0, Т1. На UART не реагирует.
Если изменить код и отключить Т0 и Т1, начинает работать UART, т.е. происходит сеанс связи.
Как такое может быть? Я понимаю, что "наука имеет много гитек", но может кто-то разъяснит мне, буду премного благодарен.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.05.2017, 10:33
Ответы с готовыми решениями:

Конфигурация UART и просмотр файла, в который приходят данные с UART
Уважаемые коллеги! Подскажите, пожалуйста, как будет оптимальнее прочитать (скорее залогировать...

Сообщения для 2 UART выводятся в 1 UART, STM32F103C8T6
Почему может неправильно работать uart? Подключил 1 uart к пк через usb/uart переходник, а второй к...

Два TX UART на один RX. Мультиплексирование UART.
Привет, сообщество. Возник небольшой затык. Есть необходимость при одном UART на Atmego32 подавать...

Реанимация mega8
Привет форум. После долгого перерыва (5лет) решил вспомнить работу с мк. Нужно немного...

14
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. В последнем варианте кода в прерываниях устанавливаются только флаги - одна строчка.
Вложения
Тип файла: rar SD_UART.rar (111.5 Кб, 5 просмотров)
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 подойдет?
Вложения
Тип файла: zip SD_UART.zip (119.8 Кб, 8 просмотров)
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
Ваш код
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main(void)
{
    ioinit();
    sei();
    uint8_t k = 0;
    while(1)
    {
        if(Flag_T0 != 0)
        {
            WriteLayer();
            k++;
//          if(k == 0)
//              WriteFrame();
        }   
        if(Flag_Rx != 0)
            UART_Byte();
    }
}
Цитата Сообщение от mihlit Посмотреть сообщение
убираю проверку флагов Т0 и Т1
Т1 не вижу
Смущает переменная "к" если она достигает 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.
Исходный вариант:
C
1
2
3
4
5
6
7
8
9
whille(1)
{
if(Flag_T0 != 0)
             WriteLayer();
          if(Flag_T1 == 0)
              WriteFrame();
        if(Flag_Rx != 0)
            UART_Byte();
}
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
Цитата Сообщение от mihlit Посмотреть сообщение
Все оказалось до обидного просто - в обработчике прерывания Т1 была пропущена строчка
Цитата Сообщение от Витальич Посмотреть сообщение
Т1 не вижу
Цитата Сообщение от mihlit Посмотреть сообщение
Это вариант с использованием только Т0
как говорил Китайский мудрец "нельзя найти черную кошку в темной комнате, особенно если там её нет"
Цитата Сообщение от mihlit Посмотреть сообщение
Но почему программа реагировала на прерывание от UART при моделировании в Протеусе
писал в соседней ветки, но повторюсь. Протеус - УГ
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
Цитата Сообщение от mihlit Посмотреть сообщение
Поморгать диодиками это можно, но что-то посерьезнее...
все относительно. Есть специфичные задачи, которые нормально работают в Протеусе. в нем можно отладить очень многие узлы программы, макеты и наброски. Если есть сомнения в том, что Протеус не работает или работает как-то не так - эти узлы программы можно опционально опустить, чтобы дат возможно отладить другие.
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
Цитата Сообщение от mihlit Посмотреть сообщение
мне кажется, отлаживать на железе, находясь в AVR(Atmel) Studio, гораздо быстрее и комфортнее.
У протеуса есть один неоспоримый козырь - он все делает задачи реалтайм. Или эмулирует этот реалтайм. В имбеддед часто этого не хватает.
0
04.05.2017, 16:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.05.2017, 16:39
Помогаю со студенческими работами здесь

недопрошилась mega8
добрый день. спаял устройство по готовой схеме (чуть-чуть поменял - IR датчик другой) пощупал -...

Программирование mega8
Я новичок, не могу понять как задать условие, что бы при зажатой кнопке, светодиод горел какое то...

BLDC на mega8
помогите с написанием программы,а то принцип понимаю а как отразить в программный код не догоняю....

mega8 and RF 433mhz
Здравствуйте, мужики подскажите, купил на днях mega8 и решил научить её общаться с arduino по 433...

BootLoader vs mega8
Всем привет! Пробую использовать бутлоадер из статьи http://iosyitistromyss.ru/avr-uchebnyj- ......

Mega8 и Mega88
Я особого отличия между этими 2-мя моделями не заметил. Кто с 88 работал, может подскажет в чем...

mega8 и usb
собственно проблема делаю по данной схеме при использовании диодов 1n4148 не работает перемыкаю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru