Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Atmega128 – подделка?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Alexey_l
Вот столкнулся недавно, собрали устройства на новой партии атмег, не работают, до этого несколько сотен работали без проблем. Стал разбираться – теряются байты при передаче по UART. Передача была сделана как в примере из документации, т.е. проверяем есть ли место буфере, если есть, пишем 1 байт, если нет ждем. Заработало как полагается, только когда добавил ожидание окончания передачи после записи в UDR0. И еще ток жрет в 2 раза больше чем предыдущие экземпляры, и по потреблению выходит за значения указанные в документации. Кто-нибудь сталкивался?
ILYAUL
Цитата
т.е. проверяем есть ли место буфере
Это уже в сдвиговом регистре или UDR?
Цитата
Заработало как полагается, только когда добавил ожидание окончания передачи после записи в UDR0.
Т.е поменяли проверку флага с UDR0 на TX0. Вы хотите сказать , что буфер передатчика отсутствует , как класс?
Можт код родной приведёте , без изменений. Или напишите код в две строчки , где отсылаются 2 байта подряд без проверки UDR0 и посмотрите , что получите.
Genadi Zawidowski
Ещё очень похоже на что-то из серии оверклокинга или недостаточности блокировок... Но лучше посмотреть на код.
_Артём_
Цитата(Genadi Zawidowski @ Sep 12 2012, 00:00) *
Но лучше посмотреть на код.

Fuse, сигнатура, частота кварца и напряжение питания также не будут лишними.
Alexey_l
Напряжения питания +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

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

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

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

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


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

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

Вероятно, какая-то беда с синхронизацией посылок. Поскольку Вы до максимума "ужали" посылки данных (нет бита четности, один стоп бит), то, возможно, какие-то помехи на линии приводят к рассинхронизации приёмника и передатчика... Пауза в передаче после посылки первого байта (образовалась от вставленной Вами команды) возращает синхронизацию "на место". Проверьте приемо-передатчики (микросхемы драйверов) и линии связи. Всё ли там в порядке? Не возникает ли на линиях какая-то "бяка", если на передающем устройстве нет питания (не включено)? Проверьте общий провод на обрыв в кабеле связи (у меня при плохом общем проводе и не такие "чудеса" наблюдались)...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.