Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: ivan_fd  
USB-VNC1L + pic16f628A-USART
Python Дата: Ср, 09.03.2011, 23:47  |                                                                                                                Сообщение # 1
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 45
Репутация: 0   ±
Замечания:   ±
На сайте с 11.02.2010

Статус: Offline

Здравствуйте!

Раздобыл хост-контроллер Vdrive1 на базе VNC1L. Пытаюсь его подключить по UART к контроллеру,
хотелось бы с флешки читать данные в контроллер.
Данные он (хост-контроллер) контроллеру передает, вот только какая то чушь...
Я пытаюсь выводить после приема на жки - получается каша.
Есть нюанс, хост-контроллер (далее-хост), должен подключаться и использоваться с помощью
хендшейкинга (рукопожатие), может кто подскажет что ето такое, и еще проверяются стоповые и стартовые биты без контроля четности.
Я думаю использование флешки с пиками это будет полезно всем.
КОД:

Device 16F628A ' Использовать микроконтроллер 16F628A
Declare XTAL 4 ' Использовать тактовый генератор на 4 МГц

Config BODEN_OFF, PWRTE_ON, WDT_OFF, lvp_off, MCLRE_OFF, INTRC_OSC_NOCLKOUT, CP_OFF, DATA_CP_OFF

Include "modedefs.bas"
Declare LCD_TYPE ALPHA ' Тип ЖКИ - буквенно-цифровой
Declare LCD_DTPIN PORTA.0 ' Порт данных ЖКИ
Declare LCD_ENPIN PORTA.7 ' Управление цепью E
Declare LCD_RSPIN PORTA.6 ' Управление цепью RS
Declare LCD_INTERFACE 4 ' Использовать 4-х битную шину данных
Declare LCD_COMMANDUS 2000 ' Задержка перед посылкой команды
Declare LCD_DATAUS 50 ' Задержка перед посылкой данных
Declare LCD_LINES 2 ' Количество строк ЖКИ равно двум
Dim I As Byte
Dim var1 As Byte
TRISB = %00000000
TRISA = %00000000
PORTB_PULLUPS = On ' Включить подтягивающие резисторы на PORTB
ALL_DIGITAL = On ' Установить все порты цифровыми входами/выходами

loop:
For I=0 To 15
SerIn PORTB.0, T9600,[var1]
Print At 1,I, var1-$30
Next I
GoTo loop

Вышеизложеным я пытаюсь заполнить первую строку ЖКИ, но получаются каракули, что я делаю не так, а подозреваю что то нетак в приеме данных, как то видимо нужно контроллировать стоп- старт- биты.
Если кто сталкивался отзовитесь

Сообщение отредактировал Python - Чт, 10.03.2011, 00:04
ЯНДЕКС Дата: 09.03.2011
retas Дата: Чт, 10.03.2011, 18:12  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 445
Репутация: 11   ±
Замечания:   ±
На сайте с 10.09.2007

Статус: Offline

С упомянутым "рукопожатием" я встречаюсь при програмировании охранных централей, но мне этот режим
не нужен так и точно что то о нём сказать не могу. Идея вроде такая - когда централь хочет на станцию
мониторинга (охранникам) что то передать, она сперва шлёт "рукопожатие" (ну я счас разрыдаюсь от жалости
к англичанам да и к нам, разговаривающим на переводимых языках). Его для централей DSC можно выбрать
либо "равной 1600Гц либо стандартной". В мануале наверное можно найти описание, но оно будет на англицком т.е.
переводонепригодной. Думаю сдесь лучше говорить "приветсвие".
Как говориться - чем мог!
Python Дата: Чт, 10.03.2011, 23:13  |                                                                                                                Сообщение # 3
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 45
Репутация: 0   ±
Замечания:   ±
На сайте с 11.02.2010

Статус: Offline

Еще вопрос - как настроить usart чтобы он использовал старт- стоп- биты и без контроля четности.
Vdrive1 поумолчанию настроен именно так, мне кажется это поможет. Или после приёма из usart перед отображением на жки нужно еще и преобразовывать их в строку или что то еще.

SerIn PORTB.0, N9600,[var1] и так пробовал, безрезультатно сыпит каракули одинаковые каждый раз, но неотягощенные смыслом. Видно что хост работает нормально, проблема в приеме данных, даже видимо не в приеме а в обработке.

Добавлено (10.03.2011, 23.13.26)
---------------------------------------------
Господа все решилось! Вот такой вид должна иметь программа чтобы корректно принимать и отображать результаты приема по usart от VNC1L (VDRIVE1)
Dim I As Byte
Dim var0 As Byte
Dim var1[16] As Byte
TRISB = %00000010 ' Сделать RB1 входом
TRISA = %00000000
PORTB_PULLUPS = On ' Включить подтягивающие резисторы на PORTB
ALL_DIGITAL = On ' Установить все порты цифровыми входами/выходами
' ---Главная программа -----------------------------------
PORTB.3=0
SerIn PORTB.0, T9600, [var0] 'Первый байт просто читаем, он чтобы вывести из спячки, я так понял
loop:
SerIn PORTB.0, T9600, [Str var1]
Print At 1,1, Str var1
DelayMS 4000
Cls
GoTo loop

Спасибо за участие.

Сообщение отредактировал Python - Чт, 10.03.2011, 23:14
ilys Дата: Ср, 23.03.2011, 15:22  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Новенький
Сообщений: 2
Репутация: 0   ±
Замечания:   ±
На сайте с 30.01.2010

Статус: Offline

Люди и мне очень интересна эта тема. Кто пограмотнее подскажите человеку
Python Дата: Пт, 22.04.2011, 00:59  |                                                                                                                Сообщение # 5
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 45
Репутация: 0   ±
Замечания:   ±
На сайте с 11.02.2010

Статус: Offline

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

Вот такого вида код:

Device 16F628A
Declare Xtal 4
Config BODEN_OFF, PWRTE_ON, WDT_OFF, lvp_off, MCLRE_OFF, INTRC_OSC_NOCLKOUT, CP_OFF, DATA_CP_OFF
Include "modedefs.bas"
Dim I As Byte
Dim C As Byte
Dim line1[16] As Byte 'Байт
Dim line2[16] As Byte 'Байт
Dim var0 As Byte 'Байт
Dim L As Byte 'Байт
Dim BAYT As Byte
'Dim OUTBUF[8] As Byte
Dim INBUF[96] As Byte
TRISB = %01000000
TRISA = %00000000

PortB_Pullups 1
All_Digital 1

loop:

For I = 0 To 95
SerIn PORTB.6, T9600, 500, sub1, [BAYT]
INBUF[I] = BAYT
Next I
sub1:

For I=0 to 15
line1[I]=inbuf[I]
next
print at 1,1, str line1

for i=0 to 15
line2[i]=inbuf[i + 16]
next
print at 2,1, str line2

При выводе не 2-х строчный индикатор, 2-я строка (от начала) должна выглядеть вот так "On-line:" (без кавычек), НО, после двоеточия сыпятся еще какие то каракули, я так понимаю из приемного буфера, подтянул (помимо внутренней подтяжки) сначала к + через 4.7 кОма, на одну каракулю стало меньше, подтянул к минусу через такой же номинал, тоже самое, причем системы в этом наборе символов нет, иногда совпадают после выключения иногда нет, после двоеточия рандомайз сплошной, как с этим бороться, подскажите?

  • Страница 1 из 1
  • 1
Поиск: