реклама на сайте
подробности

 
 
> Глючит FT232BL
uuu2
сообщение May 15 2009, 23:42
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 23-04-09
Пользователь №: 48 156



ATMega48 соединена с FT232BL через TDX/RDX. По нажатию кнопки передаётся два байта на FT232BL:


Код
#define USART_BAUD 9600ul
#define USART_UBBR_VALUE ((F_CPU/(USART_BAUD<<4))-1)

void USART_vInit(void)
{
    // Set baud rate
    unsigned short int UBRRH = USART_UBBR_VALUE>>8;
    unsigned short int UBRRL = USART_UBBR_VALUE;

    // Set frame format to 8 data bits, no parity, 1 stop bit
    UCSR0C = (0<<USBS0)|(1<<UCSZ00)|(1<<UCSZ00);

    // Enable receiver and transmitter
    UCSR0B = (1<<RXEN0)|(1<<TXEN0);
}

void USART_vSendByte(unsigned short int u8Data)
{
    // Wait if a byte is being transmitted
    while((UCSR0A&(1<<UDRE0)) == 0);
    // Transmit data
    UDR0 = u8Data;
}

unsigned short int USART_vReceiveByte()
{
    if ((UCSR0A&(1<<RXC0)) == 0) {return UDR0;} else {return 0;}
}


int main(void)              // начало основой программы
{

...

(ежесекундно проверяется статус кнопки, и, если кнопка нажата, то)

{
мигнуть лампочкой;
USART_vSendByte(10);
USART_vSendByte(15);
}

}


}

Однако результат следующий. Во-первых, за раз отправляется только один байт. Во-вторых, он всегда равен 127 (в 7-битном режиме) или 255 (в 8-битном режиме). В-третьих, даже этот неверный байт отсылается не стабильно: в 60-70% случаев байт не отправляется, хотя лампочка мигает (т.е. условие нажатия выполняется).

Кроме того, приём байта вообще не работает.

Подозреваю, что причина - в неправильной работе с UART.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
uuu2
сообщение May 16 2009, 22:49
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 23-04-09
Пользователь №: 48 156



Ознакомился. Как оказалось, передача всё-таки работала неправильно. По-видимому, вместо последнего (старшего) бита читался стоповый бит, в результате вместо 0 появлялось значение 128. Я элегантно "исправил" это недоразумение, установив на ПК 7-битный формат данных.

Правда, дальше проявилась другая ошибка - иногда заменялся один из бит (т.е. полученное число оказывалось на 2^N больше/меньше, чем оригинальное). Пришлось умерить свои амбиции и установить битрейт в 4800. При этом 8-битный пакет данных стал читаться нормально (стоповый бит не проявлялся), ошибочный бит появляться перестал.

Всё хорошо. Только вот 4200 бит! И это в 21-м веке, когда космические коабли бороздят просторы Вселенной! Маловато. smile.gif

Кроме того, МК работает на 1 Мгц (а я сначала думал - на 2), значит, на передачу бита уходит 238 "тиков". Если установить битрейт 9600, то будет 119 тиков. Неужели это так мало? Я ещё понимаю, что при 5-10-15 тиках могут (и должны) быть ошибки в отлове битов, но 119 тиков!!! Хотя, конечно, могут (а могут?!) быть погрешности в частоте кварца: вместо 1 МГц реально там 0,9 МГц, в итоге сигнал "растягивается", и появляются ошибки. Но я не знаю, 10%-я погрешность - это нормально для встроенного в МК (!) генератора фирмы Atmel?!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- uuu2   Глючит FT232BL   May 15 2009, 23:42
- - aaarrr   Код unsigned short int UBRRH = USART_UBBR_VALUE...   May 16 2009, 00:29
- - uuu2   Угу. Исправил. Теперь глючит немного по-другому. ...   May 16 2009, 12:31
- - SysRq   Цитата(uuu2 @ May 16 2009, 03:42) Код // ...   May 16 2009, 13:37
|- - uuu2   Цитата(SysRq @ May 16 2009, 17:37) Тут ил...   May 16 2009, 15:41
|- - SysRq   Цитата(uuu2 @ May 16 2009, 19:41) Код|...   May 16 2009, 16:04
|- - uuu2   Цитата(SysRq @ May 16 2009, 20:04) Не фре...   May 16 2009, 19:20
|- - aaarrr   Цитата(uuu2 @ May 16 2009, 23:20) Причём ...   May 16 2009, 19:40
|- - SysRq   Пока сообщение набивал, да отвлекался, все уже до ...   May 16 2009, 19:51
- - uuu2   Гыг! Именно это я и сделал. На МК поставил 960...   May 16 2009, 20:23
- - SysRq   Исключительно повезло, что оно работает. Больше н...   May 16 2009, 20:30
- - DpInRock   Мама дорогая. В древности отроков, которые даташи...   May 16 2009, 23:21
|- - uuu2   Цитата(DpInRock @ May 17 2009, 03:21) Убе...   May 17 2009, 00:19
|- - aaarrr   Цитата(uuu2 @ May 17 2009, 04:19) Мне инт...   May 17 2009, 00:35
- - aaarrr   Чтобы обеспечить стабильную работу UART, отклонени...   May 16 2009, 23:28
|- - @Ark   Цитата(aaarrr @ May 17 2009, 03:28) Чтобы...   May 17 2009, 08:59
- - DpInRock   Чисто случайно юзаю мегу48 на 9600 уже давно. Набл...   May 16 2009, 23:45
- - DpInRock   ЦитатаДа знаю я про эту галочку CLKDIV8 Ага.   May 17 2009, 00:43
- - SysRq   Цитата(aaarrr @ May 17 2009, 04:35) В DS ...   May 17 2009, 14:52
|- - aaarrr   Цитата(SysRq @ May 17 2009, 18:52) ...ост...   May 17 2009, 15:15
- - uuu2   Ну, решил я установить "более точный" вн...   May 17 2009, 23:03
- - aaarrr   Ну, бывает. Заводите внешнюю частоту и проверяйте ...   May 17 2009, 23:49
|- - uuu2   Цитата(aaarrr @ May 18 2009, 03:49) Ну, б...   May 18 2009, 00:20
|- - aaarrr   Цитата(uuu2 @ May 18 2009, 04:20) При чем...   May 18 2009, 00:26
- - uuu2   Отодрал. Заработал. Что это значит: конденсаторы н...   May 18 2009, 00:42
|- - aaarrr   Цитата(uuu2 @ May 18 2009, 04:42) Отодрал...   May 18 2009, 00:55
- - uuu2   М-да. Конденсаторы-то разные. Впаял один кондер не...   May 18 2009, 01:25
- - aaarrr   Цитата(uuu2 @ May 18 2009, 05:25) М-да. К...   May 18 2009, 01:35


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 5th September 2025 - 10:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.0174 секунд с 7
ELECTRONIX ©2004-2016