Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MEGA64 + uart
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
skilful
привет всем. Короче, пытаюсь передать по rs232 из Mega64 в комп данные, но что-то не получается (передает "00" и все тут). Кварц = 11,059 МГц

Питание везде проверил - все норм. "Соплей" тоже нет.

Текст самый простенький:


.include "m64def.inc"
.CSEG
.org 0
rjmp reset
reset:

ldi r16,low(RAMEND)
out SPL,r16

ldi r16,high(RAMEND)
out SPH,r16
;-------------------------------------------------------------------------------
;UART enabled
ldi r16,(3<<UCSZ00) | (1<<UCPOL0) ;8 bit

sts UCSR0C,r16

ldi r20,17 ;определение скорости = 38400
out UBRR0L,r20


ldi r21,0
sts UBRR0H,r21




ldi r16,(1<<TXEN0) ;разрешение прередатчика
out UCSR0B,r16

;-------------------------------------------------------------------------------

ldi r16,0xAA
out UDR0,r16



rep:

rjmp rep

;-------------------------------------------------------------------------------


НЕ вижу ошибки - хоть убей smile.gif Прога для приема COM Port Toolkit. Данные передаются, но только = "0x00" вместо "0xAA". Помогите плз.
Заранее благодарю.
WHALE
а кварц какой?
satellite-plus
Цитата(skilful @ Feb 17 2007, 07:20) *
привет всем. Короче, пытаюсь передать по rs232 из Mega64 в комп данные, но что-то не получается (передает "00" и все тут). Кварц = 11,059 МГц


UCSR0C не настраивай оставь по умолчанию. Байты передавай с небольшой задержкой. Один байт терминал может глотнуть.
Dopler
Ошибка в том, что вы пишете UBRR0L раньше UBRR0H.
Страница 194 даташита - запись в UBRR0L инициализирует немедленную запись предделителя. Это также относится к доступу к остальным 16-ти битным регистрам AVR
skilful
блин, снова не получается - все сделал как Вы предлагали, но без результатно (нули передаются), даже на другой порт перекинул все. Получилаьс такая эспериментальная фигня.


.include "m64def.inc"
.CSEG
.org 0
rjmp reset
reset:

ldi r16,low(RAMEND)
out SPL,r16

ldi r16,high(RAMEND)
out SPH,r16
;-------------------------------------------------------------------------------
;передача массива чисел
;UART enabled
; ldi r16,(3<<UCSZ00) | (1<<UCPOL0) sts UCSR0C,r16

ldi r21,0
sts UBRR1H,r21



ldi r20,17 ;определение скорости = 38400
sts UBRR1L,r20

ldi r16,(1<<TXEN1) ;разрешение прередатчика
sts UCSR1B,r16

;-------------------------------------------------------------------------------
ldi r16,0xAA
sts UDR1,r16


nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop

ldi r16,0xAB
sts UDR1,r16


rep:

rjmp rep



Да вот еще решил фьюзы посмотреть - оказалось стоял M103C. Думал из-за него. Сейчас фьюзы таковы:




Может из-за них, ща еще и сам в даташите посмотрю...Спасибо за ответы
Dopler
Цитата(skilful @ Feb 17 2007, 20:42) *


Да, про фузы я забыл спросить. Конечно, они не правильные. У вас работает от внутреннего генератора. Все фузы убрать (в Pony Prog), включить только CKOPT.
skilful
понял, только или я с ними доигрался или программатор криво сделал, не читается ниче вообще smile.gif) Вроде верхний ряд фьюзов вообще не ставил, а тут теперь не читается и не шьется ничего. А можно ли как-нить узнать выставлены ли ЛОК биты? Пони прог позволяет?

З.ы. спасибо за ответ
=GM=
Цитата(skilful @ Feb 17 2007, 17:42) *
блин, снова не получается - все сделал как Вы предлагали, но без результатно (нули передаются), даже на другой порт перекинул все. Получилась такая эспериментальная фигня.

;UART enabled
; ldi r16,(3<<UCSZ00) | (1<<UCPOL0) sts UCSR0C,r16
ldi r21,0
sts UBRR1H,r21
ldi r20,17 ;определение скорости = 38400
sts UBRR1L,r20 ldi r16,(1<<TXEN1) ;разрешение прередатчика
sts UCSR1B,r16
;-------------------------------------------------------------------------------
ldi r16,0xAA
sts UDR1,r16
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
ldi r16,0xAB
sts UDR1,r16
rep: rjmp rep
Да вот еще решил фьюзы посмотреть - оказалось стоял M103C. Думал из-за него. Сейчас фьюзы таковы:
Может из-за них, ща еще и сам в даташите посмотрю...Спасибо за ответы


1) Вообще-то, честнее было бы перед записью байта в UDR1 проверять бит UDRE1 на предмет готовности передатчика к передаче.

2) Через 15 тактов (а это порядка 1.4 мкс) после передачи первого байта вы начинаете передачу второго байта, прерывая тем самым передачу первого. Передатчик, конечно, начнет передавать второй байт, но что будет на приемном конце?

Поэтому надо обязательно проверять бит UDR1 (или бит ТХС1, зависит от задачи).

Как-то так
Код
wait:  sbis   UCSR1A,UDRE1
       rjmp   wait
       sts    UDR1,r16
skilful
да я так делал сначала, но результат один - принимаются нули. Вопрос: можно ли как-нить узнать устновлены ли ЛОК биты?
=GM=
Цитата(skilful @ Feb 17 2007, 21:18) *
да я так делал сначала, но результат один - принимаются нули. Вопрос: можно ли как-нить узнать устновлены ли ЛОК биты?

А вы байты в писюк передаёте через преобразователь уровней ТТЛ-рс232? Или как?
skilful
ну конечно, через max232
Dopler
Короче суть в том, что при частоте больше 8Мгц и при длинных проводах программатора с PonyProg такое будет случаться переодически. Для Mega128/64 это лечится безболезнено, так как у нее нет fuse, полностью запрещающих ISP (например, ResetDis). Наличие Lock на программирование не влияют, они не дают только считать (после стирания кристала они пропадают). В вашем случае скорее всего установилось неудачное сочетание тактовых fuse (например, внешние такты). Это лечится подачей тактов с любой другой платы (можно прямо с ноги кварца) на тактовый вход меги XTAL1 (кварц от этой ноги отпаять). У меня еще не было не одного случая, чтобы мегу 128 нельзя было оживить.
skilful
Спасибо Доплер. Последовал твоему совету. Начало читаться содержимое МК и фьюзы даже прочитал. Но вот переписать их не смог - снова вылетела ошибка в понипрог. Уже и так и сяк подключал внешние генераторы - хоть бы что....не читается и все, хотя программатор нормальный - проверил на другом контроллере. Что делать подскажи?
skilful
Спааасибо Доплер - все заработало!!! В смысле все читается нормально - другую частоту взял и все пошло...А вот теперь для нормальной работы Меги оставить только фьюз CKOPT?? А то в даташите не очень разобрался. Еще раз пасиба smile.gif))
Dopler
Да, все галки убрать, оставить только CKOPT.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.