Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 25.08.2015
Сообщений: 13
1

Attiny 13 прием и передача ик сигнала

28.01.2016, 14:30. Просмотров 1773. Ответов 17
Метки нет (Все метки)

Здравствуйте форумчане,объясните пожалуйста не опытному , как принять ик сигнал ,то есть с тиньки 13 я передаю ик сигнал с определенным кодом и на этот же контролер допустим на ножку порт б 3 мне нужно принять этот сигнал ,и если он соответствует то на 4 порту включить светодиод,вот код передачи ик сигнала,с этим более менее разобрался
а вот как принять не могу сообразить

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <tiny13a.h>
#include <delay.h>
int k=1;
 
 
// Timer 0 output compare A interrupt service routine
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
 PORTB.0=1; 
}
 
 
 
 
void main(void)
{
// Declare your local variables here
 
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
 
// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=In Func3=In Func2=In Func1=In Func0=Out 
// State5=T State4=T State3=T State2=T State1=T State0=0 
PORTB=0b000100;
DDRB= 0b001001;
 
 
 
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 9600,000 kHz
// Mode: CTC top=OCR0A
// OC0A output: Toggle on compare match
// OC0B output: Disconnected
TCCR0A=0x42;
TCCR0B=0x01;
TCNT0=0x00;
OCR0A=0x84;
OCR0B=0x00;
 
// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;
 
// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x04;
 
// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;
 
// Global enable interrupts
#asm("sei")
 
while (1)
      {
          TCCR0A=0x42;
          delay_us(500); 
          TCCR0A=0x00;
          delay_us(1000);
          k++;
          if (k==14) {delay_ms(110);k=0;PORTB.0=0;}   
          
      };    
           
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.01.2016, 14:30
Ответы с готовыми решениями:

Прием сигнала.
Здравствуйте уважаемые. Прошу помоч с одним вопросом. Есть прибор, уздающий аналоговый сигнал,...

Прием сигнала по RS-232
Здравствуйте, специалисты, помогите пожалуйста разобраться с приемом по RS-232, пол дня потратил...

Поиск и прием gps сигнала
Программирую в с# под windows phone. Но с кибернетикой реально не дружу. Даже осёл лучше знает...

Улучшить приём Wi-Fi и качество сигнала
Имеется П-образное здание. Источник Wi-Fi сигнала расположен в углу здания, в кабинете на 1 этаже....

17
1775 / 1106 / 108
Регистрация: 04.01.2010
Сообщений: 3,875
28.01.2016, 15:01 2
Цитата Сообщение от mrbin-79 Посмотреть сообщение
код передачи ик сигнала,с этим более менее разобрался
не разобрались.
Цитата Сообщение от mrbin-79 Посмотреть сообщение
как принять
...если не стоит задача реализовать RC5 или подобный ему протокол, а только принимать собственные последовательности - в тиньке13, если мне не изменяет склероз, есть модуль "USI" (universal serial interface). Можете использовать его в дуплексном режиме. Ну, или попробовать сделать все на внешних прерываниях и таймере - тоже все отлично получится.
1
0 / 0 / 0
Регистрация: 25.08.2015
Сообщений: 13
28.01.2016, 15:39  [ТС] 3
Rc 5 мне не нужно,мне нужно принять собственный сигнал на этот же контролер
0
894 / 535 / 80
Регистрация: 15.05.2012
Сообщений: 3,161
28.01.2016, 19:31 4
С какой частотой формируете ИК-сигнал? Эпюру бы посмотреть.
0
0 / 0 / 0
Регистрация: 25.08.2015
Сообщений: 13
28.01.2016, 19:46  [ТС] 5
С частотой 36 кгц
0
15 / 15 / 2
Регистрация: 08.02.2013
Сообщений: 198
05.02.2016, 23:29 6
А как по уарту принять rc5 ? чтоб в цикле не ожидать команды, а по прерыванию
0
1775 / 1106 / 108
Регистрация: 04.01.2010
Сообщений: 3,875
06.02.2016, 03:31 7
Цитата Сообщение от Грот Посмотреть сообщение
А как по уарту принять rc5 ?
UART не поддерживает RC5. Однако, это не мешает принимать "хоть что-то" по нему от дистанционок, причем, это "что-то" будет отличаться по содержанию, в зависимости от нажимаемой функции. Описание RC5 есть здесь.
1
1278 / 1184 / 175
Регистрация: 02.12.2013
Сообщений: 4,886
06.02.2016, 07:55 8
Цитата Сообщение от mrbin-79 Посмотреть сообщение
С частотой 36 кгц
Вы уверены, что это скорость передачи, а не частота модуляции???
0
15 / 15 / 2
Регистрация: 08.02.2013
Сообщений: 198
08.02.2016, 17:36 9
Attiny 13 прием и передача ик сигнала

Если частоту uart настроить так, чтобы длительность двух его бит равнялась длительности одного бита rc-5, то можно два бита принятых по uart преобразовать в бит rc5. Например бити 0 1 в бит 1, а биты 1 и 0 в бит 0, в других случаях ошибка, и посылка просто игнорируется. Совпало так что стартовый бит rc5 - 1, что соответствует битам 0 и 1, т.е. первый бит 0 будет всегда стартовый для uart. В режиме 8 бит и один стоповый без контроля, получится принять только 5 битов rc5 по прерыванию, а как принять остальные 9 бит? Чтобы сразуже без старт бита?
0
15 / 15 / 2
Регистрация: 08.02.2013
Сообщений: 198
08.02.2016, 17:59 10
Проще говоря как сделать так, чтобы UART был настроен какбы на 28 бит?

Добавлено через 2 минуты
Меня вообще ктонить понял?

Добавлено через 3 минуты
Может поприхду первого байта в UART преобразовать этот байт в пять битов RC-5, и если они корректны, отключит UART, а остальные биты перебрать вручную? Потом проверить все 14 бит на корректность целиком, выполнить команду нажатой кнопки и опять включить уарт?
0
1775 / 1106 / 108
Регистрация: 04.01.2010
Сообщений: 3,875
08.02.2016, 18:03 11
Цитата Сообщение от Грот Посмотреть сообщение
а как принять остальные 9 бит?
Никак. Правило наличия старт-бита и хотя бы одного стоп-бита - незыблемы для уарта. Соответственно, я вам писал уже, он не подходит для приема RC5.
Цитата Сообщение от Грот Посмотреть сообщение
Меня вообще ктонить понял?
чем дальше, тем меньше
1
11 / 11 / 2
Регистрация: 22.02.2012
Сообщений: 115
09.02.2016, 11:22 12
Делал, такой же проект, включал подсветку когда подходишь к зеркалу, если интересно могу Вам скинуть проект.
0
0 / 0 / 0
Регистрация: 25.08.2015
Сообщений: 13
14.02.2016, 18:30  [ТС] 13
Скинте пожалуйста
0
11 / 11 / 2
Регистрация: 22.02.2012
Сообщений: 115
15.02.2016, 09:14 14
Цитата Сообщение от mrbin-79 Посмотреть сообщение
Скинте пожалуйста
Вот, внутри код и печатная плата (файл .lay). Писал очень давно, товарищ попросил сделать ему подсветку. Устройство отправляет код, и если считанный совпадает с отправленным - выставляет уровень на ноге, надеюсь Вам поможет!
2
Вложения
Тип файла: zip Tiny_Tsop.zip (49.8 Кб, 17 просмотров)
0 / 0 / 0
Регистрация: 25.08.2015
Сообщений: 13
15.02.2016, 12:48  [ТС] 15
Спасибо большое! это мне и надо.

Добавлено через 1 час 42 минуты
У меня к вам еще одна просьба,просто я в программирование полный ноль,могу только светодиодом помигать и все,если конечно не трудно,если трудно то не надо,задача такая по вашей программе,поступил сигнал на ножку,загорелся первый светодиод,если первый светодиод горит более двух минут то включить второй светодиод на 10 минут,а если сигнал с ножки пропал выключить первый светодиод через минуту
0
11 / 11 / 2
Регистрация: 22.02.2012
Сообщений: 115
15.02.2016, 14:54 16
Я думаю вы можете сами это сделать, в том месте где
C++
1
2
3
4
5
6
            if (time.sec4)
            {                                                         //если счётчик 4-х сек не закончился,
            time.sec4--;                                              //уменьшаем его 
            PORTB.0 = 1;                                              // и зажигаем светодиод
            }                                           
            else PORTB.0 = 0;                                         //иначе тушим светодиод
Заведите глобальную переменную и меняйте ее состояние. В главном цикле проверяйте ее и включайте выключайте - все, что Вам нужно.
0
0 / 0 / 0
Регистрация: 25.08.2015
Сообщений: 13
17.02.2016, 19:31  [ТС] 17
Пример можете дать? как с ней работать
0
11 / 11 / 2
Регистрация: 22.02.2012
Сообщений: 115
18.02.2016, 09:07 18
Цитата Сообщение от mrbin-79 Посмотреть сообщение
Пример можете дать? как с ней работать
С чем с ней? С Тиной? Можете использовать мой проект как пример, или вы про глобальную переменную? Глобальные переменные объявляются вне тела какой-либо функции, это такая переменная, которая будет видна в любой точке программы, и задав ей значение в прерывании, вы сможете ее опрашивать в главном цикле, и уже включать выключать все, что Вам нужно.
Это основы языка.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.02.2016, 09:07

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Прием сигнала с пульта радио управления
Всем привет. Хочу использовать stm32 для управления машинкой ( знаю что stm32 слишком круто для...

Заблокировать прием сигнала по нажатию на заголовок столбца таблицы
Добрый вечер. Пытаюсь реализовать сортировку столбца таблицы по нажатию на заголовок столбца (в...

Что отвечает за приём сигнала wi-fi, какой чип подобрать?
Есть желание проэкспериментировать с приёмом сигнала, поэтому хочется сделать, а лучше приобрести...

ИК прием передача
Здравствуйте. Мне нужно сделать ИК приемо-передатчики. Возможно ли подключение ИК диода и ТСОП...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.