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

 
 
> Обработка DMX512, Нужна помощь! СРОЧНО!!!
yrbis
сообщение May 1 2007, 18:11
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 953
Регистрация: 26-07-05
Из: Питер
Пользователь №: 7 112



Подскажите, плз, как приспособить PIC16F876 под прием этого долбанного DMX512... Не удается никак принять второй байт в пачке. Использую встроенный USART, но у меня постоянно устанавливается ошибка приема FERR. Может что-то натупил с алгоритмом:
0. сбрасываю CREN и SPEN в RCSTA
1. жду "0"
2. если длина этого "0" меньше ~88us, перехожу к 1.
3. жду "1"
4. устанавливаю SPEN и CREN в RCSTA
5. жду прихода байта по флагу RCIF в PIR1
6. если была ошибка при приеме (установлены: бит FERR или OERR в RCSTA), то вызываю RX_ERR и иду к 0.
7. если байт в RCREG != 0, иду к 5.
8. жду прихода второго байта по флагу RCIF в PIR1
9. если была ошибка при приеме (установлены: бит FERR или OERR в RCSTA), то вызываю RX_ERR и иду к 0.
10. посылаю байт из RCREG в PORTB на ЦАП
11. иду к 0.

Функция RX_ERR стирает RCSTA и мигает диодом на плате...

После запуска диод постоянно мигает а на входах ЦАПа нули...

Короче, если кто-нибудь знает нормально-работающий код для приема DMX512 -- напишите!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
DL36
сообщение May 3 2007, 10:17
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006



Цитата(yrbis @ May 1 2007, 18:11) *
Подскажите, плз, как приспособить PIC16F876 под прием этого долбанного DMX512... Не удается никак принять второй байт в пачке. Использую встроенный USART, но у меня постоянно устанавливается ошибка приема FERR. Может что-то натупил с алгоритмом:
0. сбрасываю CREN и SPEN в RCSTA
1. жду "0"
2. если длина этого "0" меньше ~88us, перехожу к 1.
3. жду "1"
4. устанавливаю SPEN и CREN в RCSTA
5. жду прихода байта по флагу RCIF в PIR1
6. если была ошибка при приеме (установлены: бит FERR или OERR в RCSTA), то вызываю RX_ERR и иду к 0.
7. если байт в RCREG != 0, иду к 5.
8. жду прихода второго байта по флагу RCIF в PIR1
9. если была ошибка при приеме (установлены: бит FERR или OERR в RCSTA), то вызываю RX_ERR и иду к 0.
10. посылаю байт из RCREG в PORTB на ЦАП
11. иду к 0.

Функция RX_ERR стирает RCSTA и мигает диодом на плате...

После запуска диод постоянно мигает а на входах ЦАПа нули...

Короче, если кто-нибудь знает нормально-работающий код для приема DMX512 -- напишите!!!

Какого плана ошибка? Переполнение или кадра.
Постоянно выключать модуль USART не надо(SPEN) достаточно выключить прием(CREN)
Go to the top of the page
 
+Quote Post
yrbis
сообщение May 6 2007, 15:59
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 953
Регистрация: 26-07-05
Из: Питер
Пользователь №: 7 112



Цитата(DL36 @ May 3 2007, 14:17) *
Какого плана ошибка? Переполнение или кадра.
Постоянно выключать модуль USART не надо(SPEN) достаточно выключить прием(CREN)


Проблема была по большому счету с переполнением... Я не выключал приемник сразу после удачного чтения, и он естесственно читал дальше и вызывал постоянное переполнение...
А вообще хотелось бы увидеть правильный код обработчика протокола DMX512, а то, например, сейчас иногда виснет PIC на строках:

BTFSS PIR1, RCIF
GOTO $-1

если включить сначала плату с ПИКом, а потом модуль DMX512.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 18:54
Рейтинг@Mail.ru


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