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

 
 
 
Reply to this topicStart new topic
> Atmega128 – подделка?
Alexey_l
сообщение Sep 11 2012, 19:12
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 99
Регистрация: 5-11-04
Пользователь №: 1 063



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


Профессионал
*****

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



Цитата
т.е. проверяем есть ли место буфере
Это уже в сдвиговом регистре или UDR?
Цитата
Заработало как полагается, только когда добавил ожидание окончания передачи после записи в UDR0.
Т.е поменяли проверку флага с UDR0 на TX0. Вы хотите сказать , что буфер передатчика отсутствует , как класс?
Можт код родной приведёте , без изменений. Или напишите код в две строчки , где отсылаются 2 байта подряд без проверки UDR0 и посмотрите , что получите.


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Sep 11 2012, 21:00
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Ещё очень похоже на что-то из серии оверклокинга или недостаточности блокировок... Но лучше посмотреть на код.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Sep 11 2012, 21:21
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Genadi Zawidowski @ Sep 12 2012, 00:00) *
Но лучше посмотреть на код.

Fuse, сигнатура, частота кварца и напряжение питания также не будут лишними.
Go to the top of the page
 
+Quote Post
Alexey_l
сообщение Sep 12 2012, 05:42
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 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

Go to the top of the page
 
+Quote Post
Палыч
сообщение Sep 12 2012, 06:20
Сообщение #6


Гуру
******

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



Цитата(Alexey_l @ Sep 12 2012, 09:42) *
Прерывания не используются.
Код
//так работает
U1:
    sbis UCSR0A,TXC0

Что-то Вы где-то напутали...
Поскольку прерывания Вы не используете, то после того как флаг TXC0 буден взведен в единицу, добавленная Вами команда становится бессмысленной, поскольку TXC0 никто не сбрасывает...

Р.S. Вероятно, какая-то беда на приёмной стороне.
Go to the top of the page
 
+Quote Post
Alexey_l
сообщение Sep 12 2012, 06:45
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 99
Регистрация: 5-11-04
Пользователь №: 1 063



QUOTE (Палыч @ Sep 12 2012, 10:20) *
Что-то Вы где-то напутали...
Поскольку прерывания Вы не используете, то после того как флаг TXC0 буден взведен в единицу, добавленная Вами команда становится бессмысленной, поскольку TXC0 никто не сбрасывает...

Р.S. Вероятно, какая-то беда на приёмной стороне.


Да сам я его не сбрасываю. Но факт остается фактом. Естественно, что когда стал разбираться, что происходит, пришлось выкинуть весь код за исключением уарта, который тупо слал несколько констант. После того как с помощью осциллоскопа убедился что приемная часть принимает именно то что передается в линии ничего не оставалось кроме как шаманить с кодом уарта. Со старым кодом было сделано более 100 устройств, новая партия 10 шт. – проблемы были со всеми. Жаль не получится еще поэкспериментировать, это со старой работы попросили помочь.

Go to the top of the page
 
+Quote Post
Палыч
сообщение Sep 12 2012, 07:28
Сообщение #8


Гуру
******

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



Цитата(Alexey_l @ Sep 12 2012, 10:45) *
Но факт остается фактом.

Вероятно, какая-то беда с синхронизацией посылок. Поскольку Вы до максимума "ужали" посылки данных (нет бита четности, один стоп бит), то, возможно, какие-то помехи на линии приводят к рассинхронизации приёмника и передатчика... Пауза в передаче после посылки первого байта (образовалась от вставленной Вами команды) возращает синхронизацию "на место". Проверьте приемо-передатчики (микросхемы драйверов) и линии связи. Всё ли там в порядке? Не возникает ли на линиях какая-то "бяка", если на передающем устройстве нет питания (не включено)? Проверьте общий провод на обрыв в кабеле связи (у меня при плохом общем проводе и не такие "чудеса" наблюдались)...
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 16th July 2025 - 03:45
Рейтинг@Mail.ru


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