Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

Закрытая тема
Опции темы
Непрочитано 02.03.2012, 07:11   #1
kruftin
Прописка
 
Аватар для kruftin
 
Регистрация: 17.02.2012
Сообщений: 109
Сказал спасибо: 10
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
kruftin на пути к лучшему
По умолчанию UART + atmega32

Пытаюсь разобраться с работой амтеги32 с uart'ом. Для теста хочу лишь чтобы мк ответил в боле менее приличном виде. Однако на самый простой код (хотя я не совсем понял зачем нужен файл uart.h) в терминале вижу сообщение в шестнадцатеричном виде причем, только если в программе ставлю на си ставлю цифры. На два нуля в качестве ответа (Send_char) и пустой символ получаю нули в терминале(00 00 00 00 00), а на цифры 1 2 и пустой символ вижу (80 00 00 00 00). Если поставить в коде программы послать буквы, то в терминале будут кракозябры. Скорость 9600 бод при частоте мк в 8 МГц. За разъяснения по коду или более простой код буду благодарен(просто комменты по всему коду поподробнее, если кто может).
Вложения:
Тип файла: txt main.txt (1.0 Кб, 126 просмотров)
Тип файла: txt usartc.txt (940 байт, 125 просмотров)
Тип файла: txt usarth.txt (266 байт, 91 просмотров)
Реклама:
kruftin вне форума  
Непрочитано 02.03.2012, 10:32   #2
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: UART + atmega32

Скорости не совпадают. Что с фузом CKDIV8
niXto вне форума  
Непрочитано 02.03.2012, 10:40   #3
Djakovskij
Вид на жительство
 
Регистрация: 14.06.2009
Адрес: Україна Київська обл. м.Буча
Сообщений: 327
Сказал спасибо: 104
Сказали Спасибо 105 раз(а) в 69 сообщении(ях)
Djakovskij на пути к лучшему
По умолчанию Re: UART + atmega32

Первое, что бросилось в глаза. Если вы установили прерывание по RX, то зачем в основном цикле проверяете буфер приема. В прерывании установите флаг, а в основном цикле просто считайте приемный буфер.
Djakovskij вне форума  
Непрочитано 02.03.2012, 16:40   #4
kruftin
Прописка
 
Аватар для kruftin
 
Регистрация: 17.02.2012
Сообщений: 109
Сказал спасибо: 10
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
kruftin на пути к лучшему
По умолчанию Re: UART + atmega32

fuse ckdiv8 равен 1, т.е. не установлен. Скорости совпадают, перепроверил.
kruftin вне форума  
Непрочитано 03.03.2012, 21:07   #5
kruftin
Прописка
 
Аватар для kruftin
 
Регистрация: 17.02.2012
Сообщений: 109
Сказал спасибо: 10
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
kruftin на пути к лучшему
По умолчанию Re: UART + atmega32

Ну поигрался со скоростью поставил 1200 и ура он стал выдавать адекватные буквы, вот только если я посылаю на комп abc в терминале выдается два раза abcabc. А вот зачем контролировать фьюзы? Я поставил все фьюзы по 1, т.е. не установлены. Тактирую от внешнего кварца на 8Мгц. Подскажите каким образом нужно контролировать фьюзы в данном случае и нужно ли вообще.
kruftin вне форума  
Непрочитано 03.03.2012, 21:13   #6
Ara41
Почётный гражданин KAZUS.RU
 
Регистрация: 30.09.2006
Сообщений: 1,560
Сказал спасибо: 158
Сказали Спасибо 661 раз(а) в 431 сообщении(ях)
Ara41 на пути к лучшему
По умолчанию Re: UART + atmega32

А что в даташите написано по поводу фьюзов и внешнего кварца?
Ara41 вне форума  
Непрочитано 03.03.2012, 23:46   #7
kruftin
Прописка
 
Аватар для kruftin
 
Регистрация: 17.02.2012
Сообщений: 109
Сказал спасибо: 10
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
kruftin на пути к лучшему
По умолчанию Re: UART + atmega32

Ну если все фьюзы единички, то кварц от 3 до 8МГц берется внешний. Ну я так и сделал, светодиод мигал нормально. Теперь с уартом не понимаю где в коде косяк. Почему если я указываю в коде отправить буквы АБВ, то он присылает их как АБВАБВ? Правда стоит отметить, что CVAVR выдает предупреждения, что типа переопределены значения RXCIE, SUBZ0 и т.п.
kruftin вне форума  
Непрочитано 04.03.2012, 01:50   #8
_Артём_
Гражданин 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   #9
Ara41
Почётный гражданин KAZUS.RU
 
Регистрация: 30.09.2006
Сообщений: 1,560
Сказал спасибо: 158
Сказали Спасибо 661 раз(а) в 431 сообщении(ях)
Ara41 на пути к лучшему
По умолчанию Re: UART + atmega32

в чем разница в этих двух записях? =)
Судя по вопросам про фьюзы, контроллер сейчас тактируется от внутреннего генератора 1 МГц по дефолту, отсюда и проблемы со скоростью.
Ara41 вне форума  
Непрочитано 04.03.2012, 14:21   #10
kruftin
Прописка
 
Аватар для kruftin
 
Регистрация: 17.02.2012
Сообщений: 109
Сказал спасибо: 10
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
kruftin на пути к лучшему
По умолчанию Re: UART + atmega32

По даташиту если фьюзы все поставить по 1, то контроллер тактируется от внешнего генератора.
Скорость обмена данными определяется содержимым регистра UBRR. Это 12 разрядный регистр и он физически размещается в двух регистрах ввода/вывода - UBRRH:UBRRL(даже если в одном для атмеги32). Скорость обмена выбирается из ряда стандартных значений, в нашем примере она равна 9600 бод. Значение UBRR для обычного асинхронного режима (есть еще асинхронный режим с удвоенной скоростью обмена) вычисляется по формуле:

UBRR = (Fck/(16*BAUD)) – 1
где Fck – тактовая частота микроконтроллера, BAUD скорость обмена в бодах
Миниатюры:
Нажмите на изображение для увеличения
Название: ds_fuse.JPG
Просмотров: 100
Размер:	46.3 Кб
ID:	32386  

Последний раз редактировалось kruftin; 04.03.2012 в 14:25.
kruftin вне форума  
Закрытая тема

Закладки


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
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, время: 04:55.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot