Страница 123 из 304
Re: BASCOM AVR в вопросах и ответах
Добавлено: Ср мар 07, 2012 09:40:17
amv2000
Re: BASCOM AVR в вопросах и ответах
Добавлено: Ср мар 07, 2012 21:35:40
vanyap1
Появилась у меня вот проблема. 2 месяца тому сделал блок управления насосом с электро-механическим манометром. Насос стоит в санатории, качает минеральную воду с давлением 6 кг/см2 (включен через блок плавного пуска). Так вот, манометр не дает качественный сигнал и стрелка при небольшой разнице давлений (мин-макс) прыгает и контроллер постоянно меняет состояние устройства плавного пуска и двигатель воет.
Сейчас сделано в прошивке так -
При поступлении сигнала (мин.давл.) мк ждет 1 сек и дает сигнал на устройство плавного пуска - старт.
И при сигнале (макс.давл.) мк дает сигнал на остановку.
Как думаете, если по кнопке манометра запускать таймер и считать импульсы с него пока есть сигнал и если насчитает там н-количество то насос к старту, если нет то игнорировать. И наоборот для остановки.
Как я это вижу:
Сделать цикл с опросом кнопок. Если с появился лог на какой то кнопке, то включить таймер, отправить в другой цикл и проверять не отпущена ли кнопка. Если кнопка была отпущена и таймер не насчитал требуемого количества импульсов то вернуть в цикл опроса кнопок снова. Если есть требуемое количество то действие.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Чт мар 08, 2012 15:27:08
amv2000
vanyap1 писал(а):Появилась у меня вот проблема. 2 месяца тому сделал блок управления насосом с электро-механическим манометром. Насос стоит в санатории, качает минеральную воду с давлением 6 кг/см2 (включен через блок плавного пуска). Так вот, манометр не дает качественный сигнал и стрелка при небольшой разнице давлений (мин-макс) прыгает и контроллер постоянно меняет состояние устройства плавного пуска и двигатель воет.
Честно говоря я так и не понял в чем проблема и чего надо...
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт мар 09, 2012 10:19:36
vanyap1
Проблема в том, что аппарат слишком быстро реагирует на манометр! Надо чтобы хоть 3 секунды было устойчивое состояние контактов манометра для запуска или остановки насоса.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт мар 09, 2012 10:53:19
edm2007
Так это не аппарат слишком быстро реагирует, Вы же сами сказали:
vanyap1 писал(а):манометр не дает качественный сигнал и стрелка при небольшой разнице давлений (мин-макс) прыгает и контроллер постоянно меняет состояние устройства
Как манометр сигнал дает, так устройство и работает. Как тут может быть "слишком быстро". Вопрос-то вот в чем, ПОЧЕМУ манометр даже при таких небольших изменениях давления выдает сигнал? Он так отрегулирован? Или просто неисправен? Действительно в таких границах должно быть давление (и как тогда устройство должно реагировать иначе), или это Вы обычный дребезг контактов не устранили всего лишь?
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт мар 09, 2012 16:54:32
vanyap1
На манометре установлено давление включения насоса 5,6 кг/см2 а отключение при 6. Так вот при включении насос дает толчок давление такой, что манометр отрубает его. Если принудительно включить насос, то стрелка пригнет к 6 и возвращается к нормальному давлению. Надо сделать чтобы отключение насоса происходило если с манометра есть устойчивый сигнал хоть 2-3 секунды. Своего рода подавление дребезга.
Код: Выделить всё
If Min_p = 1 Then : Waitms 200 : Set Nasos : End If
If Max_p = 1 Then : Waitms 200 : Reset Nasos : End If
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт мар 09, 2012 17:07:20
edm2007
Ну тогда вариантов решения масса. От простейшей проверки в цикле WHILE .. WEND (до тех пор пока сигнал есть, через мелкую задержку увеличиваем переменную. там же проверяем ее значение. если насчитали нужное количество - сбрасываем счетчик и идем включаться. иначе (сигнал пропал) - просто сбрасываем счетчик), и до реализаций на том же таймере...
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт мар 09, 2012 17:11:16
vanyap1
Ну так я и предложил сначала. Появился сигнал > ждем и считаем пока есть сигнал > досчитали до заданного значения > включить на сос. Если недосчитали пока был сигнал то вертаем к началу программы, тоесть снова кнопки опрашивать.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Сб мар 10, 2012 15:38:48
vanyap1
Сделал, вроде работает.
Код: Выделить всё
A = 50
1:
Do
If Plus = 1 Then : Goto Sta_t : End If
If Minus = 1 Then : Goto St_p : End If
Gosub Displey
Loop
Sta_t:
C = 0
Do
If Plus = 1 Then
If Plus = 1 And Minus = 1 Then : Waitms 200 : Goto Conf_g : End If
Incr C
If C > A Then
C = 0
X = 255
Goto 1
End If
Gosub Displey
Else
Goto 1
End If
Loop
St_p:
C = 0
Do
If Minus = 1 Then
If Plus = 1 And Minus = 1 Then : Waitms 200 : Goto Conf_g : End If
Incr C
If C > A Then
C = 0
X = 0
Goto 1
End If
Gosub Displey
Else
Goto 1
End If
Loop
Displey:
Locate 1 , 1
Lcd "Nasos c=" ; C ; " "
Locate 2 , 1
Lcd "status = " ; X ; " "
Pwm1a = X
Return
Conf_g:
Cls
Do
Incr C
If Plus = 1 Then : Waitms 75 : C = 0 : Incr A : End If
If Minus = 1 Then : Waitms 75 : C = 0 : Decr A : End If
If C = 150 Then : Goto 1 : End If
Locate 1 , 1 : Lcd "Set"
Locate 2 , 1 : Lcd "wait = " ; A ; " "
Loop

Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт мар 13, 2012 08:45:53
mr4ester
назрел такой вопрос, решил я попробовать изучить VISUAL BASIC и написать программу для работы с COM PORT, чтоб связать железяку с с ПК, можно ли оператором PRINT отправлять данные на ПК, смогу ли я их в таком виде обработать?
Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт мар 13, 2012 17:28:24
uni
Сможете. Print отсылает байты, а то как уж вы их будете интерпретировать - то дело ваше. Со стороны ПК они прибудут как последовательность байт.
Кстати, может кому интересно как можно выводить русские символы из флеш-памяти на бейсике. Вот тут я наваял свой пример:
PBIIDemo.bas
Я это делаю при помощи таблицы перекодировки, которую тоже храню во флеш. Эта таблица переводит символы CP1251 (WIN) в кодировку драйвера HD44780. Т.о. можно прямо в коде .bas файла задавать строки по-русски для вывода на LCD. Я там написал свои функции для работы с LCD, т.к. первый раз пишу на Bascom AVR и понятия не имею как запустить библиотечные для моей конфигурации. Также я не понял есть ли такое понятие как "проект". Когда я разъединил файлы и вставил директивы $include, то всё перестало работать, поэтому весь исходник в одном файле (это напрягает).
Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт мар 13, 2012 18:12:43
edm2007
uni писал(а):Я там написал свои функции для работы с LCD, т.к. первый раз пишу на Bascom AVR и понятия не имею как запустить библиотечные для моей конфигурации.
И вот нужен Вам после этого какой-то бейсик?

Это же
бубльгум Си чистой воды.

Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт мар 13, 2012 18:28:04
uni
Да видел в рунете как народ мучался с русским текстом, какие-то сторонние программки использовал и пр. премудрости. И где у меня тама Си? Чистейший бейсик с примесью Bascom'а. Хотел среду VB6 использовать, да он, собака, текст автоматом форматирует, из-за чего у меня кое-где выравнивание поползло.
Захотелось поиграться, я то сам на объектном Си пишу (IAR EC++ и AVR GNU C++). Не сразу индикатор завёлся, долго искал проблему с осциллографом. Оказалось, что задержки формируются коряво в Bascom'е. А так, да, это переделанный код моего набора функций. По тому же адресу есть более полный проект, но уже на С++.
Для меня было удивительным, что код бейсика можно отлаживать при помощи JtagICE mkII через AVR Studio 4. Немного коряво, но что-то там шагает и даже можно посмотреть на состояние портов и пр. периферии. Не ожидал от Bascom'а. В Proteus тоже можно объектный файл подгрузить и пройтись по функциям бейсика, это забавно.
На всякий случай буду иметь в виду, т.к. не нужно никаких сишных мудрстований. Какие-нибудь одноразовые проектики можно делать и на бейсике.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт мар 13, 2012 18:37:11
edm2007
uni писал(а):И где у меня тама Си?
Ну в коментариях хотя бы.

Я же не имел ввиду что код на Си, я к тому что _delay_us, ==, PROGMEM и прочее не спутаешь ни с чем. Вообще спасибо, интересно покопаться будет.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт мар 13, 2012 18:52:37
uni
Комментарии - это как вспомогательное средство для точного перевода с оригинала, чтобы не ошибиться. У меня есть уже отлаженный код и я просто поэлементно переводил его на бейсик. Так проще. Я его оставил, чтобы понятнее было. Функции задержек меня сильно огорчили, поэтому я написал свои. Бейсик в отличие от Си притормаживает немного и задержки на самом деле не такие, как хотелось бы. Если в Си я задал константу 40 мкс, то и будет примерно 40 мкс, а тут я долго соображал как передавать переменную в функцию задержки. Идеально было бы, если бы эти функции были где-то на асме написаны в какой-нибудь библиотеке, т.к. мои варианты меня тоже не очень устраивают, хотя это работает (в железе).
В MCU_PortsInit() я специально использую такую форму инициализации, т.к. это самодокументирующийся код. Мне лень постоянно лазить по pdf-файлам, поэтому я всегда инициализирую конфигурационные адреса побитно вот таким способом, т.к. ошибиться тут достаточно сложно:
Код: Выделить всё
' // Port C Data Direction Register
' // [ Регистр направления порта C ][ATmega16]
' // 00000000 - Initial Value
DDRC = &B01000000
' // ||||||||
' // |||||||+- 0, rw, DDC0: (SCL) - SCL
' // ||||||+-- 1, rw, DDC1: (SDA) - SDA
' // |||||+--- 2, rw, DDC2: (TCK) - JTAG
' // ||||+---- 3, rw, DDC3: (TMS) - JTAG
' // |||+----- 4, rw, DDC4: (TDO) - JTAG
' // ||+------ 5, rw, DDC5: (TDI) - JTAG
' // |+------- 6, rw, DDC6: (TOSC1) - LCD RS / Dig1
' // +-------- 7, rw, DDC7: (TOSC2) - Ch B (энкодер)
' // Примечание:
Заодно и схему как бы вижу сразу, что и куда подключено.
Моя схема есть тут:
https://mysvn.ru/schoolbell/pbiidemo/proteus/
Мне бы очень хотелось знать как должна выглядеть программа на бейсике при использовании стандартной библиотеки для работы с индикатором по 4-проводной шине. У меня не получилось написать конфигурацию для своей схемы. Точнее я написал, как в примерах, но ничего не работало. Ноль реакции.
Ещё мне интересно, а как на бейсике перевод каретки задать? Что-то я забыл уже как это делается. У меня в коде можно посылать строку с переводом каретки, при этом курсор на дисплее автоматически перейдёт на вторую строку. Это удобно, т.к. при этом можно один раз считывать строку из флеш-памяти. По крайней мере я так на Си делаю, а на бейсике пока не сообразил можно ли это повторить. Некрасиво читать для каждой строки по строке из памяти, когда можно было бы читать одну строку для всего экрана сразу с автоматическим переходом на следующую строку, если это нужно.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт мар 13, 2012 19:21:12
edm2007
uni писал(а):Мне бы очень хотелось знать как должна выглядеть программа на бейсике при использовании стандартной библиотеки для работы с индикатором по 4-проводной шине.
Например
ТАК. Вообще примеров довольно много. Да и справка у Баскома сильная.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт мар 13, 2012 19:31:01
uni
Кириллица в HD44780
Одна из главных проблем, с который могут столкнуться русскоязычные пользователи - нестандартная кодировка кириллических символов. То есть если вы отправите в ЖКИ обычную строку с русскими символами, вместо них на экран будут выведены абраказябры. Связано это с тем, что для экономии места в памяти контроллера тупоголовые разработчики вместо увеличения объема (можно было просто занять свободные ячейки) решили оставить лишь по одной ячейке для символов со сходным начертанием. Так например, буква O или P выглядят одинаково как в кириллице, так и латинице. Неумные инженеры подумали, что так они неистово сократят объем используемой памяти, но сократили лишь функциональность дисплея. И теперь при необходимости вывести русские символы, каждый раз возникает неприятная неприятность в виде несовместимости таблиц HD44780 и ASCII. Выхода есть два, у обоих свои плюсы и минусы:
1. Написать подпрограмму для контроллера, которая на лету будет декодировать ASCII коды и выводить уже правильные символы на ЖКИ. Удобна тем, что позволяет передавать любые строки без опасения, что они будут выведены впоследствии неправильно. Но этот способ требует лишних ресурсов на перекодировку, а также нужно постоянно хранить в памяти таблицу символов.
2. Использовать утилиту для ПК, которая сама переконвертирует нужные строки в нужный формат, которые сразу подставляются в код для вывода. Удобно тем, что не занимает память контроллера, работает быстро и вообще не требует ресурсов для перекодировки. Но минус в том, что в коде программы нужные строки уже не разобрать. Вывод символов в этом фиксированный, то есть выводить можно только заранее выбранный набор строк. При использовании ввода, например, с RS-232, русские символы будут отображены некорректно.
О наличии подпрограмм для первого случая мне известно, но я не встречал ни одной библиотеки или функции на Basom, которая бы выполняла это. Если вы встречали что-то подобное, убедительная просьба прислать это мне.
Похоже, что я реализовал этот первый случай. Только у меня не подпрограмма, а просто небольшой цикл. Надо будет товарищу отписать, если ему это до сих пор интересно.
А конфигурацию я делал так же, только вот "Config lcdmode = PORT" не писал. Попробую ещё раз. Спасибо за наводку на такое полное руководство.
П.С. Пояснение к тому как это работает. Вот код перекодирования:
Код: Выделить всё
'/**
' * Вывод символа из ОЗУ
' */
Sub LCD_PutChar(ByVal Ch As Byte)
Dim CharFromTable As Byte
'// Заглушка, если драйвер не выбран
'if ( Driver == LCD_DRIVER_NONE ) return;
'// Если есть перевод каретки, то переходим на следующую строку
If Ch = Asc( "|" ) Then
LCD_Goto 1, 0
Else
' CharFromTable = CP1251_TO_CPHD44780(Ch)
CharFromTable = Lookup( Ch, CP1251_TO_CPHD44780 )
' Выводим символ, который соответствует таблице индикатора
LCD_WriteData TYPE_DATA, CharFromTable
End If
End Sub
Самая главная часть здесь вот эта:
Код: Выделить всё
' CharFromTable = CP1251_TO_CPHD44780(Ch)
CharFromTable = Lookup( Ch, CP1251_TO_CPHD44780 )
Смысл здесь в том, что CP1251_TO_CPHD44780(256) - массив во флеш-памяти. Используя индекс, численно равный коду символа в кодировке CP1251, мы перемещаемся по таблице символов индикатора и возвращаем код символа в кодировке индикатора.
Пример. Допустим, что мы хотим вывести буковку "ё". Прикинем, какой символ мы должы получить при перекодировании. См. в прикреплённую табличку. Буковка "ё" должна иметь код: HLHH LHLH, что в переводе на русский означает: 1011 0101 или &HB5
А теперь посмотрим, что выдаст мой код. Открываем charmap.exe в Windows. Выбираем любой шрифт с кириллицей. Там найдётся буковка "ё" с кодом: Alt+184. Т.е. это означает, что если вы сейчас где-нить в поле ввода удерживая Alt наберёте 0184, то там появится буковка "ё" (можете это проверить). В hex'е это будет 0184 = &HB8. Теперь смотрим в мою табличку в конце файла: по строкам ищем &HB0, а по столбцам &H08 - там будет число &HB5 (!), т.е. перекодирование произойдёт и мы получим нашу любимую букву "ё", которую вроде как Екатерина ввела в наш обиход и по поводу использования которой есть целое Письмо Минобрнауки РФ от 20.07.2009 N ИК-971/03.
П.С2. Поскольку я не нашёл способа добавить в строку управляющий символ перевода каретки, то использовал символ вертикальной черты для перевода строки. В таблице ЖКИ это второй символ после буквы "z" (12 в верхнем регистре). В коде произошли некоторые изменения.
Код: Выделить всё
' В качестве разделителя строк используется символ вертикальной черты "|".
' Он отсутствует в таблице ЖКИ, поэтому был выбран вместо управляющего
' символа перевода каретки с кодом &H0D, который не удаётся задать в
' строке Bascom.
Text00:
Data "Pinboard II Демо|Bascom AVR"
' |<- Строка1 ->||<Строка2>|
' Вывод на индикатор будет таким:
'
' +----------------+
' |Pinboard II Демо|
' |Bascom AVR |
' +----------------+
RusText:
Data "Россия навсегда!|Ура, друзья!"
Так гораздо удобнее хранить "интерфейс" окошка.
Исходник:
PBIIDemo.bas
Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт мар 13, 2012 23:26:24
implex
Всем привет. Подскажите, пожалуйста, как правильно организовать сброс таймера при изменении одной из ножек МК с 0 на 1 и наоборот?
Re: BASCOM AVR в вопросах и ответах
Добавлено: Ср мар 14, 2012 17:47:22
uni
implex писал(а):Всем привет. Подскажите, пожалуйста, как правильно организовать сброс таймера при изменении одной из ножек МК с 0 на 1 и наоборот?
Копать тут:
10. Прерывания
Там есть примеры работы с прерываниями, в том числе с остановкой таймера, к примеру. Доработать под себя напильником.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Ср мар 14, 2012 22:38:20
implex
uni писал(а):
Копать тут:
10. Прерывания
Там есть примеры работы с прерываниями, в том числе с остановкой таймера, к примеру. Доработать под себя напильником.
Спасибо, но прерывания не подходят, т.к. эти ножки уже заняты под другие цели. Пока есть одна идея, буду проверять. В результате должно получиться следующее: на три ножки приходят сигналы, при переходе сигнала на первой ножке с 0 на 1 и наоборот сбрасывается таймер0, на второй ножке таймер1 и т.д.