Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
02.03.2012, 07:11
|
|
Прописка
Регистрация: 17.02.2012
Сообщений: 109
Сказал спасибо: 10
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
UART + atmega32
Пытаюсь разобраться с работой амтеги32 с uart'ом. Для теста хочу лишь чтобы мк ответил в боле менее приличном виде. Однако на самый простой код (хотя я не совсем понял зачем нужен файл uart.h) в терминале вижу сообщение в шестнадцатеричном виде причем, только если в программе ставлю на си ставлю цифры. На два нуля в качестве ответа (Send_char) и пустой символ получаю нули в терминале(00 00 00 00 00), а на цифры 1 2 и пустой символ вижу (80 00 00 00 00). Если поставить в коде программы послать буквы, то в терминале будут кракозябры. Скорость 9600 бод при частоте мк в 8 МГц. За разъяснения по коду или более простой код буду благодарен(просто комменты по всему коду поподробнее, если кто может).
|
|
|
|
02.03.2012, 10:32
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: UART + atmega32
Скорости не совпадают. Что с фузом CKDIV8
|
|
|
|
02.03.2012, 10:40
|
|
Вид на жительство
Регистрация: 14.06.2009
Адрес: Україна Київська обл. м.Буча
Сообщений: 327
Сказал спасибо: 104
Сказали Спасибо 105 раз(а) в 69 сообщении(ях)
|
Re: UART + atmega32
Первое, что бросилось в глаза. Если вы установили прерывание по RX, то зачем в основном цикле проверяете буфер приема. В прерывании установите флаг, а в основном цикле просто считайте приемный буфер.
|
|
|
|
02.03.2012, 16:40
|
|
Прописка
Регистрация: 17.02.2012
Сообщений: 109
Сказал спасибо: 10
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: UART + atmega32
fuse ckdiv8 равен 1, т.е. не установлен. Скорости совпадают, перепроверил.
|
|
|
|
03.03.2012, 21:07
|
|
Прописка
Регистрация: 17.02.2012
Сообщений: 109
Сказал спасибо: 10
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: UART + atmega32
Ну поигрался со скоростью поставил 1200 и ура он стал выдавать адекватные буквы, вот только если я посылаю на комп abc в терминале выдается два раза abcabc. А вот зачем контролировать фьюзы? Я поставил все фьюзы по 1, т.е. не установлены. Тактирую от внешнего кварца на 8Мгц. Подскажите каким образом нужно контролировать фьюзы в данном случае и нужно ли вообще.
|
|
|
|
03.03.2012, 21:13
|
|
Почётный гражданин KAZUS.RU
Регистрация: 30.09.2006
Сообщений: 1,560
Сказал спасибо: 158
Сказали Спасибо 661 раз(а) в 431 сообщении(ях)
|
Re: UART + atmega32
А что в даташите написано по поводу фьюзов и внешнего кварца?
|
|
|
|
03.03.2012, 23:46
|
|
Прописка
Регистрация: 17.02.2012
Сообщений: 109
Сказал спасибо: 10
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: UART + atmega32
Ну если все фьюзы единички, то кварц от 3 до 8МГц берется внешний. Ну я так и сделал, светодиод мигал нормально. Теперь с уартом не понимаю где в коде косяк. Почему если я указываю в коде отправить буквы АБВ, то он присылает их как АБВАБВ? Правда стоит отметить, что CVAVR выдает предупреждения, что типа переопределены значения RXCIE, SUBZ0 и т.п.
|
|
|
|
04.03.2012, 01:50
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: UART + atmega32
Посмотрел файлы.
Вряд ли в этом дело, но так:
Код:
|
UBRRH = 0;
UBRRL = 51; //скорость обмена 9600 бод |
неправильно.
Надо так (могу ошибаться, сверьтесь с ДШ):
Код:
|
UBRRL = 51; //скорость обмена 9600 бод
UBRRH = 0; |
|
|
|
|
04.03.2012, 02:27
|
|
Почётный гражданин KAZUS.RU
Регистрация: 30.09.2006
Сообщений: 1,560
Сказал спасибо: 158
Сказали Спасибо 661 раз(а) в 431 сообщении(ях)
|
Re: UART + atmega32
в чем разница в этих двух записях? =)
Судя по вопросам про фьюзы, контроллер сейчас тактируется от внутреннего генератора 1 МГц по дефолту, отсюда и проблемы со скоростью.
|
|
|
|
04.03.2012, 14:21
|
|
Прописка
Регистрация: 17.02.2012
Сообщений: 109
Сказал спасибо: 10
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: UART + atmega32
По даташиту если фьюзы все поставить по 1, то контроллер тактируется от внешнего генератора.
Скорость обмена данными определяется содержимым регистра UBRR. Это 12 разрядный регистр и он физически размещается в двух регистрах ввода/вывода - UBRRH:UBRRL(даже если в одном для атмеги32). Скорость обмена выбирается из ряда стандартных значений, в нашем примере она равна 9600 бод. Значение UBRR для обычного асинхронного режима (есть еще асинхронный режим с удвоенной скоростью обмена) вычисляется по формуле:
UBRR = (Fck/(16*BAUD)) – 1
где Fck – тактовая частота микроконтроллера, BAUD скорость обмена в бодах
Последний раз редактировалось kruftin; 04.03.2012 в 14:25.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Прошивка atmega32
|
kruftin |
Микроконтроллеры, АЦП, память и т.д |
10 |
17.02.2012 17:22 |
Atmega32 и энкодер
|
Pevek80 |
Микроконтроллеры, АЦП, память и т.д |
21 |
06.03.2011 20:46 |
Atmega32 и LCD
|
DEJL1985 |
Делимся опытом |
8 |
20.06.2010 14:35 |
ATmega32
|
NCy |
Микроконтроллеры, АЦП, память и т.д |
20 |
28.04.2007 00:44 |
Внутренее АЦП в ATmega32
|
Ztman |
Микроконтроллеры, АЦП, память и т.д |
0 |
25.04.2007 22:51 |
Часовой пояс GMT +4, время: 07:30.
|
|