|
|
  |
Atmega128 – подделка? |
|
|
|
Sep 11 2012, 19:12
|
Частый гость
 
Группа: Свой
Сообщений: 99
Регистрация: 5-11-04
Пользователь №: 1 063

|
Вот столкнулся недавно, собрали устройства на новой партии атмег, не работают, до этого несколько сотен работали без проблем. Стал разбираться – теряются байты при передаче по UART. Передача была сделана как в примере из документации, т.е. проверяем есть ли место буфере, если есть, пишем 1 байт, если нет ждем. Заработало как полагается, только когда добавил ожидание окончания передачи после записи в UDR0. И еще ток жрет в 2 раза больше чем предыдущие экземпляры, и по потреблению выходит за значения указанные в документации. Кто-нибудь сталкивался?
|
|
|
|
|
Sep 11 2012, 20:31
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата т.е. проверяем есть ли место буфере Это уже в сдвиговом регистре или UDR? Цитата Заработало как полагается, только когда добавил ожидание окончания передачи после записи в UDR0. Т.е поменяли проверку флага с UDR0 на TX0. Вы хотите сказать , что буфер передатчика отсутствует , как класс? Можт код родной приведёте , без изменений. Или напишите код в две строчки , где отсылаются 2 байта подряд без проверки UDR0 и посмотрите , что получите.
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Sep 12 2012, 05:42
|
Частый гость
 
Группа: Свой
Сообщений: 99
Регистрация: 5-11-04
Пользователь №: 1 063

|
Напряжения питания +5,0В (пробовали поднимать до +5,5В), тактирование внешнее +16МГц. Фьюзы: совместимость с 103 отключена, тактирование внешнее, BOD отключен (ресетится внешним контроллером). Прерывания не используются. CODE //настройка УАРТ LDI R16,0x44 OUT UBRR0L,R16 LDI R16,0x00 STS UBRR0H,R16 LDI R16,3<<UCSZ00 STS UCSR0C,R16 LDI R16,(1<<TXEN0) OUT UCSR0B,R16 CODE //так не работает UART_Tx: sbis UCSR0A,UDRE0 rjmp UART_Tx out UDR0,r16 ret CODE //так работает UART_Tx: sbis UCSR0A,UDRE0 rjmp UART_Tx out UDR0,r16 U1: sbis UCSR0A,TXC0 rjmp U1 ret
|
|
|
|
|
Sep 12 2012, 06:20
|

Гуру
     
Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954

|
Цитата(Alexey_l @ Sep 12 2012, 09:42)  Прерывания не используются. Код //так работает U1: sbis UCSR0A,TXC0 Что-то Вы где-то напутали... Поскольку прерывания Вы не используете, то после того как флаг TXC0 буден взведен в единицу, добавленная Вами команда становится бессмысленной, поскольку TXC0 никто не сбрасывает... Р.S. Вероятно, какая-то беда на приёмной стороне.
|
|
|
|
|
Sep 12 2012, 06:45
|
Частый гость
 
Группа: Свой
Сообщений: 99
Регистрация: 5-11-04
Пользователь №: 1 063

|
QUOTE (Палыч @ Sep 12 2012, 10:20)  Что-то Вы где-то напутали... Поскольку прерывания Вы не используете, то после того как флаг TXC0 буден взведен в единицу, добавленная Вами команда становится бессмысленной, поскольку TXC0 никто не сбрасывает...
Р.S. Вероятно, какая-то беда на приёмной стороне. Да сам я его не сбрасываю. Но факт остается фактом. Естественно, что когда стал разбираться, что происходит, пришлось выкинуть весь код за исключением уарта, который тупо слал несколько констант. После того как с помощью осциллоскопа убедился что приемная часть принимает именно то что передается в линии ничего не оставалось кроме как шаманить с кодом уарта. Со старым кодом было сделано более 100 устройств, новая партия 10 шт. – проблемы были со всеми. Жаль не получится еще поэкспериментировать, это со старой работы попросили помочь.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|