Первый пост темы: bazarov Post: #249920 От:07.06.2010 (19:24) Хочу завести себе свою ветку, чтобы не распыляться. Идей много, а на проверку времени мало. Вот захотелось проверять все вечняки в математике, а потом смотреть где ошибка закралась. Если есть интересующие - присоеденяйтесь.
Обсуждаться будет только один ЧЁРТЁЖ или ЭКСКИЗ единовременно. Пока один агрегат не будет расколупан до конца, дальше ни-ни. Если нет возможности рисовать - сам потом нарисую или картинку вставлю. Весь словесный понос подтверждать оффициальными ссылками. Ссылка на дурдомопедию (википедию) в крайнем случае давать. На сайтах производителей и институтов инфы хватает. Всяких дибилов самоназваных с Ахрененными межгалактическими дипломами не приводить в пример.
Надеюсь энергия потом с кондёра не порёт, и ахренесово колесо вечно не поедет - наука штука точная. КПД устройства для взлома искать больше 20% (КПД1,2).
Нельзя взламывать секреты приборов производимых на постсоветском пространстве. Ибо тут всё просто - турма (Поддержим отечественного производителя!). А заграничные стандарта ISO для нас практически недосягаемы, мы со своим ГОСТОМ на рынке условия не диктуем. Поэтому взлом иностранной технологии в нашей "Раше" приравнивается к шлепку буржую по заду - только щёчки порозовеют 😀 . Наши технологии "ломать" только с разрешения собственника либо если инфа открыта для пользования.
Ламачче невозможное проверить при помощи формул теоретически либо элементарно практически также не выкладывать.
Расшифровка предупреждений:
ПИП - первое израильское предупреждение;
ВИП - второе израильское предупреждение;
ТрИП - третье израильское предупреждение;
ЧИП - вставляем имплантант биоботу;
ППЦ - биоботу пипец.
bazarov Пост: #289004 От 12.Feb.2011 (03:30)
В высокоуровневых язывах никаких адресов нет, а тут некие вшитые регистры и память без опознавательных знаков. Как туда данные пихать 😀 ?
Дык, полная свобода! 😀
Если помнишь, в С или Паскале (в отличие от Васика) чтобы начать использовать переменную, сначала надо ее определить. С и Паскаль поэтому - строгие языки. А для чего? Для того, чтобы компилятор точно знал, с каким объектом имеет дело, сколько надо выделить под него памяти, где его расположить и какими командами с ним работать. Вот сколько гемороя берет на себя компилятор! Программисту остается сделать всего одно дело: назначить переменной тип. Например:
int counter;
counter = 0;
...
counter++;
if(counter>10) break;
...
Слово int означает, что переменная у нас двухбайтная и находится в памяти (а не в регистре общего назначения). В языке ассемблера тоже есть директива для этого, в разных - разные, в моем случае это DS.
COUNTER DS 1 ; здесь комментарий - это счетчик входных импульсов
Означает, что надо в памяти зарезервировать один байт под счетчик. Для выделения двухбайтного слова используется DW.
Если надо, чтобы этот счетчик работал быстрее и код получался короче, можно отвести под него регистр. В С это будет уточняющее описание:
register int counter;
В асме в этом случае ничего не надо писать, потому что регистры под рукой в любой момент, просто инициализируем и юзаем:
MOV R1, #0
INC R1
Но не забываем, что если мы потрогаем этот регистр в другом месте программы, то его значение испортится. И тогда потребуются часы мучительной отладки, чтобы найти наш косяк, начнутся подозрения, что нам продали битый чип, подозрения на сырой компилятор, на программатор, на провода интерфейса.... Вот ради этого и придумали языки высокого уровня. Они не дадут своевольничать когда угодно, а сразу скажут, что в этом месте переменная не определена и т.п.
Что касается светодиодика. Собственно, это будет всего одна или две команды. Другое дело, что придется разбираться, какие возможности имеют порты вывода и как они сконфигурированы после сброса. Возможно, что уже как надо, а возможно, что надо найти, как они управляются и включить выходные усилители в нужный режим, а для этого найти в описании порта регистр специальной функции (SFR), в котором задается режим порта и вписать туда нужную настройку. Тогда понадобится три команды 😀 .
_________________ И мню аз яко то имать быть, что сам себе всяк может учить.
Eduard Пост: #289017 От 12.Feb.2011 (11:57)
Программисту остается сделать всего одно дело: назначить переменной тип. Например:
...........
Но не забываем, что если мы потрогаем этот регистр в другом месте программы, то его значение испортится. И тогда потребуются часы мучительной отладки, чтобы найти наш косяк, ....
И главное- что в этом случае студия нам преобразует хекс файл
в ассемблерный вид- и будешь читать ассеблерную программу.
И зачем тогда всякие Сики и Васики?
Они нужны, но для другого уровня.
МК часто выполняет чисто аппаратные задачи, типа фазоимпульсного
управления, заменяя десяток микросхем одной букашкой.
Это реализуется на чистом асме.
А вот если ты захочешь чтобы та букашка слушалась твоего голоса,-
прибавить, убавить, стоять, лежать, фас... вот тут уже куча прог
написанных на языках высокого уровня.
МК часто выполняет чисто аппаратные задачи, типа фазоимпульсного
управления, заменяя десяток микросхем одной букашкой.
Ну вообще лутше использовать XILING. Нарисовал схемку, из логики прошил в микруху, и пользуйся. Да и частоты можно гнать 250-300 мгц. Да и стоят не дорого. И халява есть по проге. Мне нравились такие штуки.
_________________ “Я есмь и путь, и истина, и жизнь. Никто не приходит к Отцу иначе, кроме как через Я”
tera Пост: #289028 От 12.Feb.2011 (13:16)
или условие.
Это достаточно стандартная задача.
Допустим надо увеличивать мощность в нагрузке с постоянной скоростью.
Напряжение питания может изменятся , сопротивление нагрузки тоже
меняется от прогрева. Нужно в этих условиях спрогнозировать угол
открытия тирристора в следующий полупериод сетевого напряжения.
Примерно так же выглядит задача определения угла зажигания в ДВС.
То есть задача типичная.
Состоит из измерения временных отрезков, аналоговых величин, и задачки
прогнозирования по предыдущим значениям.
Прогноз делается по законам геометрии - гладкая кривая через три точки всегда однозначно определяет четвертую.
Прогноз делается по законам геометрии - гладкая кривая через три точки всегда однозначно определяет четвертую.
А можно так. Каждую точку по двум параметрам легко определить. На входе ПЗУ формируем адрес из трех точек и получаем нужную цифру на выходе. Сколько нужно градаций ? Или погрешность. Или закон, алгоритм. Но легче ПЗУ загнать просчитанный параметр.
_________________ “Я есмь и путь, и истина, и жизнь. Никто не приходит к Отцу иначе, кроме как через Я”
Есть такой вариант- в простеньких ЭБУ для впрысковых движков - зашивают таблицу
исходя из замеров на стендовом движке.
Но в реалии все движки разные, со временем изнашиваются, и народ все время
задается вопросом- а почему я плачу больше за инжектор, а экономии по сравнению
с карбом никакой. Это именно от таблиц.
Например для мощного движка подключенного к розетке.
Надо его плавно раскрутить. Понятно что напряжение будет просаживаться,
его можно учесть в таблице, а если еще сосед включил в это время калорифер?
Это как учесть?
Проще мерять и рассчитывать. Это конечно с современными мкашками.
Диду, а если в студио пользоваться только ограниченными командами под пикушки, то потом асемблер на пик пойдёт?
Eduard | Post: 289017 - Date: 12.02.11
В асме в этом случае ничего не надо писать, потому что регистры под рукой в любой момент, просто инициализируем и юзаем:
MOV R1, #0
INC R1
Но не забываем, что если мы потрогаем этот регистр в другом месте программы, то его значение испортится.
Чёт не догоняю 😨. Данные у меня в пикушке на 8 бит, значит R1 будет 8 бит как байт ориентированая команда, а откуда тогда это эр берётся? Или это переменная какая? Вот у меня под носом "карта памяти данных микроконтроллера PIC16F876", в ней память почему-то обозвана регистрами. Вот к примеру есть FSR 04h? TMR2 11h, как они записываются и что значит их шестнадцатеричное число. Вызов памяти происходит по названию или по адресу? Так ещё же дофига адресов без имён, че с ними делать?
Теперь конкретно на примерах, напишу от балды пример, тыкните где я мудак.
Programma; aein, zvein, drein - elocchka gori!!!
MOV PORT B, 00000000; записываем в порт Б нули
MOV PORT B, 00000001; записываем в порт Б еденицу
Так будет работать 😀 ?
_________________ Не хватит никакого здоровья, чтобы приспособиться к этому глубоко больному обществу(Кришна Мурти)/Горшки не Боги обжигают (многовековая классика)
Так! Врде понял. Значит память с буковками вообще трогать нельзя, можно только считывать. А регистры общего назначения можно по прямой адресации записывать и перезаписывать? И ещё. Есть там несколько типов памяти ФЛАШ - 8к и ЕПРОМ - 256байт. У флаш памяти 1000 циклов перезаписи, а у епром 100000. Вот меня мучает вопрос, значит на ФЛАШ память записываются константы и программа, а епром для временных данных? И не понимают что значит 100000. Если буду использовать один бит для постоянной перезаписи в цикле на большой частоте то она у меня в конечном счёте собьётся? 😘
_________________ Не хватит никакого здоровья, чтобы приспособиться к этому глубоко больному обществу(Кришна Мурти)/Горшки не Боги обжигают (многовековая классика)
Обязательно собьется.
Поэтому обычно такую память используют редко- например в телике
для записи канала и громкости при выключении. Чтоб при включении попал опять туда и не очень тихо было..
bazarov Пост: #289056 От 12.Feb.2011 (16:24)
Programma; aein, zvein, drein - elocchka gori!!!
MOV PORT B, 00000000; записываем в порт Б нули
MOV PORT B, 00000001; записываем в порт Б еденицу
Так будет работать 😀 ?
Не всегда.
В атмелях в те регистры- порты которые на выход наружу- команда OUT
И переносится из внутреннего регистра общего назначения.
Для тебя как железячника долно быть понятно что это просто разные
цепи на запись в те и другие регистры.
Поэтому для проца- это просто единичка в команде в другом месте.
Поэтому правильно будет
LDI R16,00000000 ; ЗАПИСЫВАЕМ СНАЧАЛА ЧИСЛО В РЕГИСТР
OUT PORT B, R16
INC R16 ; УВЕЛИЧИВАЕМ НА ЕДИНИЧКУ
OUT PORT B, R16
Разрядность регистров и памяти - смотри в доке для своего проца. Также бывают команды, работающие с одним байтом, бывает с двумя сразу, бывают и с цепочками байтов.
Регистры специальных функций - это такие регистры, запись в которые приводит к изменениям в работе начинки проца. Это указатель стека, таймеры, режимы работы портов, регистр разрешения прерываний и т.п. Поэтому при их использовании надо четко представлять, на что они влияют. Разумеется, их нельзя использовать для хранения пользовательских данных. Для нужд программиста есть регистры общего назначения, в них можно хранить свои числа и менять их как угодно.
Организация внутренней памяти может быть разная. Как это выглядит с точки зрения процессора (и программиста), зависит от реализации конкретного чипа. Часть памяти может быть обозвана регистрами, но если набор инструкций для работы с ними тот же, что и для памяти, то разницы нет никакой. А если есть команды для работы с регистрами, и отдельно команды для работы с памятью, то тогда появляется разница в использовании. Выражается это в длине кода и времени отработки команды. Если в ПИКе команды универсальные, то и заморачиваться не о чем.
> Так ещё же дофига адресов без имён, че с ними делать?
Присваивать им свои имена и хранить там свои данные.
> MOV PORT B, 00000000; записываем в порт Б нули
> MOV PORT B, 00000001; записываем в порт Б еденицу
Если есть осциллограф, то лучше начинать именно с этой программы. И в конце должна быть команда перехода в начало, иначе программа пройдет выполняться дальше, и если там "мусор", то начнет выполняться "мусор" 😀 .
Флэш для хранения твоего кода программы. 1000 циклов - это "ВО". Максимум у меня для отладки нужно раз 10-15 переставить чип из девайса в программатор и обратно. Если больше, то значит уже обленился вконец и пишешь программу методом тыка - "вот так еще не попробовал, может заработает". 😈 Вспомним, когда-то надо было стирать ПЗУ-шку под ультрафиолетом 15 минут, и всего 50 или 100 циклов обещали - не сильно-то поотлаживаешь. А сидели и писали, тщательно анализировали, и прошивали - как праздник урожая.
ЕЕпром да, действительно, 100 тыс. циклов, - и амба, дырку протер. Поэтому нужно использовать очень экономно. Хранить там настройки пользователя. Или запоминать состояние на момент аварийного отрубания питания.
PS. Ага, понял, что тебя смущает. У некоторых регистров есть имена, а у некоторых нету. Но сам процессор не знает никаких имен, знает только числовые адреса. Имена знает ассемблер. Значит, у ассемблера есть таблица соответствия имен и их адресов. У меня такая таблица подгружается в виде файла, для каждого процессора своя.
_________________ И мню аз яко то имать быть, что сам себе всяк может учить.
😕 У меня такое очучение что в детский садик мне пора 😕 .....
dedivan | Post: 289068 - Date: 12.02.11
Поэтому правильно будет
LDI R16,00000000 ; ЗАПИСЫВАЕМ СНАЧАЛА ЧИСЛО В РЕГИСТР
OUT PORT B, R16
INC R16 ; УВЕЛИЧИВАЕМ НА ЕДИНИЧКУ
OUT PORT B, R16
Таааакс... Значит LDI в АТмал озночает что и MOVWF, xxh; только не понял что такое R16? И разве бывают регистры с адресом оооооооо? Вот я вижу в архитектуре только свободный внутренний регистр W. Если с регистра W поместить данные в АЛУ, то появится возможность временно пользоваться другими данными, потом прибавляем к биту в АЛУ нуль и в регистре W появится наше первоначальное число, так? Ещё получается что бит инфы напрямую можно пересылать на порт из ОЗУ регистра W, регистров общего назначения и памяти? 😘???
Eduard | Post: 289069 - Date: 12.02.11
Если есть осциллограф, то лучше начинать именно с этой программы. И в конце должна быть команда перехода в начало, иначе программа пройдет выполняться дальше, и если там "мусор", то начнет выполняться "мусор" .
Такс. Значит сделав два временных банка памяти "регистры в ЕПРОМ" можно сделать космическую надёжность хранения данных памяти?
Зырим.
В памяти программы было несколько переменных записаных в память как:
MOVWF, x1h, ххх; Значение №1
MOVWF, x2h, ххх; Значение №2
MOVWF, x3h, ххх; Значение №3
; второй банк памяти настроек пользователя
MOVWF, 11h, ххх; Значение №1
MOVWF, 12h, ххх; Значение №2
MOVWF, 13h, ххх; Значение №3
И ещё один регистр состояния записи ещё одного резервного хранилища:
MOVWF, ааh; Значение очерёдности записи; здесь просто записывается нуль или еденица
Тогда следующие данные будут записываться по условию:
if ааh>1 to load (x1h,x2h,x3h,); первое условие записи или чтения временных настроек пользователя
else load (11h,12h,13h,); условие чтения второго банка памяти
Тогда при каждой записи будет проверяться условие:
if ааh>1 to save
MOVWF, 11h, ххх; Значение №1
MOVWF, 12h, ххх; Значение №2
MOVWF, 13h, ххх; Значение №3
else save
MOVWF, x1h, ххх; Значение №1
MOVWF, x2h, ххх; Значение №2
MOVWF, x3h, ххх; Значение №3
if ааh>1 to save
MOVWF, aah, ххх; Значение выбора памяти (нуль или еденица)
else MOVWF, aah, ххх; Значение выбора памяти (нуль или еденица) антипод
goto-ва 😊
Если ещё придумать чтобы значения адресов с каждым циклом записи увеличивались на еденицу и пустить по кругу всей памяти, то препрограммирования ЕЕМПРОМ на полёт на Марс хватит 😬.
Хде я ошибок понаделал 😀 ?
_________________ Не хватит никакого здоровья, чтобы приспособиться к этому глубоко больному обществу(Кришна Мурти)/Горшки не Боги обжигают (многовековая классика)
Оставь ЕЕпром в покое, он тебе еще сто лет не понадобится. Тебе сейчас надо составить простейшую программу, которая хоть что-то делает. Потом научиться ее компилировать без ошибок. Потом результат заливать в процессор. Подавать питание, сброс, и смотреть, как она работает. Или не работает.
Насчет ЕЕпром. Вот я делал регулятор для паяльника. При выключении питания он запоминает текущую мощность и записывает в флэш типа X24C01. В первом экземпляре я сделал запись всегда в одну и ту же ячейку. Когда она протрется, я вытащу процессор и перекомпилирую программу на вторую ячейку 😀 . Во второй версии я захотел, чтобы запомненные данные записывались всегда на новое место, чтобы сэкономить флэшку. Но ведь это "новое место" тоже надо где-то запоминать каждый раз, значит, оно протрется так же быстро, и эта смена адреса не даст увеличения продолжительности жизни ЕЕпрома. Тогда я сделал так: при включении процессор считывает всю флэш память и складывает. Получаемая сумма указывает на место, где лежат последние данные. Самое интересное, это как сделать так, чтобы при выключении записать такие данные в текущий блок, чтобы при очередном сложении всей памяти получился указатель на следующий блок. Я это сделал 😕
_________________ И мню аз яко то имать быть, что сам себе всяк может учить.
Самое интересное, это как сделать так, чтобы при выключении записать такие данные в текущий блок, чтобы при очередном сложении всей памяти получился указатель на следующий блок. Я это сделал
Лехко 😝. Сам процессор запитать от 1000 мк через диод по питанию, а на вход визор напруги поставить. тогда при пропадании питания за пару миллисекунд данные о состоянии запишутся 😝
Меня тут торкнуло ещё одно. По своей деятельности вижу как процы в аппаратах глючат, и нехило. Встроенная батарея не всегда заряжается "бережливыми" работниками, поэтому мигания в сети иногда вызывают свбои, хоть это и редко бывает, но есть. Мысль проста. При работе контроллера должна быть лапка с определённой частотой, затем частота будет идти на фильтр-мост, на котором будет стоять визор по сбросу питания контроллера при неправильной работе. Не уверен я что внутри контроллера есть опорный тактовый генератор 😀 .
_________________ Не хватит никакого здоровья, чтобы приспособиться к этому глубоко больному обществу(Кришна Мурти)/Горшки не Боги обжигают (многовековая классика)
Базарыч, велосипед изобретаешь. Все это уже есть в котроллерах.
Не древних конечно.
И отдельный генератор с отдельным счетчиком, с отдельным сбросом,
если программа работает правильно- то в ней всегда есть участок , который сбрасывает этот счетчик, а если зависла, то счетчик сбрасывает контроллер.
Самое интересное, это как сделать так, чтобы при выключении записать такие данные в текущий блок, чтобы при очередном сложении всей памяти получился указатель на следующий блок. Я это сделал
Лехко 😝. Сам процессор запитать от 1000 мк через диод по питанию, а на вход визор напруги поставить. тогда при пропадании питания за пару миллисекунд данные о состоянии запишутся 😝
Базаров, ты как всегда, невнимательно читаешь, а я слов на ветер не бросаю. Пропадает желание объяснять тебе что-либо.
Схемотехнически - понятно, кондер. Идея - писать флэшку экономно, каждый раз по новому адресу. Ты мне расскажи, ГДЕ ты будешь хранить этот самый адрес? В той же самой флэшке? И пепрезаписывать его КАЖДЫЙ РАЗ? Тогда хранилища этого адреса тоже хватит всего на 100 тыс. циклов. Вот и думай.
_________________ И мню аз яко то имать быть, что сам себе всяк может учить.
Eduard Пост: #289264 От 14.Feb.2011 (01:53)
ГДЕ ты будешь хранить этот самый адрес? В той же самой флэшке?
Эд, смотри какую штуку буржуи делают на твоем любимом 52 ядре.
Обрати внимание - в роме загрузчик и юсб драйвер, а код загружают
в рэм. грузи сколько хочешь, не забудь только батарейку на 10 лет поставить.
И купить можно по смешной цене на плате со всеми причандалами и еще парой проциков впридачу как отладочный комплект.
Глупости импортные. Вспоминаем как многофазные трансформаторы работают, там встречные фазы не мешают друг дружке.
_________________ Не хватит никакого здоровья, чтобы приспособиться к этому глубоко больному обществу(Кришна Мурти)/Горшки не Боги обжигают (многовековая классика)