Как передать серию цифр по 4-х битной шине
|
|
sanek |
Дата: Пн, 15.06.2009, 22:00 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
84
Замечания:
±
На сайте с 09.04.2009
Статус:
Offline
|
здравствуйте.возможно этот вопрс прост и не достоин вашего внимания но я никак немогу сообразить. возникла задача, передать через четырех битную шину, от одного МК в другой, серию цыфр от 0 до 9 с сохранением каждой цыфры в отдельную переменную.как синхронезировать общение между МК по тойже 4-х битной шине?или это можно сделать без синхронизации? (пробовал несколькими способами без синхрон.-цыфры либо терялись либо одна цыфра записывалась в несколько переменных)
|
|
|
|
DIKTATOR |
Дата: Пн, 15.06.2009, 23:43 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
76
Замечания:
±
На сайте с 24.07.2008
Статус:
Offline
|
Вопрос достоин меня . по 4х битной шине можно передать 16цифр-1синхронизация Пример прередачи и синхронизация: ============================================================== теория: данные 0000 - 0 0001 - 1 0010 - 2 0011 - 3 0100 - 4 0101 - 5 0110 - 6 0111 - 7 1000 - 8 1001 - 9 синхронизация после включения оба мк ждут сигнала 1111 на всех 4х портах, и в зависимости от программы 1 из мк начинает чтото гнать на 2 мк(и слать его на 0011 буквы)) после того как переданы данные 1мк отправляет 1111 (разрыв),при этом 1мк может выполнять другую задачу ожидая когда на шине появятся данные отличные от 1111. начало--данные--разрыв--данные--разрыв 1111------0011------1111-----0001-----1111 =============================================== =============== Прогу чуть позже напишу.
Используйте симулятор ПРОТУЕС !!! Реальная вещь!! Я снова тут, но не всегда свободен.
|
|
|
|
DIKTATOR |
Дата: Вт, 16.06.2009, 01:25 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
76
Замечания:
±
На сайте с 24.07.2008
Статус:
Offline
|
Code ini: clear TRISB = %00000000 PORTB = %00000000 specPER var byte dataCH1 var byte dataCH2 var byte dataCH3 var byte dataCH4 var byte
start: TRISB = %00001111 if portb = %00001111 then start2 'ваша прога goto start
start2: specPER = specPER + 1 if specPER = 1 then startCH1 if specPER = 2 then startCH2 if specPER = 3 then startCH3 if specPER = 4 then startCH4 goto startERR
startCH1: if portb = %00001111 then startCH1 pauseus 10 dataCH1 = portb goto start
startCH2: if portb = %00001111 then startCH2 pauseus 10 dataCH2 = portb goto start
startCH3: if portb = %00001111 then startCH3 pauseus 10 dataCH3 = portb goto start
startCH4: if portb = %00001111 then startCH4 pauseus 10 dataCH4 = portb goto start
startERR: TRISB = %00000000 PORTB = %00000000 portb = dataCH1 pauseus 20 portb = dataCH2 pauseus 20 portb = dataCH3 pauseus 20 portb = dataCH4 pauseus 20 end Сейчас проверю работу в симуляторе. ----------------------------------------------------------------- Проверил, работает всё абсолютно!!! Скажу чесно я не знал что у меня получится, писал просто от головы. dataCH1 = portb и portb = dataCH1 такого я в книге чака хелибейка не видел поэтому решил попробывать,работает! В переменную dataCHхх моментально записываются данные порта Б когда if portb = %00001111 then startCHхх даёт отрицательный ответ, поэтому ради надёжности добавлена пауза 10 микросекунд. В симуляторе всё работает, а вот на практике проверять вам) Программа работает так: начать запись---данные---начать запись---данные---начать запись---данные---начать запись---данные --------1111--------0011-----------1111---------0011-----------1111----------0011----------1111-----------0011 ----------- ---------dataCH1----------------------dataCH2----------------------dataCH3----------------------dataCH4
Используйте симулятор ПРОТУЕС !!! Реальная вещь!! Я снова тут, но не всегда свободен.
|
|
|
|
sanek |
Дата: Вт, 16.06.2009, 20:04 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
84
Замечания:
±
На сайте с 09.04.2009
Статус:
Offline
|
Вот спосибо!!! а синхронезирующий "1111"должен быть после каждой переданой цифры"1111-0001-1111-0010-1111-и т.д."если мне нужно передовать:сначало циф.1 потом циф.2 потом циф.3 и т.д.? http://www.kodges.ru/10129-u....na.html книга по pbp там есть "dataCH1 = portb и portb = dataCH1 " в примерах. еще раз спасибо.
Сообщение отредактировал
sanek - Вт, 16.06.2009, 22:19
|
|
|
|
DIKTATOR |
Дата: Ср, 17.06.2009, 00:00 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
76
Замечания:
±
На сайте с 24.07.2008
Статус:
Offline
|
Quote Вот спосибо!!! а синхронезирующий "1111"должен быть после каждой переданой цифры"1111-0001-1111-0010-1111-и т.д."если мне нужно передовать:сначало циф.1 потом циф.2 потом циф.3 и т.д.? Да именно так надо передавать, но только в конце 1111 ставить ненадо, 1111 в моём примере означает что будет передана цифра поле того как 1111 изменит состояние. Тоесть программа начнёт записывать всё что угодно(0..14 цифры) сразу после того как 1111 изменится например на 1110, и это изменённое состояние(1110) будет записано в переменную. А вам нужен только 4разрядная шина ? может последовательная тоже подойдёт? Могу попробывать сделать пример с надёжной передачей данных через 1 проводок Такое ощущение что я изобрету юсби
Используйте симулятор ПРОТУЕС !!! Реальная вещь!! Я снова тут, но не всегда свободен.
|
|
|
|
sanek |
Дата: Ср, 17.06.2009, 21:17 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
84
Замечания:
±
На сайте с 09.04.2009
Статус:
Offline
|
ЗДРАВСТВУЙТЕ.СПОСИБО ЗА ОТВЕТ, А ТО ВРЕМЕНИ НЕТ ПОСМОТРЕТЬ В ПРОТЕУСЕ . МНЕ НУЖНА 4-Х РАЗРЯДНАЯ ШИНА ТАК КАК ПРИНИМАТЬ ДАННЫЕ ПРЕДПОЛОГАЕТСЯ С ДЕКОДЕРА DTMF. НО ЕСЛИ ВАМ НЕ ТРУДНО Я БУДУ РАД ПРИМЕРУ ПРОГРАММЫ С ПЕРЕДАЧЕЙ ПО ОДНОМУ ПРОВОДУ.ДУМАЮ ЭТО ТОЖЕ ПРИГОДИТСЯ В МОЕМ ПРОЕКТЕ. СПАСИБО ЕЩЕ РАЗ ЗА ПОМОЩЬ.(ЕСЛИ ТАК ДАЛЬШЕ ПОЙДЕТ ЭТО СКОРЕЕ БУДЕТ ВАШ ПРОЕКТ ЧЕМ МОЙ )
|
|
|
|
sanek |
Дата: Пт, 19.06.2009, 22:05 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
84
Замечания:
±
На сайте с 09.04.2009
Статус:
Offline
|
здравствуйте. ВОПРОС DIKTATORу: ПАУЗА МЕЖДУ ПЕРЕДОВАЕМЫМИ ДАННЫМИ ДОЛЖНА БЫТЬ? А ТО ЕСЛИ Я НЕ СТАВЛЮ ПАУЗУ ПРОГРАММА НЕ ЧИТАЕТ ДАННЫЕ А ЕСЛИ СТАВЛЮ< PAUSEUS=0> МЕЖДУ ПЕРЕДОВАЕМЫМИ ЦИФРАМИ, ПРОГРАММА РАБОТАЕТ
|
|
|
|
DIKTATOR |
Дата: Пт, 19.06.2009, 23:51 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
76
Замечания:
±
На сайте с 24.07.2008
Статус:
Offline
|
мк который передаёт должен давать 1111 в шину и после этого удерживать 0011(цифра 3) некоторое время , например 20 микросекунд. мк который принимает ждёт когда передающий отправит 1111 , если это произошло ждать 10 микросекунд (можно меньше) чтобы на шине был нормальный и устойчивый сигнал(я просто смотрел что происходит мк встроенные в плис), и затем сразу после паузы моментально записывает состояние порта. С последователным интерфейсом помоч пока не могу, занет. Скомпилированные программы проверяю в PIC Simulator IDE.
Используйте симулятор ПРОТУЕС !!! Реальная вещь!! Я снова тут, но не всегда свободен.
|
|
|
|
sanek |
Дата: Сб, 20.06.2009, 12:03 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
84
Замечания:
±
На сайте с 09.04.2009
Статус:
Offline
|
здравствуйте передающий МК:1111,0001,pauseus 20,1111,0010,pauseus 20,1111,0011,pauseus 20,и т.д.-я правельно понял?
|
|
|
|
DIKTATOR |
Дата: Сб, 20.06.2009, 13:54 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
76
Замечания:
±
На сайте с 24.07.2008
Статус:
Offline
|
Да правильно. А ещё правильней сделать так: PORTB = %00001111 pauseus 5 PORTB = %00000001 pauseus 20 PORTB = %00001111 pauseus 5 PORTB = %00000010 pauseus 20 Мк который проверяет наличие 1111 на шине может не успеть если программа будет такая: PORTB = %00001111 PORTB = %00000001 pauseus 20 PORTB = %00001111 PORTB = %00000010 pauseus 20 А также желательно чтоб мк имели одинаковую частоту, или корректировать паузы изза разности в частоте. В протеусе не занимаюсь этим, но если возможно то сделайте там обмен 2мк между собой на моём примере. В пик симуляторе программа работала когда я вручную выставлял на шину 1111 и 0011 , тоесть мк передающий может сколь угодно долго держать 1111 на шине, и сколь угодно 0011 к примеру(но обязательно с паузами), принимающий мк зависит от того какой сигнал на шине. Мой пример способен тока передать информацию с одного мк на другой, для двунаправленной связи надо программу побольше делать, или вас однонаправленная связь устроит?
Используйте симулятор ПРОТУЕС !!! Реальная вещь!! Я снова тут, но не всегда свободен.
|
|
|
|
sanek |
Дата: Вс, 21.06.2009, 14:06 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
84
Замечания:
±
На сайте с 09.04.2009
Статус:
Offline
|
БЛИН программа получается худая но длинная боюсь все непоместится. наверное придется искать другой путь. суть моего проекта такова: 1)блок упровления(БУ) 2)несколько упровляемых блоков расположеных вразных частях города(УБ) 3)связь между ними по телефону с помощью DTMF при включении блока упровления на жки появляется меню упровляемых блоков. выбрав нужный нажимаем ОК, БУ дает команду телефону набрать номер выбранного УБ УБ реагирует на вызов поднемает трубку и отсылает меню подключенных к нему устройств в БУ выбираем из появившегося на жки подключеного к БУ меню, нужное устройство нажимаем ОК. БУ дает в микрофон телефона команду в виде DTMF УБ получив команду отсылает в БУ меню функций которые можно произвести с этим устройством. снова выбераем нужную строчку в появившемся меню нажимаем ОК получаем результат этот вариант с которым (огромное вам спасибо) вы мне помогли, наверное не подойдет так как только тексты меню займут всю память МК а там еще упровлять надо можно наверное не парится и не передовать меню от одного МК другому а прописать их в МК БУ есть какие нибуть идеи? прекрипляю часть наших с вами трудов там фаил для протеуса.если у вас нет протеуса могу выслать по мылу портабельную версию. Добавлено (21.06.2009, 14.06.29) --------------------------------------------- а можно записать эту прогамму PORTB=$00001111 PAUSEUS 20 PORTB=$00000101 PAUSEUS 20 PORTB=$00001111 как нибудь одной строкой(думаю врятли но всеже)? А то у меня одно меню занимает около 320 строк а количество этих меню =16+упровление.
Сообщение отредактировал
sanek - Вс, 21.06.2009, 17:35
|
|
|
|
sanek |
Дата: Ср, 15.07.2009, 21:04 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
84
Замечания:
±
На сайте с 09.04.2009
Статус:
Offline
|
нашел один вариант, количество строк уменьшил в 3,5 раза прикрепляю, может увидете где можно еще сократитьДобавлено (15.07.2009, 19.56.16) --------------------------------------------- блин всю голову сломал как передать с одного мк на другой информацию для отоброжения на ЛСД (это меню) 4 строки по 10 символов причем используя четырех битный код(DTMF) пробовал передовать одну букву как сумму двух цыфр, долго и памяти занемает много. хотел откозатся от передачи и прописать все меню в отдельном мк(их должно быть 64)не влезает поломав голову всетаки решил что нужно передовать с одного мк на другой но как это сделать придумать не могу помогите намеком в каком напровлении мне двигатся. Добавлено (15.07.2009, 21.04.32) --------------------------------------------- я тут подумал может я зациклился на DTMF,существуют ли другие способы передачи команд и информации с одного МК на другой через GSM телефоны в режиме реального времени.
Сообщение отредактировал
sanek - Вс, 21.06.2009, 17:49
|
|
|
|
Dmitry |
Дата: Пт, 17.07.2009, 22:40 | Сообщение # 13 |
Группа:
Пользователи
Ранг:
Могу и подсказать
Сообщений:
157
Замечания:
±
На сайте с 12.05.2009
Статус:
Offline
|
Quote (sanek) можно наверное не парится и не передовать меню от одного МК другому а прописать их в МК БУ есть какие нибуть идеи? Насколько я понял, вы пытаетесь четырехбитным кодом передавать текстовые символы меню?. Т.е. по два кода на один символ? Если да, то действительно, и долго, и памяти сожрет немеряно. Более правильно прописать все эти меню и подменю в блоке управления, а DTMF-ом передавать только ID (код то бишь) нужного меню. Или меню/подменю УБ будут меняться постоянно в процессе эксплуатации? Quote (sanek) хотел откозатся от передачи и прописать все меню в отдельном мк(их должно быть 64) Вот это правильное решение А в каком виде прописаны меню? Команду lookup для размещения меню в памяти МК не пробовали? а если все-таки не влезает, то нет ничего проще - цепляем к двум любым ножкам флеш-память 24Схх и читаем ее командой I2CRead. Туда не только текст, туда и звуковой комментарий приятным женским голосом записать можно Quote (sanek) через GSM телефоны в режиме реального времени В старых сименсах, я знаю, протокол общения с его встроенным модемом открытый, т.е. можно использовать такой телефон как модем, заставляя его позвонить, отправить смс-ку и т.п. с помощью АТ-команд. (командой serout). Или можно использовать обычный модем для аналоговой телефонной линии - тоже управляется AT-командами через serout. Этой же командой и байты передавать после установления соединения. Эти модемы сейчас уже почти никому не нужны, наверняка можно накупить по дешевке.
Сообщение отредактировал
Dmitry - Сб, 18.07.2009, 00:31
|
|
|
|
sanek |
Дата: Пн, 20.07.2009, 19:01 | Сообщение # 14 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
84
Замечания:
±
На сайте с 09.04.2009
Статус:
Offline
|
Да меню/подменю УБ будут меняться постоянно в процессе эксплуатации. и удобство передачи меню в том что не требуется постоянно перешивать блок упровления при появлении новых устройств подключаемых к блоку упровления.
Сообщение отредактировал
sanek - Пн, 20.07.2009, 19:08
|
|
|
|
Dmitry |
Дата: Чт, 23.07.2009, 02:35 | Сообщение # 15 |
Группа:
Пользователи
Ранг:
Могу и подсказать
Сообщений:
157
Замечания:
±
На сайте с 12.05.2009
Статус:
Offline
|
Если разновидностей устройств, подключаемых к УБ, конечное число (и их названия известны), а также известны все возможные пункты меню, которые могут быть в УБ, то лучше все-таки сделать табличку соответствия и каждому пункту меню и каждому устройству, подключаемому к УБ, назначить свой код, который и передавать в БУ. Я тоже раньше, когда писал базы данных, в поле, где могло быть всего десятка 2 фиксированных названий, все эти названия текстом и записывал, вместо того, чтобы сделать поле числовым и записать туда номер нужного названия. Потом понял, что неправ, развивать и переделывать базу было неудобно.
|
|
|
|