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

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: demanik, ivan_fd  
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Диагностический контроллер
Диагностический контроллер
TriRozhka Дата: Вс, 26.02.2012, 17:53  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Новенький
Сообщений: 7
Репутация: 0   ±
Замечания:   ±
На сайте с 06.02.2012

Статус: Offline

Здравствуйте.
Скажу сразу что программированием МК занимаюсь всего 3 недели, а вообще программирую на с++.

Пишу диплом по программированию диагностического МК.
Внешние компоненты: 4 датчика DS18B20, 4 неизвестных аналоговых датчика вибрации, аналоговый датчик оборотов, аналоговый датчик тока.
Внутренние компоненты: 18f4525, LM3229, 8x 24LC512, 3x DS2405, DS1307, RS232, клавиатура 3х3
Задача: Опрос датчиков, сравнение с заданными константами, периодическая запись в память, сигнализация.

Основная программа пока не готова, но все модули отлажены поодиночке. Единственной проблемой для меня стал датчик оборотов. Обороты на производстве варьируются в диапазоне от 30 до 3000 об/мин. Датчик представляет собой магнитный элемент закрепленный на валу и сам датчик, то есть сигнал импульсный.
Проблема заключается в том что в такой конфигурации стандартные команды протона pulsein и counter сожрут прилично время цикла и не обеспечат необходимой точности. Единственным оптимальным решением в виду того что датчик оборотов заменить нельзя, было обрабатывать обороты прерыванием. Но и тут не все так просто... Может я плохо читал литературу, а может совсем нуб, но как я понял прерывание срабатывает либо по переполнению таймера, либо по прерыванию на порту rb.0 либо на любом rb.4-rb.7.
Проблемой стала клавиатура 3 на 3 которая подключена на порт B. Так же читал что для работы с прерываниями внутренние подтягивающие резисторы на порту В надо отключать, не знаю так ли это.

В связи с тем что данный диагностический МК будет собираться в железе, хочу обратиться за помощью по 2 вопросам:
1. Проверить электронику на схеме на предмет забытых резисторов или нубского подключения.
2. Подсказать как реализовать обработку с датчика оборотов, чтобы погрешность измерения была не более 0.01% (желательно не более 0.001%), и на какой порт его повесить.

PS Условные обозначения: V1-V4 - датчики вибрации, DT - датчик тока, DN - датчик оборотов, OW - 1-wire шина
Заранее благодарю всех откликнувшихся.
Прикрепления: Diagnost_77.dsn (683.0 Kb)
ЯНДЕКС Дата: 26.02.2012
mikhail09p Дата: Вс, 26.02.2012, 20:46  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 481
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Quote (TriRozhka)
Так же читал что для работы с прерываниями внутренние подтягивающие резисторы на порту В надо отключать, не знаю так ли это

Странно, я такого не замечал в даташите.
ADMIN Дата: Пн, 27.02.2012, 04:50  |                                                                                                                Сообщение # 3
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Я бы повешал измеритель оборотов на вход CCP1, настроил его на захват и в прерываниях получал значение периода следования импульсов. На главной странице сайта есть статья именно по этому вопросу.
Хочу добавить - источников прерывания - много. Кроме перечисленного выше - есть еще по переполнению таймеров, по захвату, по окончанию преобразования АЦП, по приему и передаче по USART, по чтению/записи в EEPROM и. т. д.
Для работы с прерываниями по порту Б он настраивается на вход. Если не вешать подтягивающих резисторов, то вход будет "плавать". Можно использовать внутреннюю подтяжку, но только к плюсу питания. А можно - внешнюю - как к плюсу, так и к минусу.
R7-R9 - от 4.7к до 10к
на DS18B20 также нужна отдельная подтяжка от 4.7к до 10к на плюс питания.
На DS2405, не знаю, но скорее всего - тоже.

Клавиатуру можно организовать на одном входе АЦП. Вот статья об этом.
TriRozhka Дата: Вт, 28.02.2012, 01:49  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Новенький
Сообщений: 7
Репутация: 0   ±
Замечания:   ±
На сайте с 06.02.2012

Статус: Offline

Спасибо за советы с оборотами! Реализовал.
Теперь непонятно другое... как при разрешении 10 или 12 бит ADIn возвращает 16 битный результат?
На вход поступает синусоида +-5В.
ADMIN Дата: Вт, 28.02.2012, 02:27  |                                                                                                                Сообщение # 5
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

А кто сазал, что он возвращает 16-битный результат? Результат и будет 10- или 8-разрядный. При 10-разрядном преобразовании результат хранится в двух регистрах - ADRESL(младшие 8 бит) и ADRESH(старшие 2 бита).
Если вопрос касательно клавиатуры на АЦП - то здесь при считываении получается не код нажатой клавиши, а определенное напряжение, которое сопоставляется какой-либо клавише.

Синусоиду нужно масштабировать до диапазона 0..+5 В. Если переменное напряжение, то лучшим вариантом будет взять за ноль(в программе) уровень в 2,5 вольта.
TriRozhka Дата: Вт, 28.02.2012, 17:23  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Новенький
Сообщений: 7
Репутация: 0   ±
Замечания:   ±
На сайте с 06.02.2012

Статус: Offline

var1 = ADIn 0
В переменной var1 0x8000
ADRESL = 0x00
ADRESH = 0x80
Разве для 10 бит 0x3ff не предел ?

Расскажите по подробнее про масштабирование, а то в тех характеристике датчика вибрации как раз таки +- 5В, я надеялся что будет 0-5 но увы.
Как лучше поступить: подтягивать аппаратно или же поставить MCP3301 на каждый датчик вибрации ? (Желательно конечно оптимальный вариант по цене так как все таки разрабатывается стационарное устройство и не хочется чтобы его цена превышала цену самого диагностируемого оборудования оборудования)

Сообщение отредактировал TriRozhka - Вт, 28.02.2012, 21:05
ADMIN Дата: Ср, 29.02.2012, 07:22  |                                                                                                                Сообщение # 7
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

В переменной var1 и будет 1023 при максимальном значении входного сигнала, где максимум определяется значением опорного напряжения. Откуда значение 0x8000?
Вот один мой старый проект - там как раз измерение как положительного, так и отрицательного. Комментариев к программе, к сожалению, нет.
Прикрепления: ADC.rar (66.2 Kb) · 2932105.jpg (132.7 Kb)
TriRozhka Дата: Чт, 01.03.2012, 02:16  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Новенький
Сообщений: 7
Репутация: 0   ±
Замечания:   ±
На сайте с 06.02.2012

Статус: Offline

Quote (ADMIN)
В переменной var1 и будет 1023 при максимальном значении входного сигнала, где максимум определяется значением опорного напряжения.

В таком случае протеус врёт =)
Я использовал команду ADIn (у вас в коде она по сути реализована вручную, вы выставляете биты регистров инициируете замер и вынимаете результат), опорное напряжение были земля и +5 вольт. подавал сигнал импульсный 0/5В выдавало 0x0000 и 0x8000
Для наглядности выводил содержимое регистров и они совпадали с тем что выдала ADIn
ADMIN Дата: Чт, 01.03.2012, 07:14  |                                                                                                                Сообщение # 9
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

А выравнивание по какому краю стоит?
0x8000 это 32768. Какое-то подозрительное число. А если напряжение уменьшать?
А как мой пример?
TriRozhka Дата: Пт, 06.04.2012, 04:28  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Новенький
Сообщений: 7
Репутация: 0   ±
Замечания:   ±
На сайте с 06.02.2012

Статус: Offline

С АЦП пока отложил вопрос так как всплыла проблема подключения дисплея WG240128. Не можем оживить это чудо. В интернете не нашёл никаких схем правильного подключения питания. Вроде бы нашёл что то связанное с подтягиванием но там на таком языке общались что я ничего не понял. Если кто то имел дело с этим пожалуйста подскажите как надо подключить этот дисплей.

Добавлено (06.04.2012, 04:28)
---------------------------------------------
Монитор оживили. Теперь наболевшая проблема с русскими шрифтами которых нет. Так же как и нет никакой литературы по вопросам внешних шрифтов.
Своими силами написал на пхп конвертер из кодировки SAMSUNG в TOSHIBA. Нашёл хитрую команду Toshiba_udg. Вроде кажется что все гладко но это только кажется:
Нижние 4 строки дисплея, при выводе русского текста, забиты каким то хламом. Из 64 загруженных символов первые 32 (заглавные русские) записались 2 раза, так что когда хочешь от него маленькие буквы все равно лепит заглавные.
Очень непонятно как правильно использовать эту команду так как нет никаких мануалов вообще. Почему то определение символов идёт уже после вывода текста хотя как такое может быть... Притом если поставить ее перед выводом текста то на экране будет пусто. Кто имеет опыт с контролерами тошиба подскажите как правильно реализовать вывод русских букв на экране дисплея.

PS Если что железо на руках.

Сообщение отредактировал TriRozhka - Ср, 28.03.2012, 23:37
DAlexV Дата: Сб, 07.04.2012, 10:45  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (TriRozhka)
Кто имеет опыт с контролерами тошиба подскажите как правильно реализовать вывод русских букв на экране дисплея.
Работал с разными GLCD? в том числе и с Toshiba. RA6963 используемый в WG240128 полный аналог
T6963c. Внутренний программируемый знакогенератор не использовал, пользовался загружаемым(благо есть конвертор шрифтов). Вот пример http://www.sfcompiler.co.uk/forum....%2A128. Были небольшие проблемы с прорисовкой графических изображений в смысле кнопок (2D графика работает нормально), но пошаманив решил и это. Вот пример работы программы http://www.sfcompiler.co.uk/wiki/pmwiki.php?n=SwordfishUser.T6963c. Удачи wink


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
ЯНДЕКС Дата: 07.04.2012
TriRozhka Дата: Сб, 07.04.2012, 15:37  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Новенький
Сообщений: 7
Репутация: 0   ±
Замечания:   ±
На сайте с 06.02.2012

Статус: Offline

Чуть чуть опоздали с ответом =) С 15 чтения даташита я наконец понял как оно устроено. Сумел таки прикрутить русский шрифт =)
Жаль что примеров для протона нет и пришлось потратить 2 суток на изучение материала и опыты.
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Диагностический контроллер
  • Страница 1 из 1
  • 1
Поиск: