Обмен с портами - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: ivan_fd 
Форум Picbasic.ru » Программирование МК » PicBasicPro » Обмен с портами (485,232 и другие виды обмена)
Обмен с портами
nic Дата: Вс, 18.11.2007, 20:29  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Новенький
Сообщений: 7
Репутация: 0   ±
Замечания:   ±
На сайте с 23.10.2007

Статус: Offline

Вот такая загвоздка у меня вышла , нужно связать контроллер PIC16F877 c паролельным портом копьютера работающего с уже готовой программой . Формат передачи которой 8N1 при скорости 150 бод/сек, причем первым байтом всегда идет признак начала посыли FF а заним байт с номером адреса к которму обращается программа .
Вот этот байт адреса мне и нужно получить , но используя операторы Hserin,Serin и Serin2 получить приема даных на скорости ниже 300 бод/сек неполучилось . А при использование оператора Debugin принимает правильно , но в нем не работает модификатор WAIT (хотя в мануале описано что все должно быть ОК ). Кто что может посоветовать ?

Сообщение отредактировал nic - Вс, 18.11.2007, 20:30
ЯНДЕКС Дата: 18.11.2007
Romario Дата: Вс, 18.11.2007, 22:58  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 61
Репутация: 0   ±
Замечания:   ±
На сайте с 14.09.2007

Статус: Offline

Вам необходимо передавать данные в формате параллельного порта, а формат 8N1 не подходит для связи с параллельным потом.
nic Дата: Чт, 22.11.2007, 22:35  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Новенький
Сообщений: 7
Репутация: 0   ±
Замечания:   ±
На сайте с 23.10.2007

Статус: Offline

Получилось используя оператор Debugin !!! Выставил 150 бод/сек. и ожидание стартового байта(wait) после чего захват следующих двух и их обработка. Прибор получился и все довольны !!! cool
DIMAG Дата: Пн, 28.01.2008, 22:23  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 22
Репутация: 0   ±
Замечания:   ±
На сайте с 13.11.2007

Статус: Offline

Просьба сильно не пинать ... smile

пытаюсь освоить .

решил написать програмку индикатор напряжения на свои БП .

12ф675 нужно связать с 16ф84 пока ничего толком на железе не получается ( причем в протеусе индикация осуществляется 0-999)

DEFINE DEBUG_REG gpio
DEFINE DEBUG_bit 2
DEFINE DEBUG_BAUD 9600
DEFINE DEBUG_PACING 1000
low gpio
m1 var Byte
seg var Byte
x var Word
m var Word
mask var Byte
digit var Byte
digit1 var Byte
digit2 var Byte
digit3 var Byte
trisio = %00000100
loop:
for x=0 to 999
digit1 = x / 100
digit = digit1
seg=%00000001
gosub getmask
m = x Mod 100
digit2 = m / 10
digit = digit2
seg=%00000010
Gosub getmask
digit3 = m Mod 10
digit = digit3
seg=%00000100
Gosub getmask
next x
goto loop
End
getmask:
Lookup digit,[$40,$79,$24,$30,$19,$12,$02,$78,$00,$18],mask
Pause 500
debug mask,seg
Return

16ф84

прием и отображение .

DEFINE DEBUGIN_REG portA
DEFINE DEBUGIN_bit 4
DEFINE DEBUGIN_BAUD 9600
DEFINE DEBUGIN_PACING 1000
x var byte
seg var byte
LOW PORTA
LOW PORTB
TRISA = %10000000
TRISB = %00000000
loop:
debugin 1000,loop,[x,seg]
porta=seg
portb=x
pause 100
goto loop


http://www.ejtag.ru
Сообщение отредактировал DIMAG - Пн, 28.01.2008, 22:26
ADMIN Дата: Вт, 29.01.2008, 02:23  |                                                                                                                Сообщение # 5
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

и где проблема, в каком месте?
DIMAG Дата: Вт, 29.01.2008, 06:41  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 22
Репутация: 0   ±
Замечания:   ±
На сайте с 13.11.2007

Статус: Offline

проблема в том что собрав это все дело и прошив пики , оно не работает должным образом .

на сегментах отображаются кракозябы какието

вот я и думаю хдеж у меня ошибка


http://www.ejtag.ru
ADMIN Дата: Вт, 29.01.2008, 07:55  |                                                                                                                Сообщение # 7
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Объясни строку команды Lookup поподробней. Откуда цифры в скобках? И вообще прикрепи проект к сообщению и сюда выкладывай, трудно судить без схемы.
DIMAG Дата: Ср, 30.01.2008, 22:18  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 22
Репутация: 0   ±
Замечания:   ±
На сайте с 13.11.2007

Статус: Offline

транзюки убрал (в протеусе ), почемуто с ними не работает cry

а вобще я запутолся скореи всего ..... это уже третии вариант схемы пытаюсь реализовать .
первыи был на двух пиках и 74hc164 , потом на одном пике и 139 и 164 , ....

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

и ишо путаю команду отключения компроматора и выбор портов анало\ цифров

кнопки обзор не бачу у себи , есть ток -- просмотреть - добавить ответ - отменить


http://www.ejtag.ru
ADMIN Дата: Пн, 18.02.2008, 18:22  |                                                                                                                Сообщение # 9
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Насчет 10 бит, просто в переменную WORD записываешь результат, и эту переменную посылаешь, и принимаешь соответственно тоже в переменную размером в WORD. То есть

resultat.lowbyte=adresl

resultat.highbyte=adresh

serout GPIO.2,1200,[resultat]

Можно и так

Quote
Serout GPIO.2, 1200, [ ADRESH , ADRESL ]
DIMAG Дата: Пт, 29.02.2008, 09:44  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 22
Репутация: 0   ±
Замечания:   ±
На сайте с 13.11.2007

Статус: Offline

Микроконтроллер PIC12F675 не имеет встроенного адаптера последовательного интерфейса (UART)

ктонить может привести пример организации программного (UART) в PIC12F675 ?


http://www.ejtag.ru
ADMIN Дата: Пт, 29.02.2008, 09:57  |                                                                                                                Сообщение # 11
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Я позже с твоей программой разберусь, уже наметки есть. На работе времени не хватает.
DIMAG Дата: Пт, 29.02.2008, 10:34  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 22
Репутация: 0   ±
Замечания:   ±
На сайте с 13.11.2007

Статус: Offline

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

ADCON0.1=1
if ADCON0.1=1 then goto loop
loop1:
ADRH=%00000011: ADRL=%00000011- загнал чтоб отследить что передается (подключил к терминалке порт пика )
serout2 GPIO.2, 9600, [ ADRH,ADRL]
pause 10
Goto loop1

ну в 84 вроде все впорядке если тут задать переменые то отобразится верныи результат на сегментах

loop:
Serin2 porta.3,9600,[ADRH,ADRL]
ADRH=ADRH<<8
x= ADRH+ADRL
loop3:
digit1 = x / 100
digit = digit1
Gosub getmask
porta = %11111110
portb = mask
Pause 5
loop2:
m = x // 100
digit2 = m / 10
digit = digit2
Gosub getmask
porta = %11111101
portb = mask
Pause 5
loop1:
digit3 = m // 10
digit = digit3
Gosub getmask
porta = %11111011
portb = mask
Pause 5
Goto loop
getmask:
Lookup digit,[$C0,$F9,$A4,$B0,$99,$92,$82,$F8,$80,$90],mask
Pause 1
return
End

чувствую что нужно использовать прерывание( TMRO) но незнаю как их использовать и как с ними работать


http://www.ejtag.ru
ADMIN Дата: Вс, 02.03.2008, 15:41  |                                                                                                                Сообщение # 13
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

так проблема то в чем сейчас, зачем прерывания? чтобы ловить байты по прерыванию?
Так перед передачей результата из 675 выставь единицу на какой-либо ноге 12ф675, а в 84 на RB0 по прерыванию переходить на ПП приема данных.
DIMAG Дата: Вс, 02.03.2008, 22:25  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 22
Репутация: 0   ±
Замечания:   ±
На сайте с 13.11.2007

Статус: Offline

для передачи и контроля хочу использовать только один порт 12ф675.

http://www.ejtag.ru
Холод Дата: Пн, 10.11.2008, 17:01  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Новенький
Сообщений: 7
Репутация: 0   ±
Замечания:   ±
На сайте с 14.10.2008

Статус: Offline

Продолжая тему с обменом портов.
Чем всётаки дело кончилось.
я тоже столкнулся с этой проблемой.


Если взялся, то надо доделать :)
Форум Picbasic.ru » Программирование МК » PicBasicPro » Обмен с портами (485,232 и другие виды обмена)
Страница 1 из 11
Поиск: