Страница 1 из 2

PIC - USART не выходит из прерывания

Добавлено: Пн фев 22, 2010 10:55:02
artmasterpro
Происходит следующее: на входе пика RX висит ИК приемник TSOP. При нажатии кнопки на пульте светодиод на RB4 загораеться, и тухнит, и дальше ПИК как вроде зависает. Почему так ? должно же все работать ! в протеусе работает как нужно !


Код: Выделить всё

#include <htc>
 #define _XTAL_FREQ 4000000;
__CONFIG(0x03F72);


void main(void)
{

SPBRG = 129; // 19200 baud @ 4MHz
TXSTA = 0x24; // setup USART transmit
RCSTA = 0x90; // setup USART receive
PORTC = 0; // Clear PORTC
TRISC = 0x80; //

TRISB=0b00000000;


    while(1==1)
    {
   
        if(RCIF)
        {   

PORTC=RCREG;// считываем с регистра чтобы сбросить RCIF в ноль.
RCIF=0;
PORTB=0b00010000;   


            }
    _delay (99000);
_delay (99000);
_delay (99000);
_delay (99000);

PORTB=0b00000000;       
        }





   
}
Разворачивая тему дальше, если я поставлю ИК светодиод на выход TX и отправлю байт смогу ли я принять этот байт приемником tsop и прочитать его с RCREG ?

Спасибо !

Добавлено: Пн фев 22, 2010 11:27:39
urry
а с чего Вы решили, что оно должно работать ? Какая 19200, какой уарт с пульта ???

Добавлено: Пн фев 22, 2010 13:07:02
artmasterpro
Пультом я просто тестирую USART - а в чом ошибка ?

А вообще будет ли приниматься через TSOP Сигнал с ноги TX ?

или как вообще поступить ?

Добавлено: Пн фев 22, 2010 14:56:56
urry
artmasterpro писал(а):Пультом я просто тестирую USART - а в чом ошибка ?

А вообще будет ли приниматься через TSOP Сигнал с ноги TX ?

или как вообще поступить ?
1. используйте чистку флагов ошибки
-----------------------------
#define serial_error() OERR// переполнение буфера
#define nostop() FERR // отсутствие стопового бита
#define serial_fix() {CREN = 0; CREN = 1;}

if(serial_error()) serial_fix();
if (nostop()) RCREG;
------------------------------
2. RCIF=0; - бессмысленная запись, флаг сбрасывается при чтении RCREG
------------------------------
3. тсоп - это усилитель с детектором, если подавать туда уарт, то частота передачи - по максимуму не больше килобита.
-------------------------------
4. Внутри тсопа стоит ару и выдача непрерывного кода - сплошные единицы, например - ни к чему хорошему не приведет, это не его протокол. Он настроен на манчестерский код, вот его туда и посылайте.

Добавлено: Пн фев 22, 2010 15:24:53
artmasterpro
Я спрошу по другому т.к. у меня пока хватает мозгов сделать только часы на пике.

суть в том: нужно сделать на пике ИК датчик (по отражению луча).
Датчик должен быть закодирован т.к. рядом будут использоваться еще 2 таких датчика.

Вопрос как это реализовать ! Хоть где копать ? может есть у когото пример кода, как выдать 36кГц в USART или есть другие способы ?

Пиво вышлю перевозчиком !

Добавлено: Пн фев 22, 2010 17:32:15
urry
http://www.remexpert.com/ipb/topic1000.html
читать только первое сообщение - там уже откорректированный и доведенный до ума вариант от дл36

Добавлено: Вт фев 23, 2010 11:10:45
artmasterpro
порекомендовали такую микросхемку mcp2122 или mcp2120 что скажите ?

Добавлено: Вт фев 23, 2010 16:12:40
urry
В принципе, понятно, откуда ноги растут - http://www.microchip.su/showthread.php? ... #post93566
как Вам там правильно сказали, нет техзадания и решение "в лоб" приведет к засветке всех датчиков.
Вам нужно сказать, для чего все это надо и потом уже выбирать протокол обмена, чтобы каждое устройство работало в своем тайм слоте (я как бы догадываюсь, что устройства однотипные, могу ошибаться) - выработать механизм обработки коллизий - а чем там вы будете передавать - дело десятое. Ну, допустим, кто-то направит пульт от телека на один из датчиков - что тогда ?

Добавлено: Вт фев 23, 2010 16:42:19
artmasterpro
Рассказываю что и для чего нужно:

Есть ночной клуб которому нужно сделать барную стойку вдоль которой ходишь по всей длинне, а за тобой подсветка "ходит".

Т.е. нужно 3 активных ИК датчика (пассивные IRA пробовал сильно тормозят) которые будут при приближени выдавать логическую единицу на своем выходе. Все эти датчики будут включаться в PIC который будет управлять подсветкой.

ТЗ:

- количество датчиков: 3-8
- датчики должны быть построены на принципе отражения от обьекта.
- радиус действия каждого датчика: не более 1м.
- Размеры датчика должны быть минимально малыми.
- датчики могут расспологаться друг на против друга, поэтому должны быть закодированными друг от друга т.е. не перекрывать друг друга.
- допускается использование приемника TSOP или же более миниатюрного TDU

Добавлено: Вт фев 23, 2010 18:12:19
urry
не представляю пока, как это сделать... Ведь тсоп тем и хорош, что позволяет ловить сигнал от всего - от стен, от потолка, от брюк субъекта, который подошел к барной стойке.
Может, что-то в принципе поменять ? Например, что-то типа емкостного реле поставить ?
Не будете ведь систему зеркал городить...

Добавлено: Вт фев 23, 2010 19:08:31
artmasterpro
варианты с емкостными реле в прошлом.

Что меня вдохновило на ИК датчик. Это полочка в мебельном магазине к которой подносишь предмет, хоть кусок пенопласта как на ней включаеться подсветка.

если бе мне нужен был один датчик я взял бе датчик sharp и мне его бы хватило, но беда в том что он такой не один то нужен.

в принцепи грубо говоря можно сделать 2 трубы (для приемника и ИК диода) чтобы ограничить диаграмму направлености TSOP

посмотрите тут видео:
http://www.societyofrobots.com/electron ... rial.shtml

если верить видео ролдику модуль TDU, в паре с mcp2120 работает на расстоянии 1м. И имеет достаточно узкую диаграмму направленности.

Что скажите?

Добавлено: Вт фев 23, 2010 23:35:10
urry
Ну, если я скажу, что мне не нравится - лично Вас это остановит ?
Продолжим разговор после Вашего ответа.

Добавлено: Ср фев 24, 2010 10:28:05
artmasterpro
Нет конечто же меня не остановит, сам процесс создания датчика я продолжу в любом случае. Знаете я не сторонник дурной работы. Поэтому и прошу помощи на форумах, прошу ваших ошибок, чтобы их не повторять. МК занимаюсь недавно, после своего дипломного проекта, в котором я занимался сугубо схематической частью. Теперь пытаюсь вкурить программирование МК. Если Вас интересуют деньги или % давайте обсудим.

Спасибо за помощЬ !

Добавлено: Ср фев 24, 2010 15:14:54
urry
Меня не интересуют ни деньги, ни проценты - я достаточно долго живу в этом мире, чтобы прельщаться мыслью получить их от Вас.
Ничего личного, просто опыт.
Что меня интересует - это вопрос, каким образом Вы собираетесь получить так называемый ик барьер, не покурочив барьерную стойку.
Теоретически можно предположить, что приемники - излучатели Вы захотите расположить на потолке, замаскировав их под датчики пожарной сигнализации.
Исчо варианты ?
На самом деле то, что Вам кажется второстепенным - и есть главное... Написать код на пики - обработать - как раз легче всего, поверьте мне.

Добавлено: Ср фев 24, 2010 15:49:24
artmasterpro
Спасибо на добром слове !
нет все гораздо проще, барная стойка имеет выперающую столешницу. Там полная тень, и не удобно залезть рукой. Т.е. эти мелкие коробочки не будет ни видно ни добраться рукой будет нельзя.
понятно или нарисовать ? т.е. меня интересет сугубо электронная часть по моему ТЗ остальное, есть кому делать и в других стойках можно будет заложить место под датчики в процессе разработки.

Добавлено: Ср фев 24, 2010 15:53:58
Настя
http://radiokot.ru/circuit/digital/home/47/
+ ищем гуглом Инфракрасное дистанционное управление (А.Торес).pdf
и это в помощь http://www.cqham.ru/remote6.htm

// прерывание USART: RX(RB1) - приемник
if (RCIF & RCIE)
{
...тра-та-та
rx_tmp=RCREG;
// RCIF=0;
}

Добавлено: Ср фев 24, 2010 16:20:00
urry
удалить

Добавлено: Ср фев 24, 2010 17:08:48
Настя
Идея отправки данных через TSOP в USART интересна,
но ограниченна сложностью реализации, точнее
человечностью подхода.
И проблема не в перываниях и не в манчестерском кодировании.
А в подготовке правильного сигнала, который будет передаваться
по ИК-каналу и приниматься TSOP. Да и это не проблема.

Задача интересная, но как-то по-дурацки решается.
Есть же датчики движения, есть емкостные датчики,
ультразвукые в конце концов. Тут и микроконтроллеров не надо.
Здесь надо через аналоговые подходы решать, через интенсивность.

Ну и таймслоты для разнесения по объектам.

Добавлено: Ср фев 24, 2010 18:27:36
artmasterpro
Ребята я не буду тратить уймувремени на аргументирование почему именно ИК.

В кратце:
- Емкостные датчики не годяться по причине ложного срабатывания.
- Все существующие датчики движения с линзой фринеля, громоздки и притормаживают иногда.
- УЗ датчики, могут влиять на животных не адекватно если в дальнейшем эта система будет работать не только в рекламе но и в быту, например у меня дома.


Так вот мне кажеться очень простым решение с микросхемой MCP2120. В нее по ходуж просто отправляешь байт и принимаешь через нее. все остальное она делает сама ?

Добавлено: Ср фев 24, 2010 18:46:41
Настя
artmasterpro писал(а):Так вот мне кажеться очень простым решение с микросхемой MCP2120. В нее по ходуж просто отправляешь байт и принимаешь через нее. все остальное она делает сама ?
По поводу "всё остальное" - слишком оптимистично.
К MCP2120 со стороны ИК-приемника и ИК-передатчика надо
типа hsdl1001 HSDL1100 hsdl3600
TFDU4100/TFDS4500/TFDT4500 и подобная херь

Для вас было бы проще/лучше MAX3120 либо аналогом
на схемотехнике MAX3120 из даташита не заморачиваясь с USART.

Не буду тратить время, но есть мнение, что у вас не получится.