5 / 5 / 3
Регистрация: 30.05.2012
Сообщений: 89
1

KP1878BE1. Передача значений с датчика давления по UART

07.01.2014, 21:06. Показов 3237. Ответов 20
Метки нет (Все метки)

Суть проблемы в следующем:
Есть датчик с которого непрерывно посылаются данные (датчик давления), мк через АЦП получает эти данные(разрядность 8 бит, как раз можно получать по порту B), все данные - значения заранее просчитаны и зашиты в памяти - всего 256 значений,
т.е если нам например пришло такое вот число 00010001, это число будет являться адресом где хранится определенное значение давления, также есть устройство верхнего уровня, которое может в любой момент времени запросить текущее давление, как только это случилось программа должна по последовательному каналу передать данные(давление) на верхний уровень и вернуться к обычному состоянию - т.е продолжать считывать давление с датчика и т.д.
Надеюсь объяснил понятно)
Вроде как ничего сложного и нет, но в низкоуровневом программировании мои возможности в данный момент нуливые...может кто сталкивался с данным мк и поможет написать программку уверен она строк в 50 не больше)
ну или хотя бы хоть что то скажет по данной проблеме.

 Комментарий модератора 
Правила форума:

4.7. Как можно более полно описывайте суть проблемы или вопроса, что было сделано для ее решения и какие результаты получены.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.01.2014, 21:06
Ответы с готовыми решениями:

код для датчика давления
Не комплиирется, помогите, в чем проблема #include <MPX5010x.h> #include <Wire.h> const...

Усиление сигнала с дифференциального датчика давления
Доброго времени суток. Я в электротехнике новичок, поэтому столкнулся с проблемой. Есть...

Чтение датчика абсолютного давления BMP085
Помогите, пожалуйста, разобраться! Датчик был куплен уже на плате.Подключался к ATMEGA 128. При...

Arduino. Управление двигателем от датчика давления
Привет . В просторах интернета нашел скетч - управление насосом от датчика давления на 1 реле...

20
6678 / 2661 / 366
Регистрация: 17.02.2013
Сообщений: 3,908
08.01.2014, 07:42 2
Свободно пишу на ассемблере для этого процессора. Только программа выйдет вовсе не 50 строчек. Вот, например, ты пишешь программа должна по последовательному каналу передать данные(давление). По какому каналу ? RS-232 ? Тогда какова частота тактирования процессора, какова скорость передачи в бодах, сколько бит данных, какова четность, сколько стоп-бит, каков протокол синхронизации передачи - DTR/RTS или без такового, каков формат передаваемой посылки, каков протокол обмена ? Одна только подпрограмма программного телепания бита при передаче по RS-232 уже строк под 30, да подпрограмма приема строк под 20, а тогда вся программа никак не 50.
Надеюсь объяснил понятно)
Или напиши нормальную постановку задачи, или удовольствуйся ответом, что не понятно.

Добавлено через 35 минут
Сложный момент в этой задаче есть. С твоих слов получается, что микропроцессор у тебя устройство со всех сторон пассивное. Не он является инициатором передачи данных от датчика и не он от верхнего устройства. Как-то это идеологически криво, когда процессор ни разу и нигде не является задатчиком. Можно такое построить, но решение не очевидно. Решение мыслится таким - запрос от верхнего устройства должен быть посажен на прерывание. По этому запросу процессор должен немедля прекращать любую текущую операцию с датчиком (любая текущая операция с датчиком должна быть организована так, чтобы заведомо могла быть прервана в любой момент и не доделана до конца) и переходить по прерыванию к обмену с устройством, а после окончания обмена не возвращаться к прерванной операции, а начинать ее сначала, т.е. начинать сначала ожидание готовности данных от АЦП. И эту готовность отслеживать не по готовности в данный момент, а по моменту перехода от не готовности к готовности. Вот так, кое-как, идеологически твое устройство в своей логике вырисовывается. Если понятно о чем я говорю и какие грабли имею ввиду.
2
5 / 5 / 3
Регистрация: 30.05.2012
Сообщений: 89
08.01.2014, 15:24  [ТС] 3
Ethereal, здравствуйте, рад что вы откликнулись на мою проблему. Согласен с тем что вы написали выше
Цитата Сообщение от Ethereal Посмотреть сообщение
По какому каналу ? RS-232 ? Тогда какова частота тактирования процессора, какова скорость передачи в бодах, сколько бит данных, какова четность, сколько стоп-бит, каков протокол синхронизации передачи - DTR/RTS или без такового, каков формат передаваемой посылки, каков протокол обмена ?
в этом у меня полного понимания нет, если сможете помочь то сделайте так как будет проще и понятнее)
В несу ясность как я представляю алгоритм работы такой программы:
1)Вероятнее всего сначала идет инициализация портов и необходимых переменных
2)Я не верно описал свою проблему, мк должен сам брать данные с АЦП(датчика) т.е он не будет как бы пассивным.
3)Вероятнее всего запрос с верхнего уровня нужно делать через прерывание, после чего по последовательному каналу передать его
4)После передачи разумнее всего переходить на новое считывание информации с АЦП(датчика).
как я думаю это все. П.С программа нужно грубо говоря для галочки, поэтому надеюсь на вашу помочь
0
142 / 120 / 21
Регистрация: 14.02.2013
Сообщений: 817
08.01.2014, 23:11 4
С датчиком на АЦП канале ясно.
Скажем можно каждую секунду заставить МК посылать информацию по RS-232 о состоянии регистров АЦП.
Можно только когда произойдёт изменение значений в регистрах АЦП.
А куда у вас будет приходить информация по RS-232 от МК?
0
5 / 5 / 3
Регистрация: 30.05.2012
Сообщений: 89
09.01.2014, 15:31  [ТС] 5
Цитата Сообщение от VladimirU Посмотреть сообщение
А куда у вас будет приходить информация по RS-232 от МК?
просто на вывод, на верхний уровень управления, самое главное что эта передача выполняется по последовательному каналу, а куда не важно в данном случае
0
142 / 120 / 21
Регистрация: 14.02.2013
Сообщений: 817
09.01.2014, 17:53 6
KP1878BE1 не содержит модуля UART вам придётся программно организовывать роботу UART.
Не помогу
0
5 / 5 / 3
Регистрация: 30.05.2012
Сообщений: 89
09.01.2014, 20:50  [ТС] 7
VladimirU, спасибо за замечания, может хоть чем то можете помочь, хотя бы начало инициализация ,считывание с портов, и механизм обработки прерывания, можно без вывода на верхний уровень
0
152 / 119 / 11
Регистрация: 16.08.2013
Сообщений: 576
09.01.2014, 23:42 8
Цитата Сообщение от VladimirU Посмотреть сообщение
KP1878BE1 не содержит модуля UART вам придётся программно организовывать роботу UART.
Не помогу
Не так страшен черт как его малюют..
По внешнему прерыванию (старт бит) запускаете прерывания от таймера (соответственно отключаете внешнее прерывание) с периодом соответствующим скорости передачи одного бита и принимаете/передаете по-битно байт данных. далее стоп бит.
0
142 / 120 / 21
Регистрация: 14.02.2013
Сообщений: 817
10.01.2014, 22:00 9
Цитата Сообщение от RESTY Посмотреть сообщение
VladimirU, спасибо за замечания, может хоть чем то можете помочь, хотя бы начало инициализация ,считывание с портов, и механизм обработки прерывания, можно без вывода на верхний уровень
Если у вас это первое знакомство с МК, программирование МК то советую затею по проще.
И можете рассмотреть МК например PIC, AVR их в продаже много да и можно найти в бытовой аппаратуре.
0
5 / 5 / 3
Регистрация: 30.05.2012
Сообщений: 89
11.01.2014, 02:22  [ТС] 10
не то что бы это знакомство - это курсовая) по этому и пишу сюда чтобы помогли конкретно с кодом, так понятия не имею с чего и как начать, точнее алгоритм грубо говоря и есть, но вот как ее реализовать программно это другой вопрос...
0
6678 / 2661 / 366
Регистрация: 17.02.2013
Сообщений: 3,908
11.01.2014, 07:22 11
Вот на моей домашней страничке прикрепленный к сообщению файл:
kr_dre2.zip
прошивка пиратской карты Дрекрипт Триколор на КР1878ВЕ1 в исходниках.

В ней можешь взять пример подпрограмм обмена по RS-232.
Подпрограмма передачи байта SEND и приема байта RECV :
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
SEND:       movl    TCNT, 220       ;Задержка такт
        jsr Delay_nop       ; (2*TCNT+5)*2
        movl    PORTB, 11101110b    ;Старт-бит
        movl    I, 0            ;Init parity
        movl    J, 8
$1:     xor I, EEDAT        ;Calc parity
        movl    TCNT, 88        ;Задержка такт
        jsr Delay_nop       ; (2*TCNT+5)*2
        shr EEDAT
        rlc PORTB
        subl    J, 1
        jnz $1
        movl    TCNT, 89        ;Задержка такт
        jsr Delay           ; (2*TCNT+4)*2
        movl    TCNT, 92
        mov PORTB, I        ;Бит паритета
Delay_nop:  nop
Delay:      subl    TCNT, 1
        jnz Delay
        movl    PORTB, 11111111b    ;На прием
        rts
 
RECV:       bttl    PORTB, 0001b
        jnz RECV
        movl    TCNT, 134       ;Задержка такт
        jsr Delay           ; (2*TCNT+4)*2
        movl    J, 9
$1:     shr I
        rrc EEDAT
        mov I, PORTB
        movl    TCNT, 88        ;Задержка такт
        jsr Delay_nop       ; (2*TCNT+5)*2
        subl    J, 1
        jnz $1
        rts
Подпрограмма RECV ждет начала передачи данных от ресивера путем опроса
готовности, т.е. в цикле опрашивает линию данных PORTB.0
Временные интервалы в обеих подпрограммах организованы пустыми циклами.
Параметры приема и передачи такие :
Если КР1878ВЕ1 тактируется частотой 3.579545 MHz, то скорость обмена
9600 бод, 8 бит данных, четность четная, два стоп бита.
1
5 / 5 / 3
Регистрация: 30.05.2012
Сообщений: 89
11.01.2014, 18:19  [ТС] 12
Спасибо конечно, но данный кусок кода возможно и поможет, но сейчас в нем особой нужды нет( имею ввиду в передаче и приема сигнала)
Вы писали что свободно программируете на данном мк.
могли бы вы написать такое:
инициализацию портов - с порта b0 - b7 считываются данные с ацп (ацп 8 разрядный)
порт а0 для последовательной передачи, а1 для сигнала запроса верхнего уровня(прерывание)
ну и прием с порта b с сохранением в какой либо регистр.
буду очень благодарен
0
10218 / 6598 / 495
Регистрация: 28.12.2010
Сообщений: 21,164
Записей в блоге: 1
11.01.2014, 20:06 13
TC, а вы под помощью подразумеваете написание полного кода для вас, а вы будете раздавать ценные указания, что вам нужно сейчас или потом, не потрудившись выложить наработки и заглянуть в документацию на МК?
0
5 / 5 / 3
Регистрация: 30.05.2012
Сообщений: 89
11.01.2014, 20:57  [ТС] 14
С чего вы так решили, сюда я пишу когда чего то не могу понять, с целью что бы помогли привели пример,
повторюсь еще раз что на asm я не программирую и написания целого кода не требую и уж тем более никого не принуждаю это делать за меня, а всего лишь прошу выполнить не трудоемкую работу для тех кто понимает в этом.
0
10218 / 6598 / 495
Регистрация: 28.12.2010
Сообщений: 21,164
Записей в блоге: 1
11.01.2014, 21:15 15
Понятно, т.е. вы будете просто ждать.
0
5 / 5 / 3
Регистрация: 30.05.2012
Сообщений: 89
11.01.2014, 23:06  [ТС] 16
В данный момент пытаюсь разобраться, если что получится результаты закину сюдаю
0
6678 / 2661 / 366
Регистрация: 17.02.2013
Сообщений: 3,908
12.01.2014, 12:20 17
Цитата Сообщение от RESTY Посмотреть сообщение
могли бы вы написать такое:
Написать-то могу, только мне это не нужно. Тебе нужно, да ты не хочешь.

К тому-же я уже говорил - напиши постановку задачи ! Без нее разговор ни о чем.
Цитата Сообщение от RESTY Посмотреть сообщение
инициализацию портов - с порта b0 - b7 считываются данные с ацп (ацп 8 разрядный)
порт а0 для последовательной передачи, а1 для сигнала запроса верхнего уровня(прерывание)
ну и прием с порта b с сохранением в какой либо регистр.
Из этого ни хрена не понятно следующее :
1.) Кто дает команду АЦП начать преобразование ?
2.) Как АЦП сообщает процессору, что данные готовы и выставлены на линии b0 - b7 ?
Данные на линии b0 - b7 при этом выставляются, надо полагать, в прямом виде ?
3.) У порта a0 при последовательном обмене пассивное состояние - ноль или единица, т.е. земля или 5 вольт ?
4.) Последовательная передача - это RS-232 ? Если да, то сколько бод, бит данных, какая четность, сколько стоп-бит ?
5.) Запрос прерывания на линию a1 выставляется фронтом или уровнем ?
Если уровнем, то каким ? 0 или 5 вольт ? И при каких обстоятельствах запрос снимается ?
Если фронтом, то каким ? Падающим или нарастающим ?
6.) Какова частота тактирования процессора ? Или ее можно выбирать по вкусу ?

Или все это остальные должны узнать телепатически ? Замедитировать и прямо из астрала ?
0
5 / 5 / 3
Регистрация: 30.05.2012
Сообщений: 89
12.01.2014, 15:38  [ТС] 18
1.) Кто дает команду АЦП начать преобразование ?
Насчет этого точно не знаю, в задаче сказано что данные преобразуются непрерывно, т.е постоянно, будем считать что АЦП просто преобразует данные и выдает их по готовности.
2.) Как АЦП сообщает процессору, что данные готовы и выставлены на линии b0 - b7 ?
Данные на линии b0 - b7 при этом выставляются, надо полагать, в прямом виде ?
Хорошее замечание, насколько я понимаю с АЦП также можно подать сигнал готов на какой либо из портов a, точнее щас посмотрел так и есть.
3.) У порта a0 при последовательном обмене пассивное состояние - ноль или единица, т.е. земля или 5 вольт ?
Если я читал верную литературу то должно быть еденица т.е 5v
4.) Последовательная передача - это RS-232 ? Если да, то сколько бод, бит данных, какая четность, сколько стоп-бит ?
Вот тут не могу точно сказать к сожалению.
5.) Запрос прерывания на линию a1 выставляется фронтом или уровнем ?
Если уровнем, то каким ? 0 или 5 вольт ? И при каких обстоятельствах запрос снимается ?
Я считаю что уровнем, можно также 5v, запрос снимается как будут переданы данные с порта a на верхний уровень.
Если фронтом, то каким ? Падающим или нарастающим ?
6.) Какова частота тактирования процессора ? Или ее можно выбирать по вкусу ?
думаю по вкусу
0
6678 / 2661 / 366
Регистрация: 17.02.2013
Сообщений: 3,908
13.01.2014, 09:49 19
Ты считаешь, что это постановка задачи ? Я - нет.

К примеру :
>Хорошее замечание, насколько я понимаю с АЦП также можно подать сигнал готов на какой либо из портов
>a, точнее щас посмотрел так и есть.
Как ты думаешь, сигнал "данные готовы" от АЦП по барабану какой полярности ? Т.е. программа должна выходить одинаковой, независимо от того готовность данных - это ноль, а не готовность - единица или готовность - единица, а не готовность - ноль ? Как ты думаешь ? Как думаешь, может программист без этой информации обойтись ? Или из тебя ее клещами вытаскивать нужно ?

Как хочешь, но я пас. Не хочу я ничего, ни из кого клещами вытаскивать. Сначала уясни свою задачу, потом напиши ее постановку и только потом кому-нибудь мозг выноси. А пока ты сам до конца не знаешь что тебе нужно, нам то откуда об этом узнать ?
0
5 / 5 / 3
Регистрация: 30.05.2012
Сообщений: 89
13.01.2014, 10:10  [ТС] 20
Ethereal, спасибо и тебе удачи тут все ясно
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2014, 10:10

АЦП для термопары (датчика давления)
Здравствуйте, в электронике не специалист, нужна ваша помощь, есть необходимость замерять и...

Обработка сигнала с датчика давления воды
Здравствуйте, форумчане! Я пробовал гуглить мои вопросы и в гугле, и по форуму, не нашел. Суть...

считать показания датчика давления масла в мк?
вот еще одно дельце придумалось. есть некий датчик давления масла. пока даже не знаю его...

Схема подключения датчика абсолютного давления ДАП 2.5
Всем привет Нужна схема подключения датчика давления DAB 2,5 Заранее спасибо.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.