Страница 1 из 2
USART на PIC18
Добавлено: Чт окт 03, 2013 01:14:18
viktor64
Необходимо организовать приём -передачу по USART на PIC18 с изменяющимся
количеством байтов в посылке.Подскажите пожалуйста ,как это можно реализовать
и где можно посмотреть на примеры подобных программ на Ассемблере ,т.к. в даташите
на этот контроллер подобного ненашёл.
Так же прошу помоши у знающих людей,подскакжите пожалуйста ,когда устанавливается
Флаг нахождения приемника в режиме ожидания RCIDL,если формат передачи данных:
1старт_ 8бит данных_ 1 стоп ->по нарастающему фронту стопового бита ,по его спадающему
фронту или как-то иначе?Интересуюсь т.к. ничего подобного в даташитах ненашёл.
Так же может кто подскажет где можно было бы более подробно почитать про USART на этот
контроллер?Всем откликнувшимся ,заранее благодарен!
Re: USART на PIC18
Добавлено: Чт окт 03, 2013 01:40:39
школьник
> PIC18
это семейство, какое полное название контроллера?
Передача данных:
1. Установить требуемую скорость передачи с помощью регистра SPBRG и бита BRGH
2. Выбрать асинхронный режим сбросом бита SYNC в ‘0’ и установкой бита SPEN в "1".
3. Разрешить передачу установкой бита TXEN в "1", автоматически устанавливается флаг TXIF.
4. Записать данные в регистр TXREG (начало передачи данных).
Прием данных:
1. Установить требуемую скорость передачи с помощью регистра SPBRG и бита BRGH
2. Выбрать асинхронный режим сбросом бита SYNC в ‘0’ и установкой бита SPEN в "1".
3. Разрешить прием установкой бита CREN в "1".
4. Ожидать установку бита RCIF.
5. Считать 8 бит данных из регистра RCREG.
6. При возникновении ошибки переполнения сбросить бит CREN в "0".
Re: USART на PIC18
Добавлено: Чт окт 03, 2013 01:55:43
viktor64
Думаю применить PIC18F248,рекомендации выложенные Вами я читал в даташите,но это для приёма передачи одного байта,а мене меобходимо сделать приём-передачу пакетов с изменяняющимся
числом байтов в них.Также интересует ,как писал выше,условия при которых устанавливается флаг RCIDL.
Re: USART на PIC18
Добавлено: Чт окт 03, 2013 07:40:27
Аlex
а мене меобходимо сделать приём-передачу пакетов с изменяняющимся числом байтов в них
И чем передача пакета отличается от передачи одного байта ?
Один байт можете передать ? - да. Ну и передавайте их по-очереди, хоть 100 штук... В чем проблема ?
Re: USART на PIC18
Добавлено: Чт окт 03, 2013 08:12:25
dosikus
Аlex писал(а): Ну и передавайте их по-очереди, хоть 100 штук.
Маркеры начала и конца пакета юзать.
Re: USART на PIC18
Добавлено: Чт окт 03, 2013 10:25:28
viktor64
dosikus писал(а):
Маркеры начала и конца пакета юзать.
Подскажите ,а какие маркеры использовать,если там только старт-0 и стоп -1 после каждого байта
или необходимо задействовать какие-то флаги?
Re: USART на PIC18
Добавлено: Чт окт 03, 2013 11:36:13
dosikus
viktor64 писал(а):
Подскажите ,а какие маркеры использовать,если там только старт-0 и стоп -1 после каждого байта
или необходимо задействовать какие-то
Абздец, ну почитайте хотя бы реализацию протокола Owen
http://www.owen.ru/uploads/type_prot_owen.zip
если уж совсем так плохо все.
И для начала перестаньте мешать в кучу протокол и интерфейс .
Хотя вас все равно лучше ткнуть носом, иначе возникнет куча вопросов.
Маркеры нужны для четкого определения начала и конца пакета , и обычно выбираются те что не могут встретится в теле пакета.
Причем хорошая практика - не одиночный байт а секвенция (последовательность символов)
Re: USART на PIC18
Добавлено: Чт окт 03, 2013 17:01:10
школьник
viktor64 - чтобы Вам не очень грустно было от сказанного dosikus'ом, Вы опишите какие байты/символы будут использоваться при передаче. Возможно будут такие, которые не используются - их можно использовать для обозначения начала и конца посылки. Если используются все символы, в начало пакета добавьте байт или байты, указывающие размерность пакета, а в конце пакета будет контрольная сумма (какой-нибудь примитивный алгоритм или вовсе для начала без контрольной суммы). Для синхронизации приема-отправки очередного пакета используйте паузу (интервал времени) больший, чем время на передачу двух и более символов - это будет таймаутом, после которого вновь принятый символ будет началом очередного пакета.
Хотя, возможно, мы слишком глубоко Вас погружаем. Одиночные символы принимаете/отправляете?
И забудьте про старт и стоп - на аппаратном уровне это всё за вас будет сделано.
Re: USART на PIC18
Добавлено: Чт окт 03, 2013 22:01:44
viktor64
Большое спасибо всем откликнувшимся за пинок в нужном направлении

Пошёл изучать доку
Re: USART на PIC18
Добавлено: Вс окт 06, 2013 16:03:29
viktor64
Подскажите какую терминалку лучше использовать в моём случае для отдадки программы,
чтобы я мог слать с неё сразу весь пакет без таймингов в средине пакета?Пробовал использовать
Terminal v1.9 ,так в ней при отсылании пакета,например АВСD-шлётся А затем тайминг около 1мс,
потом В и снова тайминг ,С тайминг ,D и только тогда завершение передачи.
Re: USART на PIC18
Добавлено: Вс окт 06, 2013 17:17:19
школьник
Терминал выбран правильный. Вероятно, на стороне ПК на аппаратном уровне задержки.
Скорость обмена какая? Например, при скорости 9600 бод будет передано 960 символов в секунду.
Re: USART на PIC18
Добавлено: Вс окт 06, 2013 18:54:24
viktor64
Скорость обмена у меня 19200,пробовал слать с Терминала на 9600,действительно задержек нет,а на 19200 уже есть ,как на скрине что прикрепил.Скажите ,можно ли что настроить в Терминалке чтобы и на 19200 посылки в пакете были без таймингов?
Re: USART на PIC18
Добавлено: Вс окт 06, 2013 20:10:18
школьник
Сколько символов у Вас в пакете (в строке)?
Будем считать что у Вас типовые настройки 8-N-1 т.е. 8 байт, без бита проверки, 1 стоп бит
http://ru.wikipedia.org/wiki/8-N-1
Re: USART на PIC18
Добавлено: Вс окт 06, 2013 21:19:15
viktor64
Re: USART на PIC18
Добавлено: Пн окт 07, 2013 08:01:59
школьник
viktor64 - Вы показали две картинки. На первой график, на второй настройки и четыре символа в строке отправки. Как Вы оцениваете свои тайминги, точнее говоря, как Вы оцениваете интервалы времени между каждым символом в отправляемой строке?
Re: USART на PIC18
Добавлено: Пн окт 07, 2013 20:48:19
viktor64
Я шлю с терминала посылку в 4 байта ,выход с порта контролирую осциллографом ,а по нему видно ,что на выходе
с терминала на скорости 19200 наблюдаются тоже эти 4 байта но с таймингами между ними ,а неподряд???Пробовал
слать на скорости 9600 ,тогда всё нормально,вот и думаю что это проблема с терминалкой или компом?
Re: USART на PIC18
Добавлено: Пн окт 07, 2013 22:22:31
школьник
Сейчас внимательно посмотрел осциллограмму. Увидел межсимвольные паузы. Определенно прокомментировать не могу, измерениями длительностей не занимался. Попробуйте терминал во вложении.
Re: USART на PIC18
Добавлено: Вт окт 08, 2013 02:30:12
viktor64
Спасибо ,попробую с Вашей терминалкой,потом отпишу
Re: USART на PIC18
Добавлено: Вс ноя 17, 2013 16:06:29
viktor64
Решил вопрос с таймингами,проблема была в том что я в коде неправильно включал \выключал приём в RCSTA,CREN
Сейчас интересует как правильно согласовывать линию термисторами и почему когда я ставлю его на Приёмопередатчик
ST485 сигнал на линиях А и В падает с 4.5вольт до 0.5в?Получается ,что применяя термисторы "садится" сигнал на линии
и помехозащищённость падает или я ошибаюсь?Ниже выложил осцилограмму на линии с термистором и без него,подскажиье пожалуйста как сделать правильно.
Re: USART на PIC18
Добавлено: Пн ноя 18, 2013 09:27:48
Smen
viktor64 писал(а):как правильно согласовывать линию термисторами
Может всё-таки "терминаторами"?

А согласовывается очень просто: на каждом конце линии 485 по одному резистору.