Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

Закрытая тема
Опции темы
Непрочитано 01.07.2009, 20:24   #1
Archer07
Прописка
 
Регистрация: 25.03.2009
Сообщений: 137
Сказал спасибо: 22
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
Archer07 на пути к лучшему
По умолчанию Проблема с USART AVR mega169

Подскажите пожалуйста,можно ли мне в обработчике прерывания от АЦП поместить следующий код:

USART_Transmit:
; sbis UCSRA,UDRE,заменил эту команду на комбинацию двух нижних,не нашел команду для работы с регистрами из SRAM.
lds r16,UCSRA
sbrs r16,UDRE
rjmp USART_Transmit
;Все нормально?тогда складываем r17 в UDR,они улетают в порт.
sts UDR,r17
ret
Возможно ли подобное изощрение?мне и самому ясно,что я потеряю в этом случае большую часть прерываний.
И еще вопрос.Я работаю на mega169,в даташите есть таблицы частот для делителя USART,минимальная частота кварца 1MHz,а у меня 32kHz,что мне ложить в регистры UBRRH,UBRRL чтобы получить скорость 9600бод,какая формула для вычисления,подскажите если не затруднит..



;кварц 32kHz
.include "m169def.inc"
;-----------
.cseg
.org 0
rjmp _RESET
.org ADCCaddr
rjmp _ADC_COMPL
;---------------------
.org INT_VECTORS_SIZE
_RESET:
ldi r16,High(RAMEND)
out SPH,r16
ldi r16,Low(RAMEND)
out SPL,r16

;-----------Uart unit
; Set baud rate
ldi r16,1
ldi r17,0
sts UBRRH, r17
sts UBRRL, r16
; разрешаем прием-передачу.
ldi r16, (1‹‹RXEN)|(1‹‹TXEN)
sts UCSRB,r16
ldi r16,(1‹‹U2X)
sts UCSRA,r16
ldi r16, (1‹‹USBS)|(3‹‹UCSZ0)
sts UCSRC,r16
;-----------
........тут настраиваются каналы АЦП
........И запускается первое преобразование(спасибо человеку с форума,которые нашел ошибку у меня,эта редакция кода его)
sei
;-----------
_MAIN:
rjmp _MAIN
;-----------
_ADC_COMPL:;Обработчик АЦП преобразование завершено
lds r17,ADCL
lds r17,ADCH

;-----------Send on PC(USART)
USART_Transmit:
; sbis UCSRA,UDRE,заменил эту команду на комбинацию двух нижних
lds r16,UCSRA
sbrs r16,UDRE

rjmp USART_Transmit
; Put data (r16) into buffer, sends the data
sts UDR,r17
ret
;-----------Completed
lds r16,ADCSRA;Запускаем очередное преобразование
sbr r16,(1‹‹ADSC)
sts ADCSRA,r16
reti
Реклама:
Archer07 вне форума  
Непрочитано 02.07.2009, 08:42   #2
ra9mig
Прописка
 
Регистрация: 24.09.2008
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
ra9mig на пути к лучшему
По умолчанию

И так, продолжение...
Цитата:
И еще вопрос.Я работаю на mega169,в даташите есть таблицы частот для делителя USART,минимальная частота кварца 1MHz,а у меня 32kHz,что мне ложить в регистры UBRRH,UBRRL чтобы получить скорость 9600бод,какая формула для вычисления,подскажите если не затруднит.
Скорость UART (условно BPS), UBRR и тактовая частота МК (условно Fmcu) относятся к друг другу след. образом:
Код:
для стандартной скорости - UCSR0A.U2X0=0
; BPS = Fmcu/(16*(UBRR+1))
; UBRR = Fmcu/(16*BPS)-1
; Fmcu = BPS*16*(UBRR+1)

для двойной скорости - UCSR0A.U2X0=1
; BPS = Fmcu/(8*(UBRR+1))
; UBRR = Fmcu/(8*BPS)-1
; Fmcu = BPS*8*(UBRR+1)
Из формул видно, что для получения скорости BPS=9600 при UBRR=0 даже на удвоеной скорости, тактовая частота должна буть минимум Fmcu=9600*8=76800.
В Вашем случае на 32кГц (предпологаю 3276 максимальная скорость BPS=32768/8=4096, что ниже требуемой в 2 с лишнем раза!
В этом случае есть несколько выходов: снизить скорость UARTа до ближайщей меньшей стандартной скорости, или увеличить тактовую частоту с применением другого кварца или другой тактовой частоты внутренего RC или внешнего генератора. Во втором случае обратить внимание на тактирование ADC и пересчитать делитель (ADCSRA.ADPSx)...
Цитата:
USART_Transmit:
lds r16,UCSR0A
sbrs r16,UDRE0
rjmp USART_Transmit
sts UDR0,r17
ret
Нормальный код, но вы его используете несколько некоректно, а проще сказать не правильно!
В обработчике ADC вы должны делать либо вызов этой процедуры командой rcall, или используя этот код не использовать возврат ret.

P.S. To be continued...
__________________
Если мы вам не подходим, вы нам вовсе не нужны!
Услышал и забыл, увидел и запомнил, сделал и понял!
Нейрон - штука тонкая!
Чудес на свете не бывает!
ra9mig вне форума  
Непрочитано 02.07.2009, 08:53   #3
nerozero
Вид на жительство
 
Регистрация: 26.07.2007
Сообщений: 483
Сказал спасибо: 18
Сказали Спасибо 107 раз(а) в 68 сообщении(ях)
nerozero на пути к лучшему
По умолчанию

Насчет 32к как я понял это 32768? У Атмелов есть асинхронный режим работы. Сам контроллер тактируете частотой от внутреннего RC либо от внешнего кристалла, если такое позволяет корпус - более оного кристалла. Настраиваете соответствующий таймер для работы в асинхронном режиме с тактированием от 32768 герц и получаете асинхронное прерывание. Для работы с USART будет лучьше если вы воспользуетесь флагами и будете решать задачу в основном потоке (главная функция) либо настроив USART в асинхронном режиме и передавать данные по прерыванию UDR ( если память не изменяет).

Также следует заметить в веду архитектуры ATMega находясь в прерывании вы не можите обработать другое прерывание пока не выйдете из текущего...
nerozero вне форума  
Непрочитано 02.07.2009, 09:28   #4
alexgap
Гражданин KAZUS.RU
 
Аватар для alexgap
 
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
alexgap на пути к лучшему
По умолчанию

Цитата:
Также следует заметить в веду архитектуры ATMega находясь в прерывании вы не можите обработать другое прерывание пока не выйдете из текущего...
Да с чего вы взяли, запросто. Просто если разрешить прерывания в самом начале обработчика прерываний, то обработаете другие с успехом.
alexgap вне форума  
Непрочитано 02.07.2009, 09:53   #5
nerozero
Вид на жительство
 
Регистрация: 26.07.2007
Сообщений: 483
Сказал спасибо: 18
Сказали Спасибо 107 раз(а) в 68 сообщении(ях)
nerozero на пути к лучшему
По умолчанию

Сообщение от alexgap
Да с чего вы взяли, запросто. Просто если разрешить прерывания в самом начале обработчика прерываний, то обработаете другие с успехом.
Хм, во всяком случае так говорилось в каком-то документе. Надо будет попробовать, хотя трудно сказать насколько это применимо, это может привезти к появлению кучи проблем, хотя - "не знаю - не пробовал"
nerozero вне форума  
Непрочитано 02.07.2009, 11:59   #6
makakus
Почётный гражданин KAZUS.RU
 
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
makakus на пути к лучшему
По умолчанию

Сообщение от nerozero
Сообщение от alexgap
Да с чего вы взяли, запросто. Просто если разрешить прерывания в самом начале обработчика прерываний, то обработаете другие с успехом.
Хм, во всяком случае так говорилось в каком-то документе. Надо будет попробовать, хотя трудно сказать насколько это применимо, это может привезти к появлению кучи проблем, хотя - "не знаю - не пробовал"
Чего там пробовать, на ассемблере можно всё. При входе в прерывание да, остальные запрещаются. Но можно их разрешить, имея в перспективе геморрой с ret/reti. Или не разрешать, а опрашивать флаг другого прерывания, обработать его и сбросить.
А вообще-то в прерывании нужно установить флаг и быстренько выйти. Потом на тот флаг смотреть в основном цикле. Больно и страшно бывает видеть delay_ms(100) внутри прерывания!
makakus вне форума  
Непрочитано 02.07.2009, 12:25   #7
nerozero
Вид на жительство
 
Регистрация: 26.07.2007
Сообщений: 483
Сказал спасибо: 18
Сказали Спасибо 107 раз(а) в 68 сообщении(ях)
nerozero на пути к лучшему
По умолчанию

Сообщение от makakus
Больно и страшно бывает видеть delay_ms(100) внутри прерывания!
Не пугайте так
nerozero вне форума  
Непрочитано 02.07.2009, 13:22   #8
Archer07
Прописка
 
Регистрация: 25.03.2009
Сообщений: 137
Сказал спасибо: 22
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
Archer07 на пути к лучшему
По умолчанию

У меня AVR BUTTERFLY(mega169) демонстрационная отладочная плата,там кварц,LCD,Джойстик,все встроенное.И нет никакой внешней задающие RC-цепи.Кроме кварца нет ничего!Но я точно знаю,что связь организовать на 9600 бодах возможно.
Оригинальная прошивка на нее имеет возможность измерять температуру,проигрывать мелодии,...и отправлять данные в com-порт.
Подскажите пожалуйста способ организовать связь.
Archer07 вне форума  
Непрочитано 02.07.2009, 13:51   #9
ra9mig
Прописка
 
Регистрация: 24.09.2008
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
ra9mig на пути к лучшему
По умолчанию

Такой девайс что-ли?

-- Прилагается рисунок: --
__________________
Если мы вам не подходим, вы нам вовсе не нужны!
Услышал и забыл, увидел и запомнил, сделал и понял!
Нейрон - штука тонкая!
Чудес на свете не бывает!
ra9mig вне форума  
Непрочитано 02.07.2009, 14:07   #10
Archer07
Прописка
 
Регистрация: 25.03.2009
Сообщений: 137
Сказал спасибо: 22
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
Archer07 на пути к лучшему
По умолчанию

На плате установлен кварц вот этот медленный на 32kHz
и еще есть встроенный,на 1MHz.Я еще раз все перечитаю и попробую тогда разобраться..Внешний подключен к XTAL1 и XTAL2.Больше ничего не знаю.Буду читать.
Archer07 вне форума  
Закрытая тема

Закладки


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
USART AVR MODBUS ua_gruzin Микроконтроллеры, АЦП, память и т.д 9 22.04.2012 00:00
Настройка USART AVR на DMX512 anton_avr Микроконтроллеры, АЦП, память и т.д 1 16.07.2009 13:13
Проблема с USART в Atmega8 tvilsa Микроконтроллеры, АЦП, память и т.д 21 14.01.2009 16:27
Регистры r0-r15 у mega169 myxan Микроконтроллеры, АЦП, память и т.д 17 17.12.2008 13:30
Проблема с USART в ATTiny2313 Фокс Микроконтроллеры, АЦП, память и т.д 4 09.04.2005 20:02


Часовой пояс GMT +4, время: 16:24.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot