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

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

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

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

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

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

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

 
Опции темы

UART + atmega32

Непрочитано 02.03.2012, 07:11  
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  
niXto
Почётный гражданин KAZUS.RUN
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: UART + atmega32

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

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

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

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

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

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

в чем разница в этих двух записях? =)
Судя по вопросам про фьюзы, контроллер сейчас тактируется от внутреннего генератора 1 МГц по дефолту, отсюда и проблемы со скоростью.
Ara41 вне форума  
Непрочитано 04.03.2012, 14:21  
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, время: 18:22.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.