Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 2 из 3«123»
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Помогите раставить числа (Как создать бинарное число из DEC чисел)
Помогите раставить числа
Alexej79 Дата: Пн, 18.02.2013, 01:11  |                                                                                                                Сообщение # 16
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 78
Репутация: 0   ±
Замечания:   ±
На сайте с 16.08.2010

Статус: Offline

Ребят, вопрос аналогичный как записать побитно байт?
Тема смотрю не развилась. amid-,  как ты реализовал задачу. Есть такая же задача считать с пулита сигналы (протокол NEC) и хотябы вывести на лсд код сигнала.
Подробнее это выглядит так путём замера время паузы устанавливаем логичиский 0 при короткой и логичиский 1 при длинной.

таких замеров производим два раза по 8 каждый должно получится в результате типа

01001101 как то так.
ЯНДЕКС Дата: 18.02.2013
ivan_fd Дата: Пн, 18.02.2013, 12:22  |                                                                                                                Сообщение # 17
Группа: Модераторы
Ранг:  Специалист
Сообщений: 899
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Так уже писали выше. Вам так не подходит?

Код
If короткое then
   bait.x = 0
else
   bait.x = 1
endif


Меня все время преследуют умные мысли...но я быстрее!!!
Alexej79 Дата: Пн, 18.02.2013, 14:56  |                                                                                                                Сообщение # 18
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 78
Репутация: 0   ±
Замечания:   ±
На сайте с 16.08.2010

Статус: Offline

ivan_fd,  Что то не понятно а как цикл замеров сделать надо 32 раза замерить ноль это или один. Потом анализировать.
ivan_fd Дата: Пн, 18.02.2013, 15:10  |                                                                                                                Сообщение # 19
Группа: Модераторы
Ранг:  Специалист
Сообщений: 899
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Так у Вас, что 32 бита должно быть? Как вы замеряете???

Меня все время преследуют умные мысли...но я быстрее!!!
Alexej79 Дата: Пн, 18.02.2013, 15:32  |                                                                                                                Сообщение # 20
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 78
Репутация: 0   ±
Замечания:   ±
На сайте с 16.08.2010

Статус: Offline

ivan_fd, Загляни в личку.
доцент2 Дата: Пн, 18.02.2013, 16:22  |                                                                                                                Сообщение # 21
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 332
Репутация: 1   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

надо создать массив 33.

импульс начала передачи (не стартовый).

первые 8 - это адрес (он соответствует например телевизору, видику и д.т.)
следом  8 - это адрес в инверсии (нужен для проверки, можно не использовать)
дальше 8 - это код команды
дальше 8 - это код команды в инверсии (для проверки)

1. надо создать переменную массива до 33 типа Word (т.к. длительность первого импульса более 255)
2. объявить переменные адреса и команды, если нужно и для инверсной формы. переменные типа Byte
3. считать в цикле сигнал записав его в массив
4. перевести результаты записанные в массиве в 1 или 0 и записать обратно в этот же массив.
5. а теперь получить например адрес можно так:
adres.0=X[1]
adres.1=X[2]
adres.2=X[3]
......
adres.7=X[4]
и .т.д.
чтение начинаем с X[1], т.к. X[0] - это начало передачи. По данной переменной можно определить повтор команды.

6. теперь делайте с переменными адреса и команды, что угодно!

Сообщение отредактировал доцент2 - Пн, 18.02.2013, 16:31
Alexej79 Дата: Вт, 19.02.2013, 14:46  |                                                                                                                Сообщение # 22
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 78
Репутация: 0   ±
Замечания:   ±
На сайте с 16.08.2010

Статус: Offline

доцент2, Можешь накидать пример программы на Proton PicBasic
Zt могу разобраться с массивом. Прописываю числовые переменные а вывести на lcd не могу. 
Пишу Str MyArray и не чего не происходит. С буквами же всё ок.
доцент2 Дата: Вт, 19.02.2013, 18:12  |                                                                                                                Сообщение # 23
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 332
Репутация: 1   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

Если я правильно понял проблему Вы не можете вывести данные массива на дисплей?
Dim Adres As Byte
adres.0=1
adres.1=0
adres.2=1
......
adres.7=1

Print At 1,1,Bin8 Adres    ' вывод на дисплей адреса в двоичном виде
Print At 2,1,Dec Adres   ' вывод на дисплей адреса в десятичном виде
Alexej79 Дата: Пн, 25.02.2013, 23:58  |                                                                                                                Сообщение # 24
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 78
Репутация: 0   ±
Замечания:   ±
На сайте с 16.08.2010

Статус: Offline

доцент2
Пунк номер три непонятен.

делаю цикл типа

For i = 0 To 7

Massiv i = Ir_Impuls
Next 
Протон выдаёт ошибку
как только не пробывал записать всегда синтаксическая ошибка.
Massiv [i]ошибка
Massiv. [i]ошибка
Massiv в круглых скобках с точкой, без оной всё одно ошибка.
Как будет правильно записать массив в цикле?
anatol Дата: Вт, 26.02.2013, 02:05  |                                                                                                                Сообщение # 25
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 550
Репутация: 14   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Alexej79, Ir_Impuls  должен быть: 1) объявлен, 2)иметь ту же величину что и Massiv, 3) высчитываться в теле цикла, иначе будет одно и тоже значение
Massiv должен быть: 1) объявлен, 2)указана длина.
Massiv совместно с "i" указывает на переменные Massiv1,Massiv2,.....Massiv7 - и ни одна из них не объявлена вот Протон и ругается.
Более того - общее количество, с учетом размера, переменных (часть зарезервировано за процессором) не может превышать размер ОЗУ.
доцент2 Дата: Ср, 27.02.2013, 00:32  |                                                                                                                Сообщение # 26
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 332
Репутация: 1   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

считать в цикле можно так:
Dim   X [36]  As  Word   взял массив из 36, но это для эксперимента, а так и 33 достаточно

I=0
For I=0 To 32
X[I]=PulsIn PORTB.0, High'low
If X[0]<400 Then GoTo WWW
Next I
приемник ИК выдает кодовую посылку в инверсии. для протокола NEC первый импульс будет более 400мс,
т.е. если длительность импульса соответствует протоколу, то продолжаем считывание.

Сообщение отредактировал доцент2 - Ср, 27.02.2013, 00:34
ivan_fd Дата: Ср, 27.02.2013, 12:56  |                                                                                                                Сообщение # 27
Группа: Модераторы
Ранг:  Специалист
Сообщений: 899
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Написал декодер NEC. В железе не проверял, так как нету железа.
Возможно, при настройке, нужно будет подправить тайминги, сменив числовые значения в IF-ах.

Пробуйте.
Прикрепления: NEC.zip(40Kb)


Меня все время преследуют умные мысли...но я быстрее!!!
доцент2 Дата: Ср, 27.02.2013, 23:28  |                                                                                                                Сообщение # 28
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 332
Репутация: 1   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

слишком мудрено! и где результат работы программы в протеусе?
что на входе? почему дисплей пустой? что проверять в железе?
можно и без прерываний и гораздо проще.
ivan_fd Дата: Пт, 01.03.2013, 00:07  |                                                                                                                Сообщение # 29
Группа: Модераторы
Ранг:  Специалист
Сообщений: 899
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Файл протеуса я прикрепил, какие результаты Вам нужны?

Как Вы себе представляете просимулировать в Протеусе IR датчик.

Дисплей здесь не при чем, взят проект Alexej79, вместе с файлом протеуса и переделан.
Цитата
можно и без прерываний и гораздо проще.
 
А кто сказал, что не можно? Но на прерываниях надежнее. Да и ничего здесь сложного нету.


Меня все время преследуют умные мысли...но я быстрее!!!
доцент2 Дата: Пт, 01.03.2013, 19:37  |                                                                                                                Сообщение # 30
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 332
Репутация: 1   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

зачем предоставлять демонстрационный файл, если он ни чего не показывает?
эмитировать датчик в протеусе не пробывал, у меня все на макетке.
но кстати в протеусе мне попадалась модель ИК приемника и передатчика. работать с ними не пробовал.
что касается прерываний:
1. плотно я этим не занимался. один раз попробовал, но при работе терялся первый импульс, что приводило к сбоям в декодировании сигнала.
2. пока я использую работу с ИК в простых программах - принял код-выполнил-ждем следующий код.
3. в некоторых программах действительно без прерываний не обойтись. надо учится!
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Помогите раставить числа (Как создать бинарное число из DEC чисел)
Страница 2 из 3«123»
Поиск: