Например TDA7294

Форум РадиоКот • Просмотр темы - ATxmega128A1: Имеет ли право на жизнь прог-ма
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт мар 28, 2024 11:20:35

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 4 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: ATxmega128A1: Имеет ли право на жизнь прог-ма
СообщениеДобавлено: Пт май 20, 2011 13:20:13 
Родился

Зарегистрирован: Пт май 20, 2011 12:45:19
Сообщений: 2
Рейтинг сообщения: 0
Здравствуйте, уважаемые пользователи форума!

Имеется (в теории): ATxmega128A1, датчик давления в выходом на 0-5В, драйвер RS-232 (ADM202), Zigbee (AT86RF230).
Задача: Соединить это всё. Напряжение с датчика давления подаётся на АЦП в МК, с МК раздаётся на RS-232 и Zigbee.
Zigbee через SPI. RS-232 через USART и работает для прошивки МК.

Перелопатил мануалы. Вот что получилось.

.include "m128def.inc"
.org $0000
rjmp INIT ;Переход на секцию инициализации
.org $000E
rjmp ADC_Complete ;Прерывание от АЦП
.org $0030

;==================
;Обработчик прерывания:
ADC_Complete:
in r17,ADCH
reti

;==================

;Одна большая инициализация
INIT:
;Инициализация стека:
ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16


;Инициализация АЦП:
ldi r16,0x00
out admux,r16
ldi r16,0b10111110
out ADCSRA,r16


;Инициализация SPI как MASTER
SPI_MasterInit:
; Установка MOSI и SCK на вывод, все остальные на ввод
ldi r17,(1<<DDC5)|(1<<DDC7)
out DDRC,r17
; Разрешение SPI в режиме мастера, установка скорости связи fck/16
ldi r17,(1<<SPE)|(1<<MSTR)|(1<<SPR0)
out SPCR,r17
ret

;параметры скорости записаны в r16, r17

ldi r16, low(0x33)
ldi r17, high(0x33)


USART_Init:
; Установка скорости связи
out UBRRH, r17
out UBRRL, r16
; Разрешение работы приемника и передатчика
ldi r16, (1<<RXEN)|(1<<TXEN)
out UCSRB,r16
; Установка формата посылки: 8 бит данных, 2стоп-бита
ldi r16, (1<<USBS)|(3<<UCSZ0)
out UCSRC,r16
ret



proga:

USART_Transmit:
; Ожидание освобождения буфера передатчика
sbis UCSRA,UDRE
rjmp USART_Transmit
; Помещение данных (r17) в буфер, отправка данных
out UDR,r17
ret



USART_Receive:
; Ожидание окончания приема данных
sbis UCSRA, RXC
rjmp USART_Receive
; Загрузка принятых данных из буфера
in r16, UDR
ret



SPI_MasterTransmit:
; Запуск передачи данных (r16)
out SPDR,r17
Wait_Transmit:
; Ожидание завершения передачи данных
sbis SPSR,SPIF
rjmp Wait_Transmit
ret


rjmp proga


Будет ли правильно работать?

Заранее благодарю.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATxmega128A1: Имеет ли право на жизнь прог-ма
СообщениеДобавлено: Пт май 20, 2011 14:15:21 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 234
Зарегистрирован: Пт янв 29, 2010 10:27:40
Сообщений: 3850
Откуда: Москва
Рейтинг сообщения: 0
Не будет, без некоторых переделок.
1) Inc-файл от меги128, у вас Xmega, это совершенно разные контроллеры (честно говоря даже не знаю где взять инк от ИКС-меги)
2) По всему коду куча не нужных ret. Ret ставится в конце подпрограммы, а у вас они и в инициализации и в главном цикле. Впечатление, что куски надергали из разных примеров то ли невнимательно, то ли без понимания. Либо уберите, либо оформляйте эти блоки отдельными процедурами и вызывайте из основной программы через Rcall.
3) Прерывания (АЦП) не разрешены (нет SEI в инициализации).
4) В SPI точно не нужна линия CS? (посмотрел ДШ на RF230 - нужна, там называется SEL)
5) Исходя из логики программы (при условии, если бы она работала), получается что МК
- постоянно передает последнее значение АЦП в UART и SPI (USART_Transmit, SPI_MasterTransmit). Зачем постоянно передавать? АЦП сработало - передаем, потом ждем.
- постоянно принимает данные из UART и ничего с ними не делает(USART_Receive). Зачем? Если для будущих целей управления, то сделать по прерыванию.
6) Скорее всего ZigBee еще надо инициализировать какими-то настройками, ДШ влом подробно читать...

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATxmega128A1: Имеет ли право на жизнь прог-ма
СообщениеДобавлено: Пн май 23, 2011 11:23:15 
Родился

Зарегистрирован: Пт май 20, 2011 12:45:19
Сообщений: 2
Рейтинг сообщения: 0
Ошибки усвоил. Только вот по поводу 5ого пункта есть вопросы: "АЦП сработало - передаем, потом ждем." и "Если для будущих целей управления, то сделать по прерыванию." как это организовать? моих знаний пока на это не хватает. Вчера поставил новую AVR Studio 5, там есть для Хмега inc-файл. Вся прога вообще никак не будет работать плоть до инициализации стека...буду искать другой попроще МК...


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: ATxmega128A1: Имеет ли право на жизнь прог-ма
СообщениеДобавлено: Пн май 23, 2011 13:16:57 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 234
Зарегистрирован: Пт янв 29, 2010 10:27:40
Сообщений: 3850
Откуда: Москва
Рейтинг сообщения: 0
Мысль про МК попроще правильная, Xmega великовата для такой задачки.
Что касается 5-го пункта, там все просто. У вас уже имеется прерывание АЦП, вот в нем можно и сразу передавать полученное значение через UART и SPI. А если нужно управлять работой контроллера, то нужно написать обработчик прерывания по приходу байта по UART и блок анализа этого байта (или строки). Тогда основной цикл будет состоять из одной строчки.
Код:
proga: RJMP proga

Еще лучше будет, если использовать отдельный регистр с флагами, чтобы в самом обработчике не делать ничего громоздкого, только подготовительные операции и установка флага. Например:
Код:
ADC_Complete:
in r17,ADCH ;сохранить значение АЦП
SBR Flags,0x01 ;установить флаг готовности данных к передаче
reti
...
...
...
proga:
SBRC Flags,0 ;проверить флаг готовности к передаче
RJMP proga ;переход на начало, если флаг не установлен
RCALL USART_Transmit ;передать по UART
RCALL SPI_MasterTransmit ;и по SPI
CBR Flags,0x01 ;сбросить флаг


Вернуться наверх
 
Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель.

Подробнее>>
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y