Полностью с Вами согласен!! Каждый сам индивидум!)
Аква-контроллер от Олега
#921
Отправлено 04 Декабрь 2014 - 10:26
#922
Отправлено 04 Декабрь 2014 - 14:02
Вкратце разница небольшая есть.
Глобально это конечно русский язык, адаптированный под Аквашилд. Небольшое изменение главного экрана.
Управление светом практически без изменений. Думаю тут не стоит уже ничего менять.
Так же добавлена кормушка. В программе решил не делать управление сервой, только вкл. выкл., в кормушку воткнул ардуино нано и повесил на нее серву, контроль уровня корма и микровибратор чтоб корм не зависал. (Но это уже другая тема )
Добавил дозатор УДО - 4 канала. (Для пресняка. Для моря тоже можно использовать. Для баллинга.)
Контроль уровня PH с управлением подачей CO2 в процессе допиливания. Контроль уровня воды планируется либо на двух простейших поплавках, либо на одном, но с несколькими герконами в трубке и резистивным делителем. (Вход будет задействован один)
Убрал погоду и помпы. Мне ни к чему, но можно и вернуть.
У меня почему то про погоду все время спрашивали владельцы пресных аквариумов, так что пришлось сделать
Потихоньку запихиваю повторяющиеся операции в функции. Так что места должно хватить наверно на всё. Ну или почти на всё.))))
Сколько места в % у тебя осталось от памяти, интересно..
Вот насчет повторяющихся функций - интересно. Предлагаю бартер
С удовольствием бы взял хорошую функцию таймера, но мне нужно с секундами. Это то что требуется для УДО и дозаторов.
Могу дать новую навороченную функцию кнопок +/- типа тех что в настройках температуры, но единую для всей программы.
#923
Отправлено 04 Декабрь 2014 - 17:15
Вот еще есть хорошая библиотека сильно уменьшает размер скетча
#include "CyberLib.h" void setup() { D13_Out; //Настраиваем пин D13 на выход } void loop() { label: D13_High; D13_Low; goto label; }
Скетч занял 456 байт в памяти контроллера, что почти в двое меньше и на выходе пина 13 получили частоту 2650 кГц.
Теперь результат впечатляет, скорость работы отличается в 22 раза
Описание функций библиотеки CyberLib
********Управление пинами: Dx_Out; - установка пина Х как выход Dx_In; - установка пина Х как вход Dx_Hihg;- установка высокого уровна на пине Х Dx_Low; - установка низкого уровня на пине Х Ax_Read; - чтение аналогового пина Х ********SmallUart UART_Init(115200);//инициализация последовательного порта UART_ReadByte(byte);//получить байт данных из последовательного порта UART_SendByte(byte);//отправить байт данных в последовательный порт UART_SendArray(array, size array);// Функция отправляет в UART порт, массив типа байт, максимальный объем которого не должен превышать 65535 байт, минимальный объем массива 1 байт Можно также отправлять часть массива array-имя вашего массива, size array-число отправляемых байт массива ******** delay_us() и delay_ms() Функции delay_us() и delay_ms() можно применять в прерываниях так как они не используют таймер, но следует не забывать что точность этих функций зависит от использования в коде обработчиков прерываний. Если Вы не используете в коде прерывания то и точность будет высокая delay_us(n); //где n - задержка в мкс, максимальная задержка может быть не больше 16000мкс delay_ms(n); //где n - задержка в мс, максимальная задержка может быть не больше 65000мс это равно 65сек ******* Timer1. Настройку прерываний таймера можно настривать от 6мкс. до 4000000мкс.(4сек.) с шагом 1мкс. StartTimer1(obrobotchik, 1000);// запуск таймера, первый параметр это Ваш обработчик прерывания, второй параметр это время, может принимать значения от 6 до 4000000 StopTimer1();// Выключить таймер ResumeTimer1(); возобновить отсчет после остановки RestartTimer1(); перезапустить отсчет таймера заново ********SPI. Увеличил пропускную способность в 1,85 раза, при работе на одной и той же частоте SPI теперь можно настроить и запустить одной строкой : StartSPI(0, 2, 1); Где первый параметр это режим mode от 0 до 3 Второй параметр это делитель тактовой частоты, может принимать значения 2, 4, 8, 16, 32, 64, 128. Если Вы хотите выяснить частоту SPI то должны тактовую частоту контроллера 16000000 разделить на любой делитель из списка. И последний параметр это какой бит пойдет первым. Если 1 то первым пойдет старший бит если 0 то первым пойдет младший бит. Отправить байт данных в шину SPI можно так: SendSPI(12); Получить байт данных MyData=ReadSPI(); Выключить SPI можно так: StopSPI(): *********EEPROM Ограничение! адресует максимум 256 адресов для типа Byte Для Word максимум 128 Для Long максимум 64 Сохранить значение 4000000 в EEPROM по адресу 0 тип Long WriteEEPROM_Long(0, 4000000); Прочитать из EEPROM с адреса 0 значение типа Long uint32_t tmp=ReadEEPROM_Long(0); Сохранить значение 4000 в EEPROM по адресу 0 тип Word WriteEEPROM_Word(0, 4000); Прочитать из EEPROM с адреса 0 значение типа Word uint16_t tmp=ReadEEPROM_Word(0); Сохранить значение 400 в EEPROM по адресу 0 тип Byte WriteEEPROM_Byte(0, 200); Прочитать из EEPROM с адреса 0 значение типа Byte uint8_t tmp=ReadEEPROM_Byte(0); ********find_similar(Array, sizeArray, range); Фильтр удаления шума и ложных срабатываний Функция возвращает наиболее часто встречаемое в массиве значение Array - Указатель на проверяемый массив, массив может иметь тип uint16_t или uint8_t sizeArray - длинна массива не более 256 элементов range - предел погрешности(отклонен� �е) может колебаться от 0 до 127, при значении 0 функция будет искать точные копии значений ********beep beep(uint16_t dur, uint16_t frq); Генерирует звуковые колебания, на любом пине с заданной частотой и длительностью dur - длительность от 50мс до 65535 мс frq - частота от 10 Гц до 2000 Гц *********Soft Reset reset(); - программный сброс контроллера При помощи этой функции можно отправить контроллер в ребут в любом месте выполняемой программы *********Бесконечный цикл Start - Начало цикла End - Конец цикла ********* Работа со сторожевым таймером wdt_reset() - обнулить сторожевой таймер wdt_disable() - выключить сторожевой таймер wdt_enable(timeout) - Инициализация сторожевого таймера Возможные значения timeout WDTO_15MS WDTO_30MS WDTO_60MS WDTO_120MS WDTO_250MS WDTO_500MS WDTO_1S WDTO_2S WDTO_4S WDTO_8S
#924
Отправлено 04 Декабрь 2014 - 17:23
Вот сама библиотека
Прикрепленные файлы
- Dima.K это нравится
#925
Отправлено 04 Декабрь 2014 - 17:28
Сколько места в % у тебя осталось от памяти, интересно..
Вот насчет повторяющихся функций - интересно. Предлагаю бартер
Я не питаю иллюзий по поводу написания кода Далеко мне еще до совершенства.
Таймер дозатора как раз посекундно отрабатывает. Специально секундомером измерял
Код пришлю в личку обязательно. (может будет над чем посмеяться)
Скетч занимает 232 кб. 89%. Но это без погоды и помп. Но с кормушкой, таймерами и дозаторами. Места как раз под контроль PH я думаю хватит.
А навороченная функция это типа нажал-подержал и побежали? Было бы интересно.
#927
Отправлено 04 Декабрь 2014 - 21:21
для максимальной производительности и компактности кода, советую использовать сразу стандартную/нормальную запись в порт (я тут опускаю ассемблерные вставки, это очень редко когда необходимо, кроме того, приведенная ниже запись на С практически повторяет мнемокод, зависит от включенной оптимизации и самого компилятора конечно)
#define bMASK = 0b00001000;
// запись единицы в PORTB (для примера), в bit3 (также для примера)
PORTB |= bMASK;
// запись 0 туда же
PORTB &= !bMASK;
естественно так можно выставлять сразу несколько пинов за один присест, если они принадлежат одному и тому же порту
// тоже самое, только без define
PORTB |= 0x08;
PORTB &= 0xF7;
Мы знаем, каково с серебром;
Посмотрим, каково с кислотой..." ©БГ
#929
Отправлено 04 Декабрь 2014 - 21:38
#930
Отправлено 04 Декабрь 2014 - 21:44
А как на флешку сохраняешь... или или SDкарту имеешь в виду?
На карту пишет без вопросов и глюков.
#932
Отправлено 04 Декабрь 2014 - 21:46
я заметил что это возникает когда срабатывают таймеры и охлаждение или обогреватель.
- shakalby это нравится
#933
Отправлено 04 Декабрь 2014 - 21:47
Имхо где-то что-то не контачит или наводки какие (не электрик я )
#934
Отправлено 04 Декабрь 2014 - 21:52
А как на флешку сохраняешь... или или SDкарту имеешь в виду?
На карту пишет без вопросов и глюков.
Неправильно выразился. Конечно речь про SDкарту идет.
Сам процесс сохранения проходит нормально. Просто артефакты на экране возникают иногда. От таймеров нет такого у меня. Может потому, что твердотельные реле стоят.
#935
Отправлено 04 Декабрь 2014 - 21:59
так у меня помех от реле быть не должно, ардуинка управляет ими через оптрон.
#936
Отправлено 05 Декабрь 2014 - 00:49
А вот это не факт. Контакты реле - источник помех в очень широком спектре частот. Если реле близко к низковольтным цепям - всякое возможно...
#937
Отправлено 05 Декабрь 2014 - 09:46
Николай Я ищу ту строку на которой у тебя встречается глюк!!!
это координаты значений температуры (если не забыл), там вылазят строки и у тебя идет глюк в координатах! одни ложатся на другие!!! и еще был глюк с голубым!! он съехал в сторону к белому !!! я залью твой скетч , еще раз гляну!!!
сейчас проблема у меня идут соревнования! и я прихожу убит домой! все ни как руки не дотянутся!(((((
#938
Отправлено 05 Декабрь 2014 - 13:59
Добрый день.
Хотел попросить у Вас скинуть в личку, посмотреть Вашу версию скетча для аква контроллера.
Подскажите на какой версии (по дате) Вадима Вы делали Свою модификацию?
С Уважением Григорий.
#939
Отправлено 05 Декабрь 2014 - 15:14
Я бы тоже посмотреть хотел...
#940
Отправлено 05 Декабрь 2014 - 19:58
тоже очень интересно, если можно и мне ....
Количество пользователей, читающих эту тему: 2
0 пользователей, 2 гостей, 0 анонимных