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

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

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

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


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


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

Сообщений 151 страница 180 из 209

151

Чо вы так за неё боитесь то, за еепром то ентот... :D
У меня бала первая ардуина ещё хрен знат когда и такая прям цветная, возможно даже и оригинальная. И долго долго я её мучал ардуиновскими мигалками, ШИМами и прерываниями  :D
Потом перешил в баском и тоже долго-долго мучал её тем-же самым но на бейсике  :rofl:
Потом какой-то кекс у меня её выпросил и она сейчас у него похож работает.
Вот и прикиньте, скока раз я её программировал туды-сюды и ничо с ней не случилось  :glasses:

0

152

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

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

На уровне арифметики... ;)
Максимум - синусы/косинусы...

Мне в моей практической деятельности большего не требуется.
А всякие логарифмы и прочее остались еще в школе сразу после экзамена. ;)

А в плане EEPROM меня больше волнует ужасное положение ТС с электроснабжением, чем практическое количество циклов чтения/записи в эту память... ;)

0

153

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

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

Ты eeprom с флэшем не путай. :flag:

0

154

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

ужасное положение ТС с электроснабжением

Тогда ещё придется потратить кучу времени на придание уверенности, что сбой произойдет не в момент записи как раз этой eeprom (а то корявость запишется). Иными словами, надо тогда делать ещё систему анализа внешнего питания и запуск "бэкапа" данных, при том, что заряда на МК должно хватить на завершения этого цикла (записи).
Кстати говоря, с таким подходом, тогда морочиться циклами записи не придется.

0

155

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

Тогда ещё придется потратить кучу времени на придание уверенности, что сбой произойдет не в момент записи как раз этой eeprom (а то корявость запишется). Иными словами, надо тогда делать ещё систему анализа внешнего питания и запуск "бэкапа" данных, при том, что заряда на МК должно хватить на завершения этого цикла (записи).Кстати говоря, с таким подходом, тогда морочиться циклами записи не придется.

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

0

156

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

добавить батарейку

Лучше просто повесить электролит на МК, а питать его отдельно через диод (чтобы разряд работал только на него). Правда при работе с АЦП надо будет учитывать падение напряжение на диоде.

0

157

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

Лучше просто повесить электролит на МК, а питать его отдельно через диод (чтобы разряд работал только на него). Правда при работе с АЦП надо будет учитывать падение напряжение на диоде.

Думаю, это еще не последний вариант... ;)

0

158

Делал показометр счётчиков воды. Для того,чтобы не потерялись дневные значения расходов воды при отрубании питания ставил ионистор на 1 фарад и электролит небольшой. Питалось всё от 5 вольт. Как только напряжение пропадало,мк записывал текущие показания в еер и отрубался. На ионисторе,после отключения питания, устройство с экраном от Нокии полноценно дышало ещё несколько секунд,так что записать в еер сто раз успеет. Кстати,ионистор держит заряд для поддержания хода часов на DS3231 около 17 дней,дольше не проверял.

0

159

Ионистор спецом не предлагал, ибо там надо морочиться с его зарядом, ибо если ток не ограничивать, то он может стаб вгонять в защиту при полном разряде (нужно ток ограничивать).
Ну а DS вообще нафиг нужен ионистор, таблетка должна стоять.

0

160

Харощ флудить!
Давайте наваяем С++ подобную конструкцию на бейсике. Нуно.
Итак 20 переменных длиной по 8 байт.
Имеем указатель (читай адрес) в еепроме на начало области в еепром
Функция будет такой:  функция(номер переменной) отсчёт от 0 и до 19
адрес в еепром = указатель + (номер переменной *8)
читаем еепром
возврат

на вейсике это как будет, а лучше на ассемблере.

0

161

Какая нафиг функция, чо там делать, тупо организуешь массив в еепром, размерностью 20х8 - всё. Адрес считается по очень сложной формуле: 8 * N. :D

0

162

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

на вейсике это как будет

Можно еще объявить 20 штук:
Dim <имя> As ERAM Byte

Более длинно, чем массивом, зато можно сразу имена уникальные сделать, чтоб потом алиасы не прописывать... ;)

0

163

И как потом номер сопоставить переменной?  :D

0

164

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

И как потом номер сопоставить переменной?

Если нужен номер, как идентификатор, то массив, как предлагает RDW.
В теле программы прекрасно идентифицируются.

0

165

Напиши в качестве примера код.

0

166

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

Итак 20 переменных длиной по 8 байт.

Код:
Dim Array(40) As Eram Dword

0

167

Пётр написал(а):

Итак 20 переменных длиной по 8 байт.
Код: Dim Array(40) As Eram Dword

Как вариант:
Код:Dim Array(20) As Eram Double

0

168

20*8=160 вообще то...
Нет, нужна С++подобная конструкция с указателем на начало этих  160 байт. Начинаем считать с нуля по формуле указатель=указатель + (8* на номер 8-ми байтового массива)

Чёто типа:  (не бейсик, ассемблер)

x=номер 8-ми байтового массива
y=8
z= x*y
x=loadadr начало указателя
y=x+z

По (y) будет начало нужного массива для передачи другой функции.

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

0

169

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

20*8=160 вообще то...
Нет, нужна С++подобная конструкция с указателем на начало этих 160 байт.

Надо тогда изначально указывать правильно в ТЗ... ;)
Читаем в #160

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

Итак 20 переменных длиной по 8 байт.

К этому варианту и пришли.

160 байт - общая длина блока переменных

0

170

Или так вот, шлб проще для понимания:
Dim Array(160) As Eram Byte
Sub (number as byte)
local temp
temp= number*8

получается типа:
array(temp)

array - указатель на начало массива 2Х8байт
temp - указатель на нужные мне 8 байт

Можно так в бейсике сделать?

И ещё вопрос - в указателе можно использовать разные типа переменных, ну типа как в С структуры или классы???

0

171

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

И ещё вопрос - в указателе можно использовать разные типа переменных, ну типа как в С структуры или классы???

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

0

172

Где ты увидел типы в бейсике?

Давайте я наваяю то, что хочу на ассемблере, тока стыковать с бейсиком я не представляю как. Да и там не будет знаков. 20 id + crc c ds18b20

0

173

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

Где ты увидел типы в бейсике?

Типы переменных Bascom-AVR:

Bit 0/1 1 бит
Byte 0/255 1 байт целое положительное
Integer -32768 / +32767 2 байта целое число в указанных пределах
Word 0 / 65535 2 байта целое положительное
Dword 0 / 4294967295 4 байта целое положительное
Long -2147483648 / +2147483647 4 байта целое число в указанных пределах
Single 1.5х10^-45 / 3.4х10^38 4 байта число с плавающей запятой в указанных пределах
Double 5.0 x 10^-324 / 1.7 x 10^308 8 байт число с плавающей запятой в указанных пределах
String строка до 254х символов   

Другого названия для этого я не знаю... ;)

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

20 id + crc c ds18b20

Я это делаю немного по-другому.
Вам, боюсь, не понравится... ;)

0

174

Типы переменных  а не просто типы.

Вариант с множеством Case я делал, классно, но не нужно так. Не подходит. Не лезет!
Просто нужен стек id с количеством от 1 до ... да хоть 50 штук, не важно. Вот в чём загвоздка. Прикинь конструкцию из 50 операндов Case... массивно  :D

То-же самое нужно для ШИМ процедуры, ну не буду же я их ШЕСТЬ одинаковых писать, верно?
Вот ещё пример хорошего подхода... В функции ШИМ около 30 разных переменных (byte, integer и single). Вот как их упаковать в структурированный указатель? Например Pwm(1) раз так и подхватила свои переменные (1) и сохранила бы их там до следующего вызова, а? Классно и компактно? А Pwm(3) свои бы подхватил а функция то одна и она одинаковая! С байтами то всё попроще, они одинаковые по типу переменной.

Ладно, с 1820 всё на ассемблере вроде склеивается. Буду думать...

0

175

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

Типы переменных  а не просто типы.

Вероятно, "разборка" ведется относительно фразы "...поизгаляться с типами."... ;)

Разумеется, что речь шла о типах переменных, а не о чем-то другом. ;)

0

176

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

Думаю лучше, если сформированый указатель будет однозначно по количеству байт в адресе, лучше Word или Dword, чтоб не "попасть"

Воооот, в С для этого есть оттакая * и оттакая :: конструёвины, они определяют принадлежность к чему-либо. Наваять вектор на асме можно, но как его васкому передать, вот в чём вопрос то.
Нужно у буржуев "подглядеть"  :glasses:

0

177

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

Просто нужен стек id с количеством от 1 до ... да хоть 50 штук, не важно. Вот в чём загвоздка.

Если набор id будет динамичный, тогда надо что-то действительно изобретать.

В моем случае этот набор статичный на долгое время, сам процесс ко времени не требовательный.
Могу предложить вариант, только надо переписывать для использования EEPROM.

0

178

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

в С для этого есть оттакая * и оттакая :: конструёвины

А можно комментарии к ним приложить ?
Даже не представляю, на какую резьбу они прикручиваются... ;)

0

179

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

поизгаляться с типами

Ну как id от 18b20 будут типами, вордами или доублами???  А? Ну как не понять то таких простых вещей - если в системе 20 датчиков (например) и один из них взяли и поменяли на другой... это что, все 20 id перенастраивать? А с конструкцией Case "выпавший" датчик просто не откликнется... и будет "опа"  :rofl:

0

180

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

Ну как id от 18b20 будут типами, вордами или доублами???  А? Ну как не понять то таких простых вещей

А как можно "понять эти простые вещи", если что/к чему/для чего выясняется только по ходу переписки ? ;)
Нострадамусов тут нет, чтоб в будущее заглянуть... ;)

Разумеется, в этом случае уже так корячится с типами переменных не получится, тут массив - лучший вариант, т.к. даже при использовании Double нет вероятности, цепочка id не превысит 1.7 x 10^308.

0


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