Однопользовательские HASP ключи и rdp

Случилась как то ситуация, что не хватило мне ресурсов моей локальной машины и решил я поставить 1с на свой небольшой сервер и поработать через rdp (на сервере моем монитора нет, так, что вариантов небыло тоже). Сказано - сделано, поставил на сервер платформу, закинул конфигурацию, поставил локальный usb hasp 1с и попробовал запустить 1ску через rdp, но как оказалось, не тут то было. 1Ска ни в какую ни находила ключа, хотя и драйвер стоял как надо и ключ светился и все вроде хорошо, а платформа не запускается. Начал рыть форумы и нашел, что как только платформа (видимо) видит rdp, то блокирует доступ к ключу. При этом народ уже пытался решить эту проблему путем проброса порта, но к сожалению ничего не получилось, менеджер лицензий соответственно тоже ключ не видит и по сети доступ соответственно не предоставляет. Немного подумав, решил попробовать обдурить  эту железяку и запустил Team viewer. Из-под него ключ чудесно увиделся и 1с спокойно запустилась. При этом если после запуска закрыть Team viewer и подключиться по rdp, то 1с не выключается и продолжает нормально работать. Аналогично будет работать и через ammy admin и аналогичные программы. Спустя некоторое время, я купил-таки себе сетевой ключ, жить стало проще, но обнаружилась еще одна интересная вещь, при запуске rdp выдается ошибка (-10) hasp not found, хотя при всем этом ключ работает и к серверу подключения проходят. Вот такая интересная ситуация.

Регистрация на электронных торговых площадках etp-ets.ru

Необходимо было зарегистрироваться на нескольких этп (пройти аккредитацию). Для одной из площадок оказалось аккредитация уже есть, так, что необходимо только перерегистрировать сертификат. Порядок перерегистрации сертификата для "Национальной электронной торговой площадки" (эцп должна быть обязательно квалифицированная. С июлю 2018 года неквалифицированные эцп (НЭП) площадки принимать перестали. Для сертификатов выпущенных в АО СКБ Контур можно определить является сертификат квалифицированным или нет следующим образом. Необходимо войти в сертификат и на вкладке "Общие" посмотреть кем выдан данный сертификат. Если сертификат выдан UC SKB Kontur, то сертификат неквалифицированный, если выдан АО ПФ СКБ Контур, то квалифицированный.
Вернемся к регистрации сертификата на площадке. Для получения аккредитации  на данной площадке необходимо войти в меню "Участникам" и выбрать пункт "Аккредитация", для перерегистрации сертификата необходимо выбрать пункт "Регистрация доверенности". Далее необходимо заполнить данные об организации, выбрать логин, пароль, указать почту, далее нажать кнопку подписать и отправить. На следующем окне необходимо заполнить недостающие данные об организации и прикрепить доверенность (в случае если сотрудник организации не является ее руководителем) или приказ о назначении или другой документ подтверждающий полномочия руководителя. Далее так же необходимо нажать кнопку подписать и отправить. На почту приходит письмо со ссылкой для подтверждения почты. Подтверждаем и вуаля... регистрация завершена.
PS Если на данной площадке необходимо работать в разных секциях, то регистрацию или иные действия для каждой секции проводить не надо. Достаточно зарегистрировать сертификат единажды.

Linux для бухгалтера

  Просидев на Linux Ubuntu 16.04 в течении примерно полугода, можно уже сделать кое-какие  выводы. После того, как вылезла очередная проблема, переполнившая чашу моего терпения, я  сделал для себя выводы и снёс её нафиг :), так как считаю, что на данный момент времени использовать её для более или менее серьёзной работы нельзя. Теперь по подробнее, что же всё таки произошло и почему я принял такое решение.
  Как я писал в предыдущих постах я установил себе postgresql server, благополучно поставил на него базу и работал, но вот пришёл новый 2018й год, в очередной раз наша дрожайшая фирма 1С напугала нас тем, что собирается прекратить поддержку старых редакций зарплаты (2.5) и бухгалтерии (2.0) (надо сказать, что я уже и в прошлом году собирался перевести на 3ю редакцию свою бухгалтерию, но все как то руки не доходили), таки решил переводить... Как говориться, чтобы переводить на новую редакцию надо соответственно обновиться. Обновляя ранее редакцию 3 (одной из своих подопечных организаций) на Linux с более слабым процессором она обновлялась примерно так же как и из под Windows, может быть даже чуть быстрее, но не значительно. Все обновление занимало около часа. (Да у меня не слишком модный компьютер, но даже на ноуте hp с core i3 3го поколения и 8 ГБ оперативной памяти время обновления было так же около часа, что как я считаю очень много.) В тот раз я производил обновление базы работающей в файловом режиме, в этот раз мне предстояло обновить вторую редакцию в sql серверном варианте установки, что собственно предвещало хороший и быстрый исход мероприятия, но к сожалению во время установки всё повисло, при чем не только sql сервер, но и вся Ubuntu, при чём до такого состояния, что мышка шевелиться не хотела. Презагрузка не помогла и при второй попытке обновления всё ровно так же повисло, в итоге после нескольких таких перезагрузок база на sql сервере упала. Ок, создал новую, попытался загрузиться с копии, все опять наглухо повисло, в итоге пришлось обновляться на винде... О переходе на 3ю редакцию под Linux пришлось забыть и сделать это так же под Windows. Что касается обновления 1с вообще как таковой под Linux всегда приходится сталкиваться с рядом проблем, так как обновления на сайте  1c.users.v8.ru присутствуют в виде самораспаковывающихся rar архивов с расширением *.exe, то распаковывать их надо опять же под виндой, далее мы получаем установочный файл setup.exe опять же предназначенный для работы в винде, тоесть весь этот процесс нужно все равно выполнить на виндовой машине, а уж потом готовые шаблоны закинуть на linux  и потом обновлять или вообще обновлять с виндовой машины (если используется серверный вариант как у меня). Это крайне не удобно, либо ставить какой-нибудь wine или другую виртуалку, чего не хотелось бы и опять же лишний напряг, да и в этом случае вы не избавляетесь от процесса лицензирования винды, что в общем-то и было целью. В предыдущих постах я уже писал о проблемах с компонентой PDF417, которая под Linux отсутствует, так, что печатать с двумерным штрих кодом тоже не получится.
  Далее пожалуй самая не приятная проблема - это отсутствие сертификации для Крипто Про под Linux, в связи с чем нет возможности передавать отчетность подписывая её сертификатом предназначенным для работы с Крипто Про (про дружбу Linux и  VipNet ничего не читал, так как уже давно работаю с КриптоПро и слезать с неё не собираюсь). Кроме того становиться не возможным работать с любыми сертификатами, в том числе и для работы на пример на портале gosuslugi.ru, а для бухгалтера это так же необходимо, так как на пример фонд социального страхования просит отправлять подтверждение кода вида основной деятельности через портал ФСС, а авторизация на портале происходит по сертификату, через портал госуслуг - опять фэйл... Довольно часто опять же приходится работать на порталах типа rts, sberbank ast и др, на которых опять необходим сертификат, что тоже становится не возможным. Кроме ведения бух учета я так же занимаюсь и выпуском этих самых сертификатов, что опять же становится не возможным. И снова о сертификатах, сейчас во всю стали выдавать электронные больничные, для работы с которыми так же нужен Крипто-Про и сертификат, либо для авторизации через госуслуги (где к стати нужен еще и дополнительно плагин, которого я так же не видел для Linux), либо для работы с армом, где так же необходимо использовать сертификаты.
  При работе с 1с в файловом варианте проблем не возникало, но при этом есть проблема для совместного доступа к одной базе и в случае когда база стоит на win машине и когда на Linux, что тоже удручает. Так же возникает проблема при установке драйвера ключа hasp, так как все драйвера типа x86, а под 64 битной системой (во всяком случае у меня) возникли значительные проблемы при установке библиотек поддержки x86, в связи с чем пришлось использовать 32х битную версию, что тоже не порадовало. Кроме того с моим принтером kyocera 1025 расшаренным по сети, Ubuntu так и не подружилась, принтер видится по сети, через самбу подключается, но почему-то когда отправляешь на печать, то завешивает все задания принтера, даже те, которые я посылал потом с виндовой машины (к которой он к стати подключен). Решил ладно, подключу отдельный принтер, тем более, что без дела стоял Canon LBP1120, который под х64 не работает, тем более, что Ubuntu у меня 32х разрядная, все должно было бы сложиться просто отлично. К слову сказать принтер-то я установил и он даже отлично печатал, но стандартный драйвер от производителя почему-то не подходит, а установка производится с какими-то танцами с бубном, но правда потом работает без проблем.
  Сама по себе Ubuntu мне понравилась как система, стала без проблем, на борту имеет практически все программы необходимые для работы в офисе, особенно понравился Libre office, который я себе к стати хочу поставить под винду, работает он значительно лучше и быстрее, чем open office, есть thunderbird уже сразу после установки, есть лисичка :) и даже питон, на котором я немного пытаюсь программировать, нормально заработал team viewer, есть отличная программка для работы с rdp, с помощью которой отлично подключался к win серверу, не порадовало правда отсутствие ammy admin или аналогов, но очень порадовала работа с образами в отличии от винды.
  Подводя итоги хочу сказать, что по моему мнению Ubuntu - отличная система для дома, программирования, офиса, но плохо подходит для бухгалтера и работы на торговых площадках.

Linux для бухгалтера (установка postgresql 1с linux)

Вот уже несколько месяцев сижу на linux ubuntu 16.04, все вроде бы ничего, но проблема о которой писал в предыдущем посте, а именно подключение из 1С под Linux к базе находящейся на Windows10 осталась не решенной. Права при этом все были даны, создавать и редактировать файлы в каталоге БД возможность есть, а вот базу видеть 1С не хочет. В связи с этим была у меня мысль поставить базу 1С на Linux машину, но не просто в файловом варианте, что не интересно, да и в этом случае проблемы с правами остаются, а поставить ее на PostgreSql сервер. Начал пробовать. В Ubuntu, в менеджере приложений уже есть возможность поставить pgAdminIII, поставил. Запускается, но база не создается. Проверял работает ли сервер, на каком порту и т. д., излазил все конфиги. То одна ошибка выскакивает, то другая. В общем промучился с ним почти неделю, безрезультатно. Во всех статьях предлагают ставить PostgreSql из репозиториев и я решил, что видимо у меня битый дистрибутив и надо поставить из репозитория, и точно, после удаления существующей версии и установки из репозитория база создалась, но 1С не захотела создавать свою базу на сервере, выдав вот такую ошибку:

Ошибка СУБД:
42704: ERROR type "mvarchar" not exist
Line1 create table Config(FileName...
Говорит, что тип данных "mvarchar" отсутствует
Немного погуглив нашел, что оказыватеся не любой PostgreSql подойдет для работы с 1С, которая сделала для него дополнения и патчи. В общем скачивать и устанавливать надо только тот PostgreSql который выложен на сайте Users.v8.1c.ru
по всей видимости другой работать не будет. Надо сказать, что после установки с сайта 1с, PostgreSql завелся, на него ругнулся PgAdmin, что то по поводу версий и он благополучно загрузился, после чего так же успешно создалась база.

Так, что в целом не без проблем, но на Linux вполне можно поднять PosgreSql сервер, завести на нем базу 1С и стать полноправным заводчиком клиент-серверного варианта 1с под Linux.

Linux для бухгалтера. (установка 1с на Linux)

По роду деятельности я занимаюсь бухгалтерским учетом и конечно же 1С, ну куда же без нее. Так вот решил я вместо проприентарной дорогущей windows10 поставить себе Linux Ubuntu 16.04.3. Поставил первоначально версию 64 бит и намучился с ней порядочно. Постоянно выскакивала какая то ошибка, ну да бог с ней. При установке 1С возникли первые грабли, не хотели ставиться дрова на hasp, так как они были 32х разрядные - (все пакеты с индексом i386). Прочитал кучу статей, где рассказывается как установить поддержку 32бит пакетов, но толи свисток без дырки, толи акула глухая, все методы не сработали, кроме того команда sudo apt-get -f install всегда почему-то заканчивалась аварийно. По идее эта команда запускает менеджер пакетов apt с ключем -f должны установиться из репозиториев все пакеты которые присутствуют в неразрешенных зависимостях установленных пакетов (программ), но не тут то было.
В общем пакеты поддержки 32битных приложений у меня не стали. Повозившись дня три, бросил и решил поставить 32битную версию ubuntu. Скачав ее, записал образ на флешку из установленной ubuntu 64бит, к слову сказать работать с образами в Linux сильно проще, чем в Win системах, при этом не надо ставить каких либо дополнительных программ. Стала система без проблем, следом начал устанавливать на нее 1С8, благо на 32битную версию она залетела сразу и очень быстро. В общем проблем с установкой не возникло, другие 32 битные приложения тоже стали отлично, проблемы начались дальше. Множество баз 1С у меня стоит на Win10 машине. Подключить общие папки не составило труда и даже не было проблем с записью в них, то есть файлы спокойно можно было редактировать прямо в этих папках, но 1С ни в какую не хотела запускать из такой папки базу, выдавая ошибку, что файл 1cv8.1CD не обнаружен. При этом, когда копируешь из этой папки базу на локальную машину, все запускается отлично... Ладно, пока бросил эту проблему, начал делать квартальный отчет на 1С, но тут тоже откуда ни возьмись появились еще одни грабли. Вывести печатную форму отчета на экран в Linux не представляется возможным, так как программа ругается на отсутствие некой компоненты для вывода печатных форм. Погуглив, я нашел эту компоненту, но к сожалению она есть только под windows, так, что про то, чтобы посмотреть форму на экране можно тоже забыть. Компонента эта называется PDF417 и предназначена для печати двумерного штрих кода, и ее действительно нет для систем отличных от windows. Это подтвердил и ГНИВЦ. Вот в этой статье https://vk.com/topic-33847957_35671420 автор тоже сетует на ту же проблему и даже жалуется на ГНИВЦ в Минкомсвязи, я бы тоже присоединился к нему двумя руками. (не зарегистрирован в контакте, ответить ему не могу). Так, что вывести на экран отчет с двумерным штрих-кодом нельзя, но можно в настройках отчета разрешить печатать отчет без двумерного штрих-кода, так, что это от части решает проблему. Отчет благо выгружается на диск нормально, но потом его еще необходимо передать в налоговую, через спецоператора, которым в моем случае является скб Контур. Для работы с ключами необходимо наличие программы Крипто-Про, ну несколько других помельче. Опять же погуглив выяснил, что Крипто-Про вполне ставится на Linux системы, что я в принципе и сделал (у Контура есть сайт проверки системы и установки программ i.kontur.ru, он конечно же с Linux ом работать отказался), но потом при попытке зайти на сайт система заявила, что мол с вашей осью не работаем, зайти по сертификату нельзя, можно только по паролю. Ну благо и такой способ для меня был доступен, так как пароль у меня тоже есть и я вошел, но загружать и подписывать отчет система отказалась, вскричав, что у вас Linux и работать не буду. После продолжительного общения со службой тех поддержки выяснилось, что действительно в ОС Linux вся эта кухня работать не будет и пока в планах портировать под Linux все это нет, по одной простой причине: Крипто-Про хоть и работает под Linux, но не имеет сертификации ФСБ для работы в этой системе, таким образом на данный момент и в ближайшем обозримом будущем передавать отчеты под Linux не представляется возможным, что несомненно довольно печально.

Чего стоят китайские контроллеры?

  Говорят китайская хитрость сродни китайской же мудрости. Покупая в китае (чаще всего на Alixpress) практически все что угодно, будьте готовы к самым разнообразным сюрпризам. Мало того, что вещь может прийти неисправной, она (неисправность) может быть вполне себе не явной. Покупал я как то на указанном сайте много различных конроллеров AVR, STM так сказать про запас, цена благо была вполне привлекательной. Теперь же дошел ход до использования накопленного. Так из партии купленных там ATMEGA 128 несколько штук просто не запустились, одна проработала какое то время (около месяца), затем хаотично стало срабатывать внешнее прерывание, сначала редко, потом чаще и в конце оно срабатывала постояно. Все это произшло в течении примерно пары часов. Остальные не проверял, видимо тоже на выброс.
  Потом решил использовать купленные как то там же (правда в другом магазине) ATTINY 2313 (в DIP корпусе), хотел сделать дешифратор для пульта ДУ, но выяснилось, что внутренний RC генератор работает вместо положенных 8Мгц ВНИМАНИЕ!! на 16Мгц. Интервалы соответственно сокращены все ровно в два раза. Да..., что же тут скажешь, это Китай детка!
  Что же, как говорит китайская народная мудрость: если ты споткнулся идя по дороге, это еще не значит, что ты идешь не вту сторону. Продолжаем работу в этом направлении. С дешифратором я таки разобрался, поставив кварц на 10 Мгц, тайминги стали на свои места. Дальше на той же макетной плате решил попробовать собрать схему с использованием таймера и сгенерить для ИК приемника сигнал с частотой 38 Кгц, не сложная казалось бы задача, тем более, что в CodeVision уже имеется такая функция, при создании проекта можно указать какую частоту надо сгенерить и стартовый помощник сам установит в регистр сравнения нужное значение. Так вот как сказал Шарик из известного мультика Трое из Простоквашино Фиг Вам... Генератор Code Vision значение в регистры ставит правильное, проверил три раза, а вот контроллер вместо 38 Кгц, упорно генерил 19 ??? Такое ощущение, что таймер тактировался частотой в два раза ниже чем надо. Это точно Китай!!!  При всем этом великолепии проверил еще один момент. Fuse Bit  CK DIV8, который отвечает за то, чтобы делить частоту тактового генератора на 8 не работал вовсе. Ну то есть его можно было запрограммировать и контроллер даже принимал это, но эффекта не было совершенно ни какого. В серийные изделия ставить такую китайчатину совершенно нельзя, вообще не известно какой фортель она выкинет. Я покупал там еще и другие контроллеры, по мере использования которых напишу и о их поведении.

Виновник торжества.

Робот пылесос

Меня всегда интересовали роботы пылесосы и вот теперь захотелось сделать свой вариант. Почитав про то как это делали другие:
https://geektimes.ru/post/244209/
https://habrahabr.ru/post/257867/
http://informatik-m.ru/mir_robototehniki/samodelnyj-robot-pylesos-na-arduino.html
http://arduino.ru/forum/proekty/samodelnyi-robot-pylesos
http://robocraft.ru/blog/3357.html
Мне показалось, что это больше похоже на маленькие машинки (хоть и роботизированные), потому, что на мой взгляд в них очень мало внимания уделяется именно турбине и мощность всасывания в них совершенно маленькая. Как мне кажется просто машинка катающаяся по полу, довольно бесполезная вещь, даже если она умеет собирать конфети с ламината, совершенно не факт, что она соберет какую то пыль с ковра или что то более тяжелое чем конфети с того же ламината (в чем я убедился делая свой вариант, но об этом позже). Именно по этому, я начал разработку с турбины.[Spoiler (click to open)]
Во всех вышеуказанных источниках турбину делали либо с кулера от компьютера (мощности никакой), либо самостоятельно клеили из бумаги или паяли из жести и текстолита, во всех случах (кроме первого) всегда возникнут проблемы с балансом, по этому будет очень сложно раскрутить ее достаточно быстро. По этой причине (да и по тому, что мне так проще), я решил напечатать ее на 3d принтере, что избавляет сразу от многих проблем. Модель делал в бесплатной программе Autodesk123d design. После нескольких итераций получилось это:

Первоначально все делалось под двигатель от принтера.
Двигатель довольно большой, шестерня на валу не снималась, по этому я ее оставил и сделал отверстие в крыльчатке под нее. Кроме того он (двигатель) довольно низкооборотистый не более 3000-4000 об/мин, по этому я немного его разогнал, подав на него повышенное напряжение от преобразователя, при этом ток потребления от источника питания составлял чуть менее двух ампер при напряжении около 8-9 вольт. Мощности всасывания с этим двигателем было явно не достаточно, он мог поднять опилки, стружку, паралон, мелкую бумагу, но не более. Кусочек толстого провода в изоляции ему уже был не по зубам. При этом наблюдался один интересный эффект: когда рукой закрываешь всасывающее отверстие, не чувствовалось какой то силы притягивающей руку и ток потребления мотора резко падал!!! (не повышался, а падал) и сила выходного потока так же резко падала. Я подумал, что это из-за того, что крыльчатка начинает гонять воздух внутри корпуса турбины. Порывшись в каталоге  АлиЭкспресс нашел двигатель на 20 000 об/мин.
https://ru.aliexpress.com/item/2016-New-DC3-12V-Large-Torque-Motor-Super-model-with-High-Speed-Motor-New-Arrival-Rated/32691454070.html?spm=2114.13010608.0.0.ofRCqA
Размером он несколько меньше, но сильно оборотистее и прожорливее. В рабочем режиме он потреблял примерно 6,5А от 12 вольтовой батареи, что довольно много!!! Зато сила всасывания увеличилась в разы и уже большие разъемы просто запрыгивали в мусоросборник. При этом эффект описанный выше пропал. В модели отверстия для крепления двигателя остались старые, так, что двигатель я не мудрствуя лукаво посадил на термоклей, а чтобы не переделывать крыльчатку сделал переходку из пробки между валом двигателя и крыльчаткой и закрепил суперклеем. (Потом надеюсь переделать. :)
В итоге получилась вот такая турбина:
По результатам, думается, что можно уменьшить входное отверстие для увеличения силы всасывания. Все файлы проекта ниже, а так же можно посмотреть видео работы турбины.
Файлы проекта: https://www.dropbox.com/s/c344xguiu4237wy/Turbina_80mm.zip?dl=0
Видео: https://www.youtube.com/watch?v=08IiZoh_qlw
http://arduino.ru/forum/proekty/samodelnyi-robot-pylesos

Лампа настроения

Доделал свою лампу настроения. Распечатал вазу на 3d принтере, модель взял из интернета, шибко понравилась :), модельку для свечки нарисовал сам. Схема элементарная на attiny13 с двумя гасящими резисторами для зеленого и красного элементов RGB светодиода. Для синего нужно довольно большое напряжение, так, что даже при 4.5-5 вольтах он не портебляет ток больше 7ма, так, что там резистор ставить не стал. Программка тоже без изысков, программный шим и в обрботке прерывания от таймера смена цветов.
Лампу пришлось порядочно зашкурить, так как после печати довольно ворсистые края отверстий, а так же покрасил белой акриловой автомобильной краской. Получилось примерно так:


[Spoiler (click to open)]
Без обработки выглядит примерно так:

Долго думал от чего питать, от батареек или аккумулятора, пока остановился на последнем. Взял маленькую банку на 1800 ма/ч и китайский зарядник http://ru.aliexpress.com/item/5pcs-lot-TP40561A-Lithium-Battery-Charging-Board-Battery-Charger-Charging-Module-Free-Shipping-Dropshipping/1084643386.html?spm=2114.13010608.0.147.NIjlHV
В целом по моему получилось довольно не плохо.


PS решил добросить исходный код:
/*****************************************************
Project : mood_lamp
Version : 1.0
Date    : 30.07.2016
Author ; : Panda

Chip type               : ATtiny13
AVR Core Clock frequency: 1,000000 MHz
Memory model            : Tiny
External RAM size       : 0
Data Stack size         : 16
*****************************************************/

#include <tiny13.h>

#define red_pin   PORTB.1
#define green_pin PORTB.3
#define blue_pin  PORTB.0

flash const unsigned char colors_red[10]  ={254, 200, 50,  10,  0,   150, 180, 0,   254, 0};
flash const unsigned char colors_green[10]={20, 50, 180, 254, 10, 20,  50,  254, 0,   0};
flash const unsigned char colors_blue[10] ={150, 180, 254, 50,  254, 20,  0,   0,   0,   254};

unsigned char red, green, blue;  //The color current signed
unsigned char _red_target, _green_target, _blue_target;
unsigned char red_up, green_up, blue_up;
unsigned char color;


// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
green_pin = 0;
// Place your code here
if (red != _red_target)
    { green_pin = 0;
     if (red_up)
        {red++;}
     else
        {red--;};
     if (red == 255) red_up = 0;
     if (red == 0) red_up = 1;
     };
if (green != _green_target)
    {
     if (green_up)
        {green++;}
     else
        {green--;};
     if (green == 255) green_up = 0;
     if (green == 0) green_up = 1;
     };
if (blue != _blue_target)
    {
     if (blue_up)
        {blue++;}
     else
        {blue--;};
     if (blue == 255) blue_up = 0;
     if (blue == 0) blue_up = 1;
     };

if ((red == _red_target)&&(green == _green_target)&&(blue == _blue_target))
   {color++;
    if (color > 9) color = 0;
    _red_target   = colors_red[color];
    _green_target = colors_green[color];
    _blue_target  = colors_blue[color];
    };
}

// Declare your global variables here

void main(void)
{
unsigned char pwm_counter;
// Declare your local variables here

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=In Func3=Out Func2=In Func1=Out Func0=Out
// State5=T State4=T State3=0 State2=T State1=0 State0=0
PORTB=0x00;
DDRB=0x0F;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 9600,000 kHz
// Mode: Normal top=0xFF
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x05;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x02;

// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;
DIDR0=0x00;

// ADC initialization
// ADC disabled
ADCSRA=0x00;

// Global enable interrupts
#asm("sei")

color = 0;

while (1)
      {
      // Place your code here
      //soft pwm
      pwm_counter=255;
      red_pin   = 1;
      green_pin = 1;
      blue_pin  = 1;

     //  i--;
      while (pwm_counter)
        {if (pwm_counter == red) red_pin = 0;
         if (pwm_counter == green) green_pin = 0;
         if (pwm_counter == blue) blue_pin = 0;
         pwm_counter--;
            };

      }
}

Пятeрочка выручает!

Сегодня зашел в местный пятак и увидел вот такой отличный контейнер.

По прямому назначению его обычно применяют для хранения крупы, но для тех, кто занимается разновсяческим электронным творчеством это отличный контейнер для травления плат, в который можно встроить барботаж и обогрев.

Маленькие хитрости при работе с Code Vision AVR

Маленькие хитрости при работе с Code Vision AVR
(Написание программ на С в Code Vision AVR для контроллеров не имеющих ОЗУ)

CV AVR – хорошая интегрированная среда для написания программ на языке высокого уровня С для микроконтроллеров семейства AVR, АТ90, ATMEGA, АТХ MEGA. Большое спасибо разработчикам за хорошую программу, но есть в ней один существенный недостаток – это отсутствие поддержки контроллеров без оперативной памяти ОЗУ (RAM), а именно ATTINY11, ATTINY12, ATTINY15. Можно попробовать использовать другие компиляторы, но большинство из них такие как ICC, WinAVR так же не поддерживают С для этих контроллеров. Прибегнув к некоторым ухищрениям все таки можно писать программы на С для этих контроллеров. Для этого необходимо, чтобы все переменные были глобальными и размещались в регистрах, последнее достигается путем

использования модификатора register при объявлении переменных.

register unsigned char i;
register
insigned int k;

При таком объявлении переменных среда сама разместит переменные в регистрах. По умолчанию она разместит их в регистрах с R16 по R21. Если вы хотите использовать регистры по своему усмотрению, то это можно сделать с помощью директивы препроцессора #pragma regalloc- и указать самостоятельно куда поместить ту или иную переменную.

#pragma regalloc-
register char ttp @12;
register int tmp @10;

таким образом компилятор разместит переменную ttp в регистре R12, а переменную tmp в регистрах R10, R11, так как переменная типа int занимает два байта. Шаг второй, необходимо отключить генерацию startup кода, то есть кода который выполняется до начала работы основной программы. Для этого в свойствах проекта

Рис.1 свойства проекта

[Spoiler (click to open)]

На вкладке C Compiler нужно установить флажок внешнего startup файла рис.2. Далее из каталога BIN программы скопировать файл STARTUP.ASM в каталог проекта и подправить его удалив команды очистки памяти SRAM так как ее нет в наших контроллерах изменить регистр косвенной адресации и убрать инициализацию глобальных переменных.

;CodeVisionAVR C Compiler
;(C) 1998-2004 Pavel Haiduc, HP InfoTech s.r.l.

;EXAMPLE STARTUP FILE FOR CodeVisionAVR V1.24.1 OR LATER

.EQU __CLEAR_START=0X60 ;START ADDRESS OF SRAM AREA TO CLEAR
                ;SET THIS ADDRESS TO 0X100 FOR THE
                ;ATmega128 OR ATmega64 CHIPS
    .EQU __CLEAR_SIZE=256   ;SIZE OF SRAM AREA TO CLEAR IN BYTES


    CLI        ;DISABLE INTERRUPTS
    CLR  R30
    OUT  EECR,R30    ;DISABLE EEPROM ACCESS

;DISABLE THE WATCHDOG
    LDI  R31,0x18
    OUT  WDTCR,R31
    OUT  WDTCR,R30

    OUT  MCUCR,R30    ;MCUCR=0, NO EXTERNAL SRAM ACCESS

;CLEAR R2-R14
    LDI  R24,13
    LDI  R26,2
    CLR  R27
__CLEAR_REG:
   ST   X+,R30        ; В наших контроллерах нет регистра Х, поэтому заменим его на Y
   ST   Y+,R30

    DEC  R24
    BRNE __CLEAR_REG

;CLEAR SRAM
    LDI  R24,LOW(__CLEAR_SIZE)
    LDI  R25,HIGH(__CLEAR_SIZE)
    LDI  R26,LOW(__CLEAR_START)
    LDI  R27,HIGH(__CLEAR_START)
__CLEAR_SRAM:
    ST   X+,R30
    SBIW R24,1
    BRNE __CLEAR_SRAM

;GLOBAL VARIABLES INITIALIZATION
    LDI  R30,LOW(__GLOBAL_INI_TBL*2)
    LDI  R31,HIGH(__GLOBAL_INI_TBL*2)
__GLOBAL_INI_NEXT:
    LPM
    ADIW R30,1
    MOV  R24,R0
    LPM
    ADIW R30,1
    MOV  R25,R0
    SBIW R24,0
    BREQ __GLOBAL_INI_END
    LPM
    ADIW R30,1
    MOV  R26,R0
    LPM
    ADIW R30,1
    MOV  R27,R0
    LPM
    ADIW R30,1
    MOV  R1,R0
    LPM
    ADIW R30,1
    MOV  R22,R30
    MOV  R23,R31
    MOV  R31,R0
    MOV  R30,R1
__GLOBAL_INI_LOOP:
    LPM
    ADIW R30,1
    ST   X+,R0
    SBIW R24,1
    BRNE __GLOBAL_INI_LOOP
    MOV  R30,R22
    MOV  R31,R23
    RJMP __GLOBAL_INI_NEXT
__GLOBAL_INI_END:


Красным отмечено все, что нужно убрать.

Рис.2 использование внешнего файла инициализации

Шаг третий, необходимо подключить заголовочный файл. Так как в каталоге INC программы отсутствуют заголовочные файлы для наших контроллеров, то мы можем использовать файл TINY13.h так как на пример tiny13 и tiny 15 имеют практически одинаковый состав регистров расположенных по одним и тем же адресам, но обязательно с оглядкой на datasheet используемого контроллера. В прилагаемом примере два регистра все же отличались, по этому для наглядности сделал дополнительное определение.

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

Если предполагается использовать в своей программе прерывания, то обязательно необходимо использовать директиву препроцессора #pragma savereg-, которая предписывает компилятору не сохранять автоматически регистры в память при входе в процедуру обработки прерывания.

#pragma savereg-
#pragma regalloc-

register char ttp @12;

Далее после написания программы и ее компиляции необходимо подправить выходной asm файл который будет находиться в рабочем каталоге проекта. В нем компилятор генерирует команды инициализации стека, которых нет в наших контроллерах. Убрать нужно всего 4 строчки, которые находятся непосредственно перед началом основной программы:
.CSEG
    .ORG 0

    .INCLUDE "1.vec"
    .INCLUDE "1.inc"

__RESET:
    .INCLUDE "STARTUP.ASM"

;STACK POINTER INITIALIZATION
    LDI  R30,LOW(0x9F)
    OUT  SPL,R30

;DATA STACK POINTER INITIALIZATION
    LDI  R28,LOW(0x70)
    LDI  R29,HIGH(0x70)


    RJMP _main

    .ESEG
    .ORG 0

    .DSEG
    .ORG 0x70
;       1 #include
;       2
;       3 register unsigned char i;
;       4 void main(void)

После этого можно компилировать выходной asm файл. Делать это нужно по тому, что мы его немного подправили и тот hex, что сгенерировала программа нам уже не подойдет. Сделать это можно просто, в каталоге BIN программы находится компилятор avrasm2.exe, его можно скопировать в каталог проекта и выполнить команду:

avrasm2.exefIo myfile.hex myfile.asm

Проект часто приходится перекомпилировать, по этому, чтобы не писать в командной строке много раз одно и тоже, можно создать файл с расширением bat (myfile.bat) и записать в него команду приведенную ниже, теперь для перекомпиляции достаточно его запустить и в итоге вы получите готовый к использованию hex файл.

Теперь о программировании контроллера. Специально для вас я собрал маленькое демонстрационное устройство на ATTINY15 состоящее из контроллера, двух резисторов и светодиода, и запрограммировал его.

Рис. 3 Схема и внешний вид тестового устройства

Текст программы на языке С написанный в CVAVR 1.24.8d

/*********************************************/
/*           Demo project ATTINY15                 */
/*          Cade Vision AVR 1.24.8d                 */
/*               by Panda_Y2K                                */
/*                   2012                                               */
/*********************************************/

#include

sfrb OCR1A=0x2e;
sfrb TCCR1=0x30;
register unsigned char i,j;

void main(void)
{       
GIMSK = 0;
TIMSK0 = 0x00;
TCCR0B = 0x00;
PORTB = 0;     //Clear PORTB
DDRB  = 0x02;  //PORTB.1 out
// CTC = 0, PWM1 = 1, COM1A1 = 1, COM1A0 = 0, CS13 = 0, CS12 = 1, CS11 = 1, CS10 = 1
// CK/4
TCCR1 = 0x67;

while (1)
{
 for (i=255; i>0; i--)
    {OCR1A = i;
     for (j=255; j>0; j--);
     };
  };

  } //end of main  

CVAVR шить контроллер упорно не хотел, но SinaProg вполне справился с задачей.

Рис.4 Внешний вид SinaProg

Программатор использовался USBTiny

Рис. 5 Внешний вид программатора USBTiny

Рис. 6 Внешний вид программатора USBTiny

Схему программатора и описание можно взять здесь. Видео работы устройства можно посмотреть по ссылке.

Я надеюсь, что эта статья будет полезна не только новичкам.