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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> UART не запскается, Ошибка команды SBIS на Atmega 2561
Палыч
сообщение Nov 3 2010, 10:44
Сообщение #16


Гуру
******

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



Цитата(Slavast @ Nov 3 2010, 13:01) *
Я работаю на ATmega 2561 с 16 Мгц частотой и U2X=0.
Высчитал вроде Baudrate=8.
А, Вы высчитали: какая при этом ошибка скорости передачи получается? Это может быть важным. При Ваших данных ошибка -3,5%. Чтобы скорость USART получалась без ошибок используют тактовую 14.7456МГц или 11.0592МГц.
Go to the top of the page
 
+Quote Post
Slavast
сообщение Nov 3 2010, 12:08
Сообщение #17


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

Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395



Да, спасибо!

Цитата(Палыч @ Nov 3 2010, 13:44) *
А, Вы высчитали: какая при этом ошибка скорости передачи получается? Это может быть важным. При Ваших данных ошибка -3,5%. Чтобы скорость USART получалась без ошибок используют тактовую 14.7456МГц или 11.0592МГц.



Как же я могу поменять частоту процессора микроконтроллера Atmega 2561 16Мгц ?

Выбирая не 16 Мгц, а 14.7456МГц или 11.0592МГц не будет работать, т.к. тактовая часота процессора МК Atmega 2561 16 МГц.?
Go to the top of the page
 
+Quote Post
Палыч
сообщение Nov 3 2010, 13:40
Сообщение #18


Гуру
******

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



Цитата(Slavast @ Nov 3 2010, 15:08) *
Выбирая не 16 Мгц, а 14.7456МГц или 11.0592МГц не будет работать, т.к. тактовая часота процессора МК Atmega 2561 16 МГц.?
При 5В питания тактовая частота не должна превышать 16МГц. Конкретное значение выбирается из всяких-разных условий: напряжение питания, потребляемый ток, необходимое быстродействие и др.
Go to the top of the page
 
+Quote Post
Slavast
сообщение Nov 5 2010, 09:02
Сообщение #19


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

Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395



UART заработал!!
Но теперь вместо одного символа контроллер Atmega 2561 выводит мне в терминал бесконечный цикл этих символов. Без главного цикла все равно выводит миллион повторений того, что я нажму.
Вопрос - нужно ли здесь прерывания и какой их тогда будет смысл?
Заранее, низкий поклон!!

Главная программа у меня вот:



;-------Посылка байта----------

uart_rcv: lds r19, UCSR0A
SBRS r19,UDRE0 ; Пропуск если нет флага готовности,
RJMP uart_rcv ; вращаясь в цикле
lds R16,UDR0 ; байт пришел - забираем.
RET ; Выходим. Результат в R16


;-------Процедура отправки байта-------


uart_snt: lds r17, UCSR0A
SBRS r17,UDRE0 ; Пропуск если нет флага готовности,
; если 1 - то готов отправлять данные
RJMP uart_snt ; ждем готовности - флага UDRE
sts UDR0, R16 ; шлем байт 01010101 в UDR
RET ; Возврат


;------ Главный цикл --------


Main:
RCALL uart_rcv ; Ждем байта
INC R16 ; Делаем с ним что-то
RCALL uart_snt ; Отправляем обратно.
out PORTB, r18
JMP Main

Go to the top of the page
 
+Quote Post
=GM=
сообщение Nov 5 2010, 09:41
Сообщение #20


Ambidexter
*****

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



На приём надо проверять бит RXC0, а вы проверяете UDRE0 и на приём, и на передачу.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Slavast
сообщение Nov 5 2010, 09:51
Сообщение #21


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

Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395



Цитата(=GM= @ Nov 5 2010, 12:41) *
На приём надо проверять бит RXC0, а вы проверяете UDRE0 и на приём, и на передачу.



АААА!!!!
РАБОТАААААЕТТТТ!)!)!)!)!))!)!
Урааааааа!))))))

Огромный респект =GM=!!!!
Go to the top of the page
 
+Quote Post
=GM=
сообщение Nov 5 2010, 10:53
Сообщение #22


Ambidexter
*****

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



На здоровье.

Ну и r18 у вас в main не определён. Повнимательнее будьте.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Slavast
сообщение Nov 5 2010, 11:54
Сообщение #23


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

Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395



А кто-нибудь знает, как в Ассемблере через UART вывести целую строку символов? Например фразу "Привет". Как определить символьный тип данных на переменную?
Спасибо.
Go to the top of the page
 
+Quote Post
ae_
сообщение Nov 5 2010, 13:46
Сообщение #24


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



Код
    ldi    xl, low (2*message1)
    ldi    xh, high (2*message1)
next1:
    ld    R16, x+
    tst    R16
    breq    end_sent1
    rcall    uart_snt
    rjmp    next1

message1:
    .db "Привет!", 0

end_sent1:
    nop
Go to the top of the page
 
+Quote Post

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

 


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


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