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

 
 
> MEGA64 + uart, что за ошибка не пойму
skilful
сообщение Feb 17 2007, 08:20
Сообщение #1


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

Группа: Свой
Сообщений: 186
Регистрация: 23-04-06
Из: Сочи
Пользователь №: 16 411



привет всем. Короче, пытаюсь передать по 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". Помогите плз.
Заранее благодарю.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 14)
WHALE
сообщение Feb 17 2007, 09:55
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



а кварц какой?


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
satellite-plus
сообщение Feb 17 2007, 10:13
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 8-01-07
Из: Одесса
Пользователь №: 24 196



Цитата(skilful @ Feb 17 2007, 07:20) *
привет всем. Короче, пытаюсь передать по rs232 из Mega64 в комп данные, но что-то не получается (передает "00" и все тут). Кварц = 11,059 МГц


UCSR0C не настраивай оставь по умолчанию. Байты передавай с небольшой задержкой. Один байт терминал может глотнуть.


--------------------
Опыт - это та чудесная штука, которая позволяет вам узнать ошибку, когда вы ее повторите.
Go to the top of the page
 
+Quote Post
Dopler
сообщение Feb 17 2007, 13:06
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Ошибка в том, что вы пишете UBRR0L раньше UBRR0H.
Страница 194 даташита - запись в UBRR0L инициализирует немедленную запись предделителя. Это также относится к доступу к остальным 16-ти битным регистрам AVR
Go to the top of the page
 
+Quote Post
skilful
сообщение Feb 17 2007, 20:42
Сообщение #5


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

Группа: Свой
Сообщений: 186
Регистрация: 23-04-06
Из: Сочи
Пользователь №: 16 411



блин, снова не получается - все сделал как Вы предлагали, но без результатно (нули передаются), даже на другой порт перекинул все. Получилаьс такая эспериментальная фигня.


.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. Думал из-за него. Сейчас фьюзы таковы:




Может из-за них, ща еще и сам в даташите посмотрю...Спасибо за ответы
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Dopler
сообщение Feb 17 2007, 21:31
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Цитата(skilful @ Feb 17 2007, 20:42) *


Да, про фузы я забыл спросить. Конечно, они не правильные. У вас работает от внутреннего генератора. Все фузы убрать (в Pony Prog), включить только CKOPT.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
skilful
сообщение Feb 17 2007, 23:37
Сообщение #7


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

Группа: Свой
Сообщений: 186
Регистрация: 23-04-06
Из: Сочи
Пользователь №: 16 411



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

З.ы. спасибо за ответ
Go to the top of the page
 
+Quote Post
=GM=
сообщение Feb 18 2007, 00:05
Сообщение #8


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(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


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
skilful
сообщение Feb 18 2007, 00:18
Сообщение #9


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

Группа: Свой
Сообщений: 186
Регистрация: 23-04-06
Из: Сочи
Пользователь №: 16 411



да я так делал сначала, но результат один - принимаются нули. Вопрос: можно ли как-нить узнать устновлены ли ЛОК биты?

Сообщение отредактировал skilful - Feb 18 2007, 00:18
Go to the top of the page
 
+Quote Post
=GM=
сообщение Feb 18 2007, 01:05
Сообщение #10


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



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

А вы байты в писюк передаёте через преобразователь уровней ТТЛ-рс232? Или как?


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
skilful
сообщение Feb 18 2007, 01:28
Сообщение #11


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

Группа: Свой
Сообщений: 186
Регистрация: 23-04-06
Из: Сочи
Пользователь №: 16 411



ну конечно, через max232
Go to the top of the page
 
+Quote Post
Dopler
сообщение Feb 18 2007, 10:18
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Короче суть в том, что при частоте больше 8Мгц и при длинных проводах программатора с PonyProg такое будет случаться переодически. Для Mega128/64 это лечится безболезнено, так как у нее нет fuse, полностью запрещающих ISP (например, ResetDis). Наличие Lock на программирование не влияют, они не дают только считать (после стирания кристала они пропадают). В вашем случае скорее всего установилось неудачное сочетание тактовых fuse (например, внешние такты). Это лечится подачей тактов с любой другой платы (можно прямо с ноги кварца) на тактовый вход меги XTAL1 (кварц от этой ноги отпаять). У меня еще не было не одного случая, чтобы мегу 128 нельзя было оживить.
Go to the top of the page
 
+Quote Post
skilful
сообщение Feb 20 2007, 21:31
Сообщение #13


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

Группа: Свой
Сообщений: 186
Регистрация: 23-04-06
Из: Сочи
Пользователь №: 16 411



Спасибо Доплер. Последовал твоему совету. Начало читаться содержимое МК и фьюзы даже прочитал. Но вот переписать их не смог - снова вылетела ошибка в понипрог. Уже и так и сяк подключал внешние генераторы - хоть бы что....не читается и все, хотя программатор нормальный - проверил на другом контроллере. Что делать подскажи?
Go to the top of the page
 
+Quote Post
skilful
сообщение Feb 20 2007, 22:07
Сообщение #14


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

Группа: Свой
Сообщений: 186
Регистрация: 23-04-06
Из: Сочи
Пользователь №: 16 411



Спааасибо Доплер - все заработало!!! В смысле все читается нормально - другую частоту взял и все пошло...А вот теперь для нормальной работы Меги оставить только фьюз CKOPT?? А то в даташите не очень разобрался. Еще раз пасиба smile.gif))
Go to the top of the page
 
+Quote Post
Dopler
сообщение Feb 20 2007, 22:24
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Да, все галки убрать, оставить только CKOPT.
Go to the top of the page
 
+Quote Post

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

 


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


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