Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ATMega8535 + внешний кварц на 16 MHz
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
hd44780
Есть устройство. IDE HDD подключает к COM-порту. Просьба не смеяться, так надо!
Изначально МК ATmega8535 работал на внутреннем генераторе 4 MHz - все было идеально.
Затем понадобилось перевести его на 16 MHz (чтобы поднять частоту USART).
Припаял кварц, кондеры по 27pF, подкорректировал микрокод, перепрошил, изменил fuse-bits.
Получил нестабильную работу. МК заводится, HDD реагирует нормально (вывод - прием от ПК нормальный), но "входящий трафик" (MK->PC) портится - теряет байты, искажает, но не все.
Вернул на внутренний 4 MHz - все нормализовалось.
Скорость UART'а пока не менял - 19200.

Схема спаяна монтажными проводками - проволочка из обмотки трансформатора.
Единственное, что на мой взгляд вызывает сомнения - кварц припаян к МК проволочками длиной ~3 см.
Корпус кварца незаземлен, кондеры припаяны непоср. к ногам кварца, а уже от этих точек - проволочки на МК.
Так получилось исторически (неудачная компоновка деталей на плате).

В чем м.б. дело?
GeorgyBey
Если нет осциллоскопа, что-бы убедиться в качестве генерации - кварц заводится на частоте или какой-нибудь гармонике, полезно написать супер-простенькую прогу по подсчету циклов, так, что бы получалось по расчету 4 секунды исполнения (моргать светодиодом). Зациклить на постоянное исполнение и наблюдать период моргания - если будет дергаться 2с-4с-8с - значит кварц прыгает по гармоникам или вообще прикидывается RC генератором smile.gif
haker_fox
2 hd44780:
1. Проверьте, что к точке соединения конденсаторов от кварца, идет только земля, и больше в эту точку ничего не припаяно.
2. Проверьте, правильно ли выставлен фьюз CKOPT, для 16 МГц он должен быть запрограммирован (быть в 0).
3. Правильно ли пересчитывается значение регистра UBRR.

4. Между последовательным портом и МК, что стоит, и какая обвязка?
hd44780
2 GeorgyBey

Светодиодик есть. Специально для таких целей. smile.gif
При включении питания он несколько раз моргает с разной длительностью - на глаз вроде правильно.
с периодическим включением проверю.

CKOPT вообще никогда не менял (даже не помню включен он или выключен).

2 haker_fox
Кондеры припаяны к печатной дорожке "земле" на расстоянии 5 мм друг от друга.
Значения для UBRR брал из доки на МК для соотв. частот генератора. Здесь все правильно.
Между МК и COM-портом MAX232N со стандартной конденсаторной обвязкой.
hd44780
запрограммировал CKOPT, проверил светодиодиком - на глаз нормально, но глюки стали еще круче sad.gif.

Придется остаться на внутреннм генераторе и поднять его до 8 MHz...
Aleks17
А питание процессора какое и откуда берётся?

Гоночных глюков в программе не возникает ненароком - типе передача следущего байта до того как отправлен предыдущий?
defunct
Цитата(hd44780 @ Jan 27 2006, 10:51) *
Есть устройство. IDE HDD подключает к COM-порту. Просьба не смеяться, так надо!
Изначально МК ATmega8535 работал на внутреннем генераторе 4 MHz - все было идеально.
Затем понадобилось перевести его на 16 MHz (чтобы поднять частоту USART).

В чем м.б. дело?


В кварце 16 Mhz, на 16 Mhz UART дает ошибку.

Поставьте 14.7456 Mhz, возьмите делитель из даташита, и все будет ок вплоть до 115200.
GrayCat
Очень часто "странные" проблемы с кварцем решаются сменой собственно кварца... ;(
hd44780
Питание импульсное, от AT-шного БП. От него же и винт питается. На питании есть электролит 1 мкф.
В принципе, могу попытаться включить МК от обычного БП.
Кварца на 14.7456 пока нет. Смогу купить не раньше чем через неделю. Есть на 12.
Кварц на 16 есть еще один, попробую поменять.

А как определить эти "гоночные глюки"?
defunct
Цитата(hd44780 @ Jan 27 2006, 15:15) *
Питание импульсное, от AT-шного БП. От него же и винт питается. На питании есть электролит 1 мкф.
В принципе, могу попытаться включить МК от обычного БП.
Кварца на 14.7456 пока нет. Смогу купить не раньше чем через неделю. Есть на 12.
Кварц на 16 есть еще один, попробую поменять.

А как определить эти "гоночные глюки"?


И 12 и 16Mhz будут "глючить". Ставьте хотя бы 11.0592Mhz или любой кратный 115200.
В крайнем случае тактируйте от внешнего RC (нужен всего 1 резистор). (установите CKOPT в 0, что подключит внутренний конденсатор 36pf между XTAL1 и GND, R - цепляйте между XTAL1 и Vcc)
7.3Mhz будет при R=1.02kOm
уменьшая R будет повышаться частота, т.о. можете выставить себе 11.0592Mhz если производительности на 7.3 будет недостаточно.
haker_fox
Цитата(defunct @ Jan 28 2006, 00:55) *
Цитата(hd44780 @ Jan 27 2006, 15:15) *

Питание импульсное, от AT-шного БП. От него же и винт питается. На питании есть электролит 1 мкф.
В принципе, могу попытаться включить МК от обычного БП.
Кварца на 14.7456 пока нет. Смогу купить не раньше чем через неделю. Есть на 12.
Кварц на 16 есть еще один, попробую поменять.

А как определить эти "гоночные глюки"?


И 12 и 16Mhz будут "глючить". Ставьте хотя бы 11.0592Mhz или любой кратный 115200.
В крайнем случае тактируйте от внешнего RC (нужен всего 1 резистор). (установите CKOPT в 0, что подключит внутренний конденсатор 36pf между XTAL1 и GND, R - цепляйте между XTAL1 и Vcc)
7.3Mhz будет при R=1.02kOm
уменьшая R будет повышаться частота, т.о. можете выставить себе 11.0592Mhz если производительности на 7.3 будет недостаточно.


Гм... у меня 16 Мгц кварц и скорость 19200 и 4800 не глючит... хотя конечно по даташиту есть ошибка небольшая... может быть попробывать эти скорости?
hd44780
Спасибо всем, будем пробовать!
ksv198
Цитата(defunct @ Jan 27 2006, 19:55) *
И 12 и 16Mhz будут "глючить". Ставьте хотя бы 11.0592Mhz или любой кратный 115200.
В крайнем случае тактируйте от внешнего RC (нужен всего 1 резистор). (установите CKOPT в 0, что подключит внутренний конденсатор 36pf между XTAL1 и GND, R - цепляйте между XTAL1 и Vcc)
7.3Mhz будет при R=1.02kOm
уменьшая R будет повышаться частота, т.о. можете выставить себе 11.0592Mhz если производительности на 7.3 будет недостаточно.

Позвольте с вами не согласиться. Согласно стандарта RS232 отклонение в программировании делителя может достигать +/- 10 % (можно легко найти стандарт и прочесть). В данном же случае имеем для 16 МГц и 19200 отклонение всего +0.2 % (согласно даташиту) и это очень хорошая точность. Реально работал по последовательному порту при отклонении 3 % и все было хорошо, при длине передаваемых блоков до 4 кБайт на скорости 57600.
Я думаю проблема может быть или в кварце (16 мегагерцовые иногда встречал очень низкого качества), или в программной реализации - возможно буфер передачи-приема портиться или из него не успевают прочесть.
defunct
Цитата(ksv198 @ Jan 28 2006, 12:51) *
Позвольте с вами не согласиться. Согласно стандарта RS232 отклонение в программировании делителя может достигать +/- 10 % (можно легко найти стандарт и прочесть). В данном же случае имеем для 16 МГц и 19200 отклонение всего +0.2 % (согласно даташиту) и это очень хорошая точность.


Принимается, мне надо было написать "могут глючить", вместо "будут глючить".

Хорошая точность это 0.0%, и кварцев способных обеспечить данную точность пруд пруди.
Насчет 10% Вы вероятно погорячились, или это для 5-ти битовой посылки с двумя стопами?.
0.2% - допустимое отклонение, но здесь имеет место два отступления.
1. Схема собрана на монтаже, кварц припаян проводками, как следствие - частота неминуемо поплывет.
2. Кто говорит о 19200, что это за скорость такая? смешно ведь HDD на 19200 считывать..


Цитата
Реально работал по последовательному порту при отклонении 3 % и все было хорошо, при длине передаваемых блоков до 4 кБайт на скорости 57600.
Я думаю проблема может быть или в кварце (16 мегагерцовые иногда встречал очень низкого качества), или в программной реализации - возможно буфер передачи-приема портиться или из него не успевают прочесть.


Имею совершенно противоположный опыт, с блоками длиной всего 128 байт, кварц 16Mhz, UART на скорости 115200...
UART сбоит, почти каждый 2-й блок - ошибка CRC, а ведь согласно даташитам от Atmel на ATmegaXX для 115200 на 16Mhz ошибка составляет -3.5% (U2X=0) и соответственно +2.1% (U2X=1). И если верить Вашим словам, то должно быть все ок.

PS: просьба, когда советуете людям работать с тем чем не положено (т.е. заведомо, еще при разработке, закладывать в устройство ошибки, отклонения от стандарта и пр.), приводить ссылки на соотв. стандарты, а лучше всего описание от производителей устройств с которым предполагается работа, где четко сказано, что гарантируется нормальная работа устройства/интерфейса с теми или иными отклонениями в рамках стандарта..
ksv198
Цитата(defunct @ Jan 28 2006, 23:22) *
Хорошая точность это 0.0%, и кварцев способных обеспечить данную точность пруд пруди.
Насчет 10% Вы вероятно погорячились, или это для 5-ти битовой посылки с двумя стопами?.
0.2% - допустимое отклонение, но здесь имеет место два отступления.
1. Схема собрана на монтаже, кварц припаян проводками, как следствие - частота неминуемо поплывет.
2. Кто говорит о 19200, что это за скорость такая? смешно ведь HDD на 19200 считывать..

Хорошая точность 0% это мечта smile.gif , даже для специально подобранных кварцев.
Насчет 10 % это не я придумал. Так было в стандарте RS232. На данный момент , каюсь информация устарела, сейчас там прописано следующее:
---------------------------------------------
3 - For Data and Timing signals, the transit time through the transition region should be

a - less than 1ms for bit periods greater than 25ms,

b - 4% of the bit period for bit periods between 25ms and 125µs,

c - less than 5µs for bit periods less than 125µs.
The rise and fall times of data and timing signals ideally should be equal, but in any case vary by no more than a factor of three.
---------------------------------------------
Вот ссылка: RS232 Standart
О скорости 19200 говорит сам автор, в самом начале треда. Кстати скорость совсем не смешная, если надо немного служебной информации прочесть, вполне достаточно.

Цитата(defunct @ Jan 28 2006, 23:22) *
Имею совершенно противоположный опыт, с блоками длиной всего 128 байт, кварц 16Mhz, UART на скорости 115200...
UART сбоит, почти каждый 2-й блок - ошибка CRC, а ведь согласно даташитам от Atmel на ATmegaXX для 115200 на 16Mhz ошибка составляет -3.5% (U2X=0) и соответственно +2.1% (U2X=1). И если верить Вашим словам, то должно быть все ок.

Если только передавать на комп (контроллер передает, комп принимает) - должно smile.gif
А по приему Атмел не рекомендует отклонение больше 2%.
На скорости 115200 проблемы могут быть (и бывают) не только в установки частоты синхронизации, и не только на стороне МК. При использовании 3-х проводной схемы соединения с компом (Rx, Tx, GND) и длине проводов ~50 см уже начинаются проблемы с помехами. Стоит сделать кабель 7-ми проводным и анализировать все сигналы модема, как тут же все становится на места. Однако спорить не буду.
По теме - я хотел всего лишь сказать, что при указанном кварце и скорости - должно все чудесно работать. Если не работает - дело скорее всего не в точности установки частот.

P.S. Если кого обидел - прошу не судить строго и заранее извиняюсь smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.