AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
23.10.2012, 15:57
|
|
Гражданин KAZUS.RU
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
|
Программный UART для Mega8. Проблемы
Необходимо сделать программный UART на Mega8. Так как делаю его первый раз то за основу взял пример для МК Mega16 .
В CV создал проект для Mega8 ,вставил исходники программного UART для Mega16. Скомпилировал. Запустил в PROTEUS все работает. Но в примере программного UART для M16 были настройки для кварца 16 МГц и скорости 4800. А мне на Mega8 нужна скорость 9600 и кварц 110592 ( так как хочу использовать и аппаратный UART) . Первое что я сделал поменял скорость на нужную мне 9600 вместо 4800, проверил в Proteus , все работает нормально. Затем решил в настройках поставить кврац нужной мне частоты 11.0592 Мгц. Запустил в Proteus и тут началась фигня, UART начал передавать кашу. В чем проблема я не пойму, то ли это глючит Proteus, или я где-то ступил.
Посмотрите кто может, что не так, файлы для CV и Proteusa прикрепил .
Последний раз редактировалось Zemlyanov; 23.10.2012 в 15:59.
|
|
|
|
23.10.2012, 16:03
|
|
Гражданин KAZUS.RU
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
|
Re: Программный UART для Mega8 .Проблемы
Настройки UART находятся в заголовочном файле softuart.h
Код:
|
//______________________Настройки___________________ __________________
#ifndef F_CPU
#define F_CPU 16000000L //тактовая частота мк
#endif
#define PRESCALER 64L //прескалер таймера.
#define BAUD_RATE 9600L //скорость обмена
#define IN_BUF_SIZE 32 //вместимость приемного буфера
//пин приемника
#define RX_PINX PIND
#define RX_PORTX PORTD
#define RX_DDRX DDRD
#define RX_PIN 7
//пин передатчика
#define TX_PORTX PORTD
#define TX_DDRX DDRD
#define TX_PIN 6 |
|
|
|
|
28.10.2012, 17:24
|
|
Гражданин KAZUS.RU
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
|
Re: Программный UART для Mega8 .Проблемы
Ну что ,никто не подскажет в чем проблема ? Куда смотреть, почему с кварцем 16мгц на скорости 9600 проблем нет а с кварцем 11.0592 мгц есть. Что править, куда смотреть, реально ли вообще при моем кварце передавать данные с такой скорость?
|
|
|
|
28.10.2012, 18:01
|
|
Почётный гражданин KAZUS.RU
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,140
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
|
Re: Программный UART для Mega8 .Проблемы
Сообщение от Zemlyanov
|
#define F_CPU 16000000L
|
Замените на
Код:
|
#define F_CPU 11059200L |
|
|
|
|
28.10.2012, 18:08
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,981
Сказал спасибо: 0
Сказали Спасибо 4,939 раз(а) в 2,369 сообщении(ях)
|
Re: Программный UART для Mega8 .Проблемы
Zemlyanov,
а в железе что? проверьте константы, рассчитываемые CV для разных кварцев и сравните
|
|
|
|
28.10.2012, 18:10
|
|
Гражданин KAZUS.RU
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
|
Re: Программный UART для Mega8 .Проблемы
Да это я менял. Я уже все что можно поменял. Сперва думал что Proteus глючит . Но в железе тоже самое. Мне кажется что тут дело с расчетом значения для таймера и частотой кварца.
Вот расчет для таймера
Код:
|
#define TIMER_CONST (0xff - (F_CPU/(BAUD_RATE*3*PRESCALER)))
#if PRESCALER==1L
#define CSXX (0‹‹CS02)|(0‹‹CS01)|(1‹‹CS00)
#elif PRESCALER==8L
#define CSXX (0‹‹CS02)|(1‹‹CS01)|(0‹‹CS00)
#elif PRESCALER==64L
#define CSXX (0‹‹CS02)|(1‹‹CS01)|(1‹‹CS00)
#elif PRESCALER==256L
#define CSXX (1‹‹CS02)|(0‹‹CS01)|(0‹‹CS00)
#elif PRESCALER==1024L
#define CSXX (1‹‹CS02)|(1‹‹CS01)|(1‹‹CS00) |
|
|
|
|
28.10.2012, 18:11
|
|
Гражданин KAZUS.RU
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
|
Re: Программный UART для Mega8 .Проблемы
Таймер генерирует прерывания, соответствующие интервалам передачи одного бита данных (104 мкс) при скорости обмена 9600 бит/с.
|
|
|
|
28.10.2012, 18:45
|
|
Почётный гражданин KAZUS.RU
Регистрация: 30.09.2006
Сообщений: 1,560
Сказал спасибо: 158
Сказали Спасибо 661 раз(а) в 431 сообщении(ях)
|
Re: Программный UART для Mega8 .Проблемы
Если переставить частоту на 11,0592 МГц, то можно поглядеть в дебагере, что ложится в TCNT0. Для этой частоты получается FA, т.е. FF-FA==5.
А в соответствии с формулой 11059200/(9600*3*64)==6. Небольшая нестыковка. Попробуйте поправить для своей частоты формулу на:
#define TIMER_CONST (0xff - (F_CPU/(BAUD_RATE*3*PRESCALER))+1)
|
|
|
|
28.10.2012, 18:55
|
|
Гражданин KAZUS.RU
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
|
Re: Программный UART для Mega8 .Проблемы
Урааа !!! Помогло . Ara41 спасибо вам. В Proteuse все заработало нормально на скорости 9600. Осталось проверить в железе.
|
|
|
|
29.12.2012, 18:41
|
|
Частый гость
Регистрация: 25.06.2009
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Программный UART для Mega8 .Проблемы
Сообщение от Ara41
|
Если переставить частоту на 11,0592 МГц, то можно поглядеть в дебагере, что ложится в TCNT0. Для этой частоты получается FA, т.е. FF-FA==5.
А в соответствии с формулой 11059200/(9600*3*64)==6. Небольшая нестыковка. Попробуйте поправить для своей частоты формулу на:
#define TIMER_CONST (0xff - (F_CPU/(BAUD_RATE*3*PRESCALER))+1)
|
чёто я непойму как юто так? в какм отладчике сматреть? мне надо настроить резонатор стоит 16М а скорость нужна 19200 как мне это реализовать? добрые люди всё оппробовал нето приходит в протеусе
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Какие могут быть проблемы при вкл/откл UART в ATmega128?
|
Don_Ambrosio |
Микроконтроллеры, АЦП, память и т.д |
26 |
12.06.2014 13:53 |
Программный SPI Slave для AVR
|
artyomugr |
Микроконтроллеры, АЦП, память и т.д |
17 |
28.06.2012 13:55 |
Программный приемник по UART
|
Fair88Play |
Микроконтроллеры, АЦП, память и т.д |
23 |
21.06.2012 18:27 |
Проблемы с передачей по UART, нужна помощь
|
sansan25 |
Микроконтроллеры, АЦП, память и т.д |
3 |
28.01.2012 13:19 |
Проблемы с приемом данных через UART Tiny 2313
|
SoapMaker |
Микроконтроллеры, АЦП, память и т.д |
0 |
08.04.2008 10:35 |
Часовой пояс GMT +4, время: 09:36.
|
|