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

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: demanik, ivan_fd  
Два ПИКа в связке
mikhail09p Дата: Чт, 16.12.2010, 14:36  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 481
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Подскажите. Как принять переданное значение в одну переменную? Тоесть сейчас принимаентся число в переменные Number[I] (массив). Мне нужно иметь не 2,3,4 числа, а столько, сколько передаю ( в данном случае одно).
Если кто знает - почему пик передаёт полностью число, а принимает побайтно ?
Прикрепления: Zwet_2st_485.rar (74.6 Kb)

Сообщение отредактировал mikhail09p - Чт, 16.12.2010, 15:28
ЯНДЕКС Дата: 16.12.2010
DAlexV Дата: Чт, 16.12.2010, 23:01  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (mikhail09p)
Если кто знает - почему пик передаёт полностью число, а принимает побайтно ?
Признаюсь по секрету, он и передает так wacko smile . Когда закидываешь в него строку, он дробит ее на байты и начинает отправлять по одному в передающий буфер USART(там 2 байта влезают). Там есть такой бит, высвобождения буфера передачи называется(могу путать название). После того как буфер свободен в USART закидывается следующий бит, и т. д. Поэтому и получается слитная передача данных. У буфера приемника то же есть такой бит(наличие данных вроде) по нему и нужно ориентироваться. Проверяем состояние бита в цикле. Если данные есть, то считываем, если нет считаем время сколько их не было. Насчитали больше чем длинна посылки 2 байт, передача закончилась, можно обрабатывать принятое.


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
Сообщение отредактировал DAlexV - Чт, 16.12.2010, 23:02
mikhail09p Дата: Вс, 09.01.2011, 17:00  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 481
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Хорошо, когда просто передаю и принимаю, то всё ок! А вот когда принимающий контроллер ещё и занимается прерываниями, то ничего не получается... cry Что не так делаю?
Может, надо чего добавить типа Include "modedefs.bas"
Прикрепления: Pic_Pic.rar (77.3 Kb)

Сообщение отредактировал mikhail09p - Вс, 09.01.2011, 17:53
DAlexV Дата: Вс, 09.01.2011, 18:17  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (mikhail09p)
то ничего не получается... cry Что не так делаю?

Ну вот только год начался, а уже слезы. smile Не раскисать !!!!!
Коль мы разобрались с прерываниями и флагами то будем продолжать дальше их использовать.(http://picbasic.ru/forum/5-597-1)
Существует прерывание и флаг приема(передчи) даннных по UART. Hserin здесь не знаю поможет(скорее всего навряд ли удастся совместное использование с прерыванимя).

1. Разрешаем прерывание по приему из UART(выставили флаг)
2. В прерывании добавляем проверку флага приема UART
Если приняли, то считываем из регистра приема UART в какую-нибудь переменную
Если нет, то проверяем следующий возможный источник прерывания
3. В основной программе проверяем "какую-нибудь переменную" на предмет изменений(в идеале можно добавиеть еще переменную типа BIT которая будет индицировать наличие новых данных)

вот собственно и все.


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
mikhail09p Дата: Вс, 09.01.2011, 18:33  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 481
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Но Hserin ведь хардовый оператор ??? Пошёл в какой раз читать даташит. Я его, гада щас распечатаю!
Может, Анатолий немного объяснит...
Попробую в прерываниях.

Сообщение отредактировал mikhail09p - Вс, 09.01.2011, 18:34
DAlexV Дата: Вс, 09.01.2011, 18:57  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (mikhail09p)
Может, Анатолий немного объяснит...

Забавно. А русский печатать (извини) не пробовал ????? biggrin

http://picbasic.ru/load/russkij_datasheet_pic16f87x/9-1-0-175


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
mikhail09p Дата: Вс, 09.01.2011, 19:20  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 481
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Да у меня русский, просто печатать 184 страницы...
Распечатаю пока регистры и USART.
А на Анатолия я надеюсь в смысле объяснения этого интересного оператора. Hserin же нет пока в книге Анатолия.

cool В общем так: в результате моих трудов добился следующего.
Когда отключаю синхросигнал 100 Гц на входе ИНТ, корректно работает Hserin. Когда подеётся синхро на вход ИНТ, работает остальная часть проги, но не корректно работает оператор Hserin - во все переменные считывает 256.
Жду помощи. wink
Вот исправленные файлы.

Прикрепления: 5746693.rar (77.4 Kb)

Сообщение отредактировал mikhail09p - Вс, 09.01.2011, 22:48
  • Страница 1 из 1
  • 1
Поиск: