Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Помогите с алгоритмом!


Помогите с алгоритмом!

Сообщений 121 страница 150 из 209

121

Nord написал(а):

А часы "один раз в минуту" не по прерыванию ?

В самом начале темы сказали, что у часов есть "секундный" выход.
Считая его, можно к часам вообще не обращаться...
У часов пару раз в сутки дату "спросить для уточнения" - вот и всё...

Видать я чего то не понял. Я думал одно дело опрашивать по прерыванию один раз в минуту ,другое дело каждую секунду.

Отредактировано olegkaras (2018-02-26 00:08:24)

0

122

Nord написал(а):

А точно ли они так нужны ?
Если не сложно, перечень процессов, обрабатываемых по прерываниям - "в студию"...

ЗЫ. Кстати, по поводу скинутого ранее архива...
Насколько я понял, там Акселем не пахнет, все на датчиках слеплено...
Могу, конечно и ошибаться...

По внешнему прерыванию у меня работает 1) тахометр, 2)синхроимпульсы от сети для записи в память в каком месте остановилась программа при отключении электричества,3) если получится приццеплю RC5.
Аксель - это акселерометр? Так это датчик и есть. 8-)

0

123

Верблюжонок спрашивает у папы, кто мы... Папа отвечает: - мы корабли пустыни, мы можем не есть и не пить неделями...
А верблюжонок отвечает: - нахрена нам такой "тюнинг" в Саранском зоопарке?  :D
===
Шикарно, считай шо Пикассо и Вангог курят в сторонке.
Где взять либу от дисплея?
Кто разобрался в иерархии его "кодовых" переменных?  :tired:

0

124

- "будь проклят тот день, когда я заказал программатор для AVRа"  :D
___

Мне кажется, шо этот "код" голимая КОПИПАСТА с полным непониманием того, шо нужно от этого кода.
Попадаются очень интересные куски с полным обессмысливанием логики происходящего.
Например:
If Инженерное_меню = 500 then (а тут вАААще пусто!!!)  :rofl:
else
...

Это как будет работать???

0

125

o.O
Накапливаем 64 значения Integer и делим его на 64 путём арифметического сдвига вправо и присваиваем результат в переменную Single  :rofl:
Смысл???  :crazy:

Тут некоторые не приемлют С++ подобных конструкций, но, лично я бы сделал процедуру накопленного среднего арифметического.
Ну типа так
среднее_арифметическое функция (новое значение)
среднее_арифметическое = (накопленное_значение + новое значение) / 2

Причём сделал бы вектором, чтобы одна и та же процедура считала разные переменные и тем самым код был короче...

НАФИГА конструкция из много_If???
Case никак не катит?

Это что: а=а+1 ???   местами попадаются Incr... значит писали разные люди...

0

126

' опрос АЦП 5
x=Getadc(1)     ' ну это ещё ладно... :D

Вот это вот вААще бомба
'waitms 20  ' подождём, будет глючить    :crazyfun:

0

127

olegkaras написал(а):

По внешнему прерыванию у меня работает 1) тахометр, 2)синхроимпульсы от сети для записи в память в каком месте остановилась программа при отключении электричества,3) если получится приццеплю RC5.


У тебя >70% процессорного времени занимает обработка прерываний Pulse и 595.
Кто тебя научил так писать обработчики прерываний, покажи мне этого идиота  :rofl:

Обработчик ДОЛЖЕН быть максимально КОРОТКИМ и ни о каких сложных команд ветвления и расчётов с плавающими точками быть не должно!!!

У тебя при трассировке ~~20% идёт на линейный код, остальное время проц обрабатывает прерывания!!!

И это только ДВА из них, Int-ы и "понты" пока не обрабатываются...

Короче, как я и говорил выше: не заведёт он её, у неё свеча отсырела  :glasses:

0

128

olegkaras написал(а):

Видать я чего то не понял. Я думал одно дело опрашивать по прерыванию один раз в минуту ,другое дело каждую секунду.

Видать опять "не понял"... ;)
Не опрашивать часы ежесекундно, а использовать секундный импульс для внутренних расчетов в МК.
Опрос часов или внутренний расчет займут примерно одинаковое время, вывод на индикатор будет в любом случае.

olegkaras написал(а):

Аксель - это акселерометр? Так это датчик и есть.

Я в курсе. Только там я его не встретил !
Через слово читаем ? ;)

0

129

Вот для примера обработчик КРИТИЧЕСКИХ временных ситуаций на голом асме и с максимальным быстродействием и осмысленными названиями функций и переменных.
Ознакомьтесь, это будет полезно.

$asm
Tm1638_set_stb:
               sbi portb,0
               rcall Tm1638_1us
               ret
Tm1638_res_stb:
               cbi portb,0
               rcall Tm1638_1us
               ret
Tm1638_set_clc:
               sbi portb,1
               rcall Tm1638_400ns
               ret
Tm1638_res_clc:
               cbi portb,1
               rcall Tm1638_400ns
               ret
Tm1638_set_dio:
               sbi portb,2
               ret
Tm1638_res_dio:
               cbi portb,2
               ret
Tm1638_1us:
               rcall Tm1638_400ns
               rcall Tm1638_400ns

Tm1638_400ns:
               push r0
               pop r0
               ret
$end Asm

Nord - трассерни его код или лучше глянь на конструкЦИИ из кучи If а Then ПУСТОЙ!!! Это как вААщпе можно так написать, чо за имбицилл писал Это???
Для примера - макрос "линейность прессостата" => полный бред!!!  :rofl:

0

130

-NMi- написал(а):

Nord - трассерни его код или лучше глянь на конструкЦИИ из кучи If а Then ПУСТОЙ!!! Это как вААщпе можно так написать, чо за имбицилл писал Это???Для примера - макрос "линейность прессостата" => полный бред!!!

Если честно, то нет пока времени копаться в чужом.
Свой проект выходит на полуфинальную стадию... ;)

А на тему "кто так пишет" - я уже был однажды ткнут носом в подобное... ;)
Как ни странно, но меня это не царапнуло никак... ;)

Пишем, как нам понятнее, в привычном для себя стиле, потом "причесываем и убираем лишнее".
В конечном результате порой (у меня) остается менее 50% от первоначального.
Еще, например, стараюсь не использовать прерывания до тех пор, пока без них уже просто не обойтись.

Кто-то садится в машину головой вперед, у кого-то первой туда попадает "пятая точка".
В результате - оба за рулем и едут. ;)  И кто из этих водителей "делает неправильно" ? ;)

0

131

Сравнение с авто не корректно и не к месту вообще!
УЧИТЕЛЬНИЦА по программированию (классная мадам тока тока с универа) мне всегда говорила - "код должен быть строен как мои ноги и красив как моё лицо"
Это было ~~20 лет назад и первые курсы универа и я это до сих пор помню!!!
"искусство" - это когда нет НИЧЕГО лишнего!!!
А "это" голимый плагиат, причём аФФтор() плагиата намеренно сделал "ошибки" для тех, у кого мало смазки в голове!

0

132

-NMi- написал(а):

"искусство" - это когда нет НИЧЕГО лишнего!!!

К сожалению, в мои годы учебы уроки "информатики" еще только планировались... ;)
Все, что умею на сегодняшний день - "самомучка"...  :blush:

-NMi- написал(а):

А "это" голимый плагиат, причём аФФтор() плагиата намеренно сделал "ошибки" для тех, у кого мало смазки в голове!

В отношении используемого стороннего кода ("плагиата" ;) ), тут да, несомненно - тупо копирование приведет к глюкам в голове новодеятеля... ;)
Пару раз сам ловился... ;)

0

133

Не думай,что я троллю или сарказм какой от меня исходит...нет  :glasses:
Просто научиться делать НОРМАЛЬНО и сразу и ТОЛЬКО САМОМУ и задавать только МАнеНЬКИЕ вопросики - вот удел профессионалов!!!
А по любому "пуку" создавать темы - это не серьёзно  :rofl:
Сразу же сказал - ничего у него не получится!!! ,,, если своей ГОЛОВОЙ думать не научится!!!    :D

0

134

-NMi- написал(а):

Сразу же сказал - ничего у него не получится!!! ,,, если своей ГОЛОВОЙ думать не научится

Ды-к он тебе же ответил:

Nord написал(а):

К сожалению, в мои годы учебы уроки "информатики" еще только планировались


Хотя программирование и понимание тех.процессов - это скорее от природы должно идти, как и всё остальное, свою голову не прикрутишь, нужно понимание и рвение...

0

135

RDW написал(а):

нужно понимание и рвение...

o.O
Логику развить - 6 секунд!
Математику вспомнить - 2 дня.
Что ещё нужно то?  :D

0

136

-NMi- написал(а):

Что ещё нужно то?

Угу, я уже эту историю рассказывал много раз, ещё раз повторю:

У меня друг решил заняться программированием (тоже размышляя на тему: как всё легко и просто).
В итоге прочитал кучу книжек и в конце закрыв очередную произнес: "всё понятно и как теперь мне это применять?"
По факту всё закончилось копипастами на дунях кода (с инета) и легкими правками параметров.

На этом его увлечение закончилось.

Когда человек увлечен, у него всегда есть: интерес, время, финансы (на это всё).

0

137

RDW написал(а):

-NMi- написал(а):Сразу же сказал - ничего у него не получится!!! ,,, если своей ГОЛОВОЙ думать не научится
Ды-к он тебе же ответил:
Nord написал(а):К сожалению, в мои годы учебы уроки "информатики" еще только планировались
Хотя программирование и понимание тех.процессов - это скорее от природы должно идти, как и всё остальное, свою голову не прикрутишь, нужно понимание и рвение...

Вот только не надо перепутывать мою переписку здесь с -NMi- и его (-NMi-). мнение о возможностях ТС... ;)

Кстати, в присланом им (ТС) мне архиве - весьма интересное решение по аналогичному с ним вопросу, на Меге8.
Правда, исходник на Си, но мои скудные понятия в нем позволили разобраться, что акселерометр там не используется, только датчики.
Схему не видел, она в форматах, моим ПО не поддерживаемых, а устанавливать что-то ради одной схемы желания нет...

Что кому от природы дано - одной природе ведомо, а форум - для того и форум, чтоб задавать вопросы и получать на них ответы, а не махать флагами...

Отредактировано Nord (2018-02-26 20:11:16)

0

138

RDW написал(а):

Когда человек увлечен

Тогда у него вопросы другого уровня!

0

139

Nord написал(а):

а форум - для того и форум, чтоб

Чтоб делиться нормальными идеями а не для плача - скоммуниздил код а он не работает.
Открой его проект в протеусе и трассирни его там-же... ты афигеешь от количества "ляпов"
Упаси Бог так кодить  :rofl:

0

140

-NMi- написал(а):

не для плача - скоммуниздил код а он не работает

Вот тут однозначно согласен.
Используешь чужое - думай, как его приспособить к своим нуждам.
Вряд ли настоящий автор задумывал то же самое.

-NMi- написал(а):

Чтоб делиться нормальными идеями

80% вопросов в стиле "помогите" - как с ними быть ?
Распознать на этом этапе "нормальную идею" - мало быть Вангой... ;)

ЗЫ. За...ем тему неподеццки. ;)

0

141

Nord написал(а):

80% вопросов в стиле "помогите" - как с ними быть ?

Никак!
Скажу прямо - да, копипастил у Саши и много у кого ещё с этого форума куски кода много много лет назад. Да, местами не работало. Пришёл к выводу, что проще спи...ть идею и обрисовать её уже по своему усмотрению.
Да, задавал глупые вопросы, но тут-же находил проблемы в самом себе и решал их как один так и про помощи форумчан.

Здесь же все совсем по другому... мол помогите и всё тут. Нет никакого стремления к самоанализу и исправлению ошибок!

Такими темпами этот код будет писаться не один год и врят=ли дойдёт до совершенства...

0

142

-NMi- написал(а):

80% вопросов в стиле "помогите" - как с ними быть ?
Никак!

Тогда смысла в форуме нет, т.к. все вопросы так или иначе подпадают под "помогите", только сформулированы иначе... ;)
А для готовых разработок проще блог держать и там уже в комментах попинывать заблудших "чайников"... ;)

-NMi- написал(а):

Скажу прямо - да, копипастил у Саши и много у кого ещё с этого форума куски кода много много лет назад. Да, местами не работало. Пришёл к выводу, что проще спи...ть идею и обрисовать её уже по своему усмотрению. Да, задавал глупые вопросы, но тут-же находил проблемы в самом себе и решал их как один так и при помощи форумчан.

Вот прямо руками и ногами - "ЗА".
Только вот выделенное - не из разряда "помогите" (см. выше) ? ;)

-NMi- написал(а):

Здесь же все совсем по другому... мол помогите и всё тут.
Нет никакого стремления к самоанализу и исправлению ошибок!

Ну, тут уже от форумчан зависит, от их терпения и желания, толерантности к собеседнику...
Я считаю так: не нравится собеседник, нет понимания - не надо с ним общаться (в данный момент). ;)
Есть желание помочь - так помоги...

Вот лично мне глубоко фиолетово, заработает эта стиралка или нет... ;)  Это - цель ТС, а не моя... ;)
Просто, если я могу чем-то помочь, то помогаю в меру сил, если нет - наблюдатель.
Плюс к этому в цепочке поиска решений как самим автором, так и с участием форумчан, уже отловил для себя пару-тройку полезных моментов, которые мне пригодятся в будущем.

0

143

Nord написал(а):

уже отловил для себя пару-тройку полезных моментов,

Только умные способны учиться даже у дураков!

Всё намана, просто этот проект уж очень долго "зреет" ,,, да ну и х... с ним, буду посматривать и подпинывать иногда... :flag:

0

144

olegkaras написал(а):

По внешнему прерыванию у меня работает
1) тахометр,
2)синхроимпульсы от сети для записи в память в каком месте остановилась программа при отключении электричества,
3) если получится приццеплю RC5

Ну ладно, от 1 и 3 убежать тяжелее...

А вот "2" - насколько актуально, чтоб его по прерыванию мониторить ?
Насколько велика вероятность отключения электричества ?
Думаю, что этот фактор вполне можно контролировать одной ножкой МК, даже не АЦП.
Причем начать контроль можно по любой причине:
- остановился двигатель - проверили Uпит
- нет сигнала от датчика температуры - проверили
- и т.д.
И для этого достаточно обычных "If ... Then Gosub <Проверка Uпит>"
Если даже есть такое желание сохранять состояние в EEPROM, то можно и батарейку приткнуть, которой вполне хватит, чтоб сделать запись.

Отредактировано Nord (2018-02-26 23:16:28)

0

145

Nord написал(а):

А вот "2" - насколько актуально, чтоб его по прерыванию мониторить ?

Можно и нужно его мониторить по прерыванию, но не так, как он это "пытается" сделать путём соединения "глупых" касков никчемного кода.
Мой тебе совет: обрисуй всё это дело в "класс" , ну что-то типа вектора.
Например: вектор имеет структуру...
номер_программы, температура_воды, стратегия_стирки, время_нагревания, время_стирки, обороты_отжима и тд...
Раздели всё это на кванты, допустим равные секунде и пиши всё это в еепром. В случае аварийной ситуации ты будешь точно знать на каком этапе произошёл сбой и какой сбой произошёл, внешний или внутренний.

Именно так и делают программы нормальные программисты, те. всё разделяют на сегменты и контролируют их. В твоём же случае код имеет не структурированность и хрен знат что там исполняется и нужно ли оно вообще для исполнения...

Возьми любой проект да хоть на дуне и проанализируй как он работает, его логику и ты всё сам поймёшь.
Клацать в "пустом" режиме, когда стиралка ниче не делает а ты обрабатываешь неравномерность вращения барабана - верх дол....ма.
Контролировать кнопки и высчитывать показания датчиков - то=же самое.
Короче, у тебя основная проблема, как писали выше - ты не знаешь как это привести к общему алгоритму а уже потом это интерпретировать в код.
Думай.

0

146

-NMi- написал(а):

Nord написал(а):А вот "2" - насколько актуально, чтоб его по прерыванию мониторить ?
Можно и нужно его мониторить по прерыванию

Если бы это был аварийный режим, который может повлечь за собой что-то более тяжкое, чем прерывание стирки - тогда да.
Если же это только ради контроля, запоминания состояния "на будущее" - то тут другое.

Я бы все-таки прерывания отдавал по приоритету значимости, привязывая их к приоритетам в МК.

-NMi- написал(а):

Раздели всё это на кванты, допустим равные секунде и пиши всё это в еепром.

EEPROM через месяц стирок выработает свой ресурс... ;)
Раз в месяц менять МК ?

-NMi- написал(а):

Возьми любой проект да хоть на дуне и проанализируй как он работает, его логику и ты всё сам поймёшь.Клацать в "пустом" режиме, когда стиралка ниче не делает а ты обрабатываешь неравномерность вращения барабана - верх дол....ма.Контролировать кнопки и высчитывать показания датчиков - то=же самое.Короче, у тебя основная проблема, как писали выше - ты не знаешь как это привести к общему алгоритму а уже потом это интерпретировать в код.Думай.

Дополню, как бы я строил программу...  Обычно так и делаю (метод не навязываю, т.к. он далеко не идеален ! ).
1. Каждый модуль отработать отдельно.
Свой код или сторонний - без разницы. На этом этапе будет четко понятна работа каждого блока.
Сторонние сигналы можно симулировать.
2. Начинать собирать модули в одну программу.
В один листинг или подключаемыми блоками - как понравится.
3. Тестировать (симулировать) собранную программу.

Сгрудив все найденное где-то и написанное собой сразу в одну кучу, довольно сложно:
1. Сразу правильно связать их (блоки).
2. Потом отлавливать багов, особенно в чужом коде (фрагмента).

0

147

Nord написал(а):

Я бы все-таки прерывания отдавал по приоритету значимости, привязывая их к приоритетам в МК.

Нету их в атмелене, приоритетов!

Nord написал(а):

EEPROM через месяц стирок выработает свой ресурс...

У тебя калькелятор врёт или ты в прачечной работаешь?  :D

Если брать логику работы современных машин - они все работают на событиях.
Допустим, вы захотели постирать, загрузили бельё, закрыли крышку, выбрали программу и нажали кнопку "Старт"

Возникает гирлянда событий и конечный флаг в конце.
Вот так:
дверь закрыта+программа выбрана+кнопка старта нажата+ещё какие-либо события = флаг_готовность_к_наполнению_воды (1 байт в еепром!!!).

Далее второе событие:
открыть водяной клапан и считать время наполнения бака и следить за уровнем в нём
если за время, отведённое в векторо бак не наполнился = флаг_нет_воды установился и машинка свалилась в аварию.
если всё нормально = выставляем флаг разрешение_нагрева ТЭНом и включаем его
контролируем температуру и время нагревания тогда, когда процессору делать нефиг, да хоть раз в минуту, система инерционна
делаем паузу и покрутим туды-сюды барабан для намокания белья несколько раз, допустим 1 минуту
проверим уровень воды и если нужно - добавим опять-же через таймер.
если всё хорошо - выставляем флаг = бак_наполнен
ВСЁ, к прессостату БОЛЬШЕ не обращаемся, бак то у нас не дырявый... :D
далее из указателя берём температуру стирки и стратегию стирки
вращаем туды-сюды барабан, делаем паузы и вращаем опять, заодно иногда контролируя температуру
всё! цикл стирки запущен и работает!
по мере нагрева воды по таймеру и температуре ставим флаг = вода_нагрета_до_температуры_стирки  или ошибка = ТЭН неисправен!
по тому-же таймеру отсчитываем длительность стирки, ставим флаг = стирка_1_закончена (ну или замачивание или что ещё...)

ВСЁ!!!
по образу и подобию делаем циклы замачивания, полоскания и выжима!!
Усё просто, шеф!!!  :D

0

148

Nord написал(а):

Раз в месяц менять МК ?

Нордик, у тебя как с математикой??? А?

Вот смотри, при каждой!!! стирке мы будем "прогать" по ОДНОМУ байту на флаг. Итого флагов у нас всего будет не более 30-40 штук. Если ты так болеешь за еепром - введи счётчик количества стирок и по достижению в нём миллион или сколько там циклов туды-сюды смести указатель на новый участок неиспользованного еепрома и пусть она стирает дальше!  :rofl:

А теперь тушь:
даже если ты будешь стирать 1 раз в сутки и при ресурсе аапром в 1000000 записей имеем:
1000000 / 365 = 2739 лет стирки  :crazyfun:
У тебя барабан изотрётся  :rofl:

0

149

-NMi- написал(а):

скоммуниздил код а он не работает

Я по этой причине никогда и не "коммуниздю" :) Да и самому интереснее разобраться. Бывают конечно затыки, нюансы, тогда просто беру гугл и вперёд! Кстати говоря находится практически всё (можно и в асме подглядеть у людей и в си, а потом в баскоме реализовать).

0

150

-NMi- написал(а):

введи счётчик количества стирок и по достижению в нём миллион или сколько там циклов туды-сюды смести указатель на новый участок неиспользованного еепрома и пусть она стирает дальше

Угу, а участок как раз будет храниться в одном адресе (месте). :D

-NMi- написал(а):

у тебя как с математикой


На самом деле так себе алгоритм, я в своё время, в одной поделке делал просто, есть часть/область (eeprom) заведомо с пустыми значениями, а каждое новое писалось в новое место (сдвигалось, разрасталось как червяк). При включение просто определялась граница чистой части и последних записанных значений. Очистка шла кольцом, можно просто стирать с сдвигом на N шагов.

Отредактировано RDW (2018-02-27 11:11:56)

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Помогите с алгоритмом!