Во времена, раньше чтобы частотомер сообразить простейший - целая эпопея... а тут вот нарыл FreqCounter, подцепил к I2C дисплею ... и пользуйся... даже преамп не нужен, ну если знаем точно куда цепляемся.
У кого непонятки с задержками - есть решение, используйте не родной шаблон типа:
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
А вот такой:
#include <avr/io.h> // библиотека ввода вывода
// подключать по идее обязательно
// тут можно подключить что-то или настроить директиву #define
// ...
int main( void ) // аналог void setup()
{
// тут инициализируем что нам нужно
//
//...
//
// символ "}" не ставим, его нужно будет поставить в конце
while(1){ // аналог void loop()
// тут крутиться вечный цикл
// прямо таки как тут coub.com/view/1k3bw
//
//...
//
} //закрываем while(1)
return 0; //честно так и не понял зачем тут возвращать 0
} // закрываем int main()
// кстати таким от образом можно сэкономить десяток другой байт
// для тини13 это как никак актуально
// ещё рекомендую ознакомится:
// nuzhen-sovet.ru/content/optimiziruem-kod-v-arduino
Ну, на самом деле это "близко" к "родному шаблону".
ВОт так он выглядит в
hardware\arduino\cores\arduino\main.cpp
#include <Arduino.h>
int main(void)
{
init();
#if defined(USBCON)
USB.attach();
#endif
setup();
for (;;) {
loop();
if (serialEventRun) serialEventRun();
}
return 0;
}
Как видим разница только в вызове init() и обработки событий Serial-ла.
Его можно найти в wiring.c - там можно увидеть настройку таймеров и т.п. мдени.
Возможно что-то из этих "настроек" вам и мешало.
С другой стороны, если вы "отказались" от этого, то можно ожидать, что некоторые стандартные функции типа delay(), millis() - могут начать глючить. Ну и сооотвественно с serial могут быть сюрпризы. Вообщем "все дальше делать самому".
//честно так и не понял зачем тут возвращать 0
21
} // закрываем int main()
Ну если мы объявили что фунция возвращает int, то "правило хорошего тона" - все-таки делать return 0, хотя бы "с чем нибудть".
Иначе любой статический анализатор начнет нам ошибки кидать, что типа "обещали вернуть, а не вернули".
А зачем "обещали"? А думаю "так исторически сложилось". Что main() что-то возвращает (код возврата). Когда на компе программы запускали, и предполагалось, что операционка должа как-то узнать "нормально програма завершилась, или что-то у нее случилось".
В контроллере - это конечно не имеет смысла. Некому смотреть этот "код возврата". Тем более что функция main() у нас никогда не заврешится, и до этого return - дело никогда не дойдет. И что вы там вернете - ни на что не влияет.
Так что понять "зачем?" - вы никогда не сможете. Потому что ответ: низачем. Так исторически сложилось.
Здравствйте. Не могу разобраться с прерываниями, не выходит ничего. Обращаюсь, в основном, к HWman`у с просьбой подробнее описать работу с прерываниями PCINT. Я пробовал сшить что-то из примеров его кода, но не смог сменить бит порта. Мне нужно на PB3 и PB4. Привожу свой скетч, вся работа с пррываниями находится до loop, выделил места настройки прерывания комментариями, подскажите, что я делаю не так.
Я так понял, он использует библиотеку, которую скачать не получается из-за побитой ссылки(востановить не смог я), и я так и не понял что значит:
GIMSK = _BV (INT0); // int - Enable external interrupts int0
MCUCR = _BV (ISC01); // int - INT0 is falling edge
Особенно _BV и то, как работать с маской. "INT0 is falling edge" меня совсем в тупик ставит, как он настртраивает прерывание, которое всегда имеет Any logical change...
Утром встаю, свет не горит в аквариуме, включаю и кормлю. Спать ложусь, а в аквариуме светло - кормлю и выключаю свет. Без света забываю. Раньше там стояла люминесцентная, дохла каждый месяц, старую конструкци. рахобрал, а новую не собрал....
Нашёл на форуме некую библиотеку для работы с PCINT, но в ней используется запись в регистры, которые то ли отсутствуют в attiny13, то ли IDE капризнечает. При выборе платы, как UNO - компилируется, при выборе attiny13 нет.
Удивительно, но я так и не нашёл прерывания, которые можно взять как есть и всунуть в IDE, но смог сгибридизировать пару кодов и получить следующий код. Все строки, косающиеся прерываний, откомментировал.
// NikitosZs PCINT ( pin change interrupt) sample
void setup(){
DDRB = 0B00111;
PORTB=0B11010;
GIMSK = 0b00100000; // Не изменять!!!! Разрешение прерываний PCINTn
PCMSK = 0b00001000; // Выставялем макску порта B, на пины которые срабатывает прерывание
/* PCMSK = 0b00010000; Считаем с правого конца начиная с нуля
1 стоит на месте четвёртого бита, значит при изменении значения на PB4 вызовется прерывание
PCMSK = 0b00000110; // по изменению на PB1 ИЛИ PB2 вызовется одно и то же прерывание */
sei(); // Активируем прерывания
// cli(); // Деактивируем прерывания, например, для предотвращения дребезга
}
ISR (PCINT_vect) // Функция обработки прерыванию ПО ЛЮБОМУ ИЗМЕНЕНИЮ состояния пина
{
/* Тут можно проверить состояние пина
Если на нём 0, то было падение( Falling )
Если на нём 1, то случилось возрастание ( RISING )
Без проверки условия получим прерывание по любому изменению ( CHANGE )
Если задана маска на несколько пинов прерывания, то выполнить проверку на пин */
PORTB = PORTB&(0B11111000);
PORTB = PORTB|101;
}
void loop(){
}
Решил собрать свой драйвер для карманного фонарника на мощном светодиоде, столкнулся с такой гадостью, как зависание микроконтроллера attiny13. Питание от литиевого элемента 18650. Вочдог не то, зависает через 5-50 секунд во время смены яркости свечения. Можно как-нибудь переставить фьюзбиты или что-нибудь придумать? Может, если частоту снизить МК будет постабильней?
Решил собрать свой драйвер для карманного фонарника на мощном светодиоде, столкнулся с такой гадостью, как зависание микроконтроллера attiny13. Питание от литиевого элемента 18650. Вочдог не то, зависает через 5-50 секунд во время смены яркости свечения. Можно как-нибудь переставить фьюзбиты или что-нибудь придумать? Может, если частоту снизить МК будет постабильней?
Уменьшение рабочей частоты увеличивает рабочий диапазон питания МК(в нижнюю сторону) и уменьшает энергопотребление.
Для всяких фонариков и прочего хватит частоты 1.2 МГц.
Для всяких фонариков и прочего хватит частоты 1.2 МГц.
Да мне и 16кГц хватит, 128кГц с делителем на 8, уже проверил, работает! Блинк ускоренный гонял пол часа, вроде не было перезагрузки, но вылилось некоторое неудобство: Не прошивается ну вот ничем на частоте такой. Менял скорость загрузки прошики, но не удалось, даже на 500Гц, хотя фьюзы пишутся читаются. Пока что вышел из этого так: Шью, когда МК на частоте 9,6Мгц, затем меняю фьюзы и МК работает с той же прошивкой, но на частоте 16кГц. Конечно же, я переопределил в boards.txt как частоту, так и скорость загрузки и фьюзы(на всякий случай) для 16кГц, переписал wiring.c , т.к IDE жаловалась на то, что нет такой частоты, как 16кГц, 128 минимум! Переписал там, какие то коэфициенты подогнал, но IDE выдаёт:
avrdude: error: programm enable: target doesn't answer. 1
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.
И на этом я застрял. Фьюзы читаются через Khazam и AVR8 Burn-Mat v2. Программатор USB ASP с последней прошивкой.
Скачайте Khazama AVR Programmer, обновите ПО USB ASP до последней версии (если каза не пожалуется на то, что не может быть выбрана скорость программирования, то и не нужно обновлять), выберите настройки и частоту задайте в ручную на 1-4 кГц, далее пункт про фьюз биты, Read All, ну а если оно их считало, то и запишет, т.к в начале проверяется ID микроконтроллера. Может получится оживить.
Не знаете других дешёвых AVR, но с более широким набором интерфейсов? Может, чуть больше ног, но дешевые..... Та же ATtiny2313 стоит как ATmega8...
/*Скачайте Khazama AVR Programmer, обновите ПО USB ASP до последней версии (если каза не пожалуется на то, что не может быть выбрана скорость программирования, то и не нужно обновлять), выберите настройки и частоту задайте в ручную на 1-4 кГц, далее пункт про фьюз биты, Read All, ну а если оно их считало, то и запишет, т.к в начале проверяется ID микроконтроллера. */
От бы у меня был ещё той USB ASP...
/*Та же ATtiny2313 стоит как ATmega8...*/
Я в данном случае не вижу иного выхода как юзать мегу 8-ю.
Как думаете, реально ли на ATtiny13 сделать устройствос непосредственным юзб(типа v-USB), что б эмулировался COM порт, и данные, отправленные в этот порт немного обрабатывались и заливались в сдвиговый регистр? Меня, лично, волнует не столько вес, т.к фиг с ним, можно и mega8 использовать, сколько эмуляция comпорта через виртуальный usb, который бы использовался на том же микроконтроллере.
Есть ПО котороё шлёт данные в выбранные com порт(цветомузыка), для обработки приходится использовать usb-uart, затем мк ещё, и сдвиговые регистры. Хочется сократить всё до 1 микросхемы подороже, либо 1 по дешевле и со сдвиговыми регистрами.
почему бы и нет. но задача такая узкая. малопригодная. кроме разве что uart на тиньке
смысл если стоит 1602 ставить тиньку 13 а не мегу8 например и извращаться. ведь после программирования повторно ничего не зальешь. reset ведь используется как пин
Кстати, можно сделать чтобы как-то МК уходил в ребут при каких-то условиях... ну например, сделать чтобы при подаче порт логической 1 срабатывало прерывание которое заводило ватчдог на мин. время... или же так не прокатит?
Что-то типа программный ресет Гг.
Что-то я туплю, нужно же подавать логический ноль, точней программатор так делает.
Мне главное понять можно ли так сделать как я предложил, только задать при каких условиях это было бы возможно.
Ещё только что пришла мысль использовать BOD для перезагрузки МК...
Подключить питание МК через транзистор, управляемый ресет пином программатора? Вы об этом? Интересно, но вот будет ли это то же самое, что и ресет. Это же не ардуина, которая ждёт загрузки определённое время после включения.
На ютьюбе посмотрел видюшки, есть много на тему сброса фьюзов у tiny? притом любых. Типа высоковольтный фьюз программатор.
Заинтересовали, давайте ваш проект. Буду тестировать.
Фьюзы давать или сами разберётесь?
Кстати, это будет более правильная схема:
Не рекомендую повторять если нету ВВ программатора, кстати я так и не собрал реальное устройство так что не знаю вообще заработает или нет, иногда бывает что в протеусе работает а в реале нет.
...Это же не ардуина, которая ждёт загрузки определённое время после включения...
Как раз так по ходу и есть, после перезагрузки МК ждёт некоторое время, надеется что ему кто-то подкинет какую-то прошивочку.
Могу быть не прав, так что поправьте если что.
А как можно с тиньки отправить пару тройку байт на такой модуль. Вроде бы функция shiftOut() подходит, но там два выхода задействованы dataPin, clockPin . А на передатчик можно завести только один провод, а библиотека VirtualWire для тиньки не катит вроде.
Илья73, как раз занимаюсь этим, но... Немного подзабил. Попробуйте написать свою библиотеку для работы с этими передатчиками. Я пробовал кодировать сигнал длительностью высокого и низкого уровня, получал около 5 различимых сигналов, т.е некая пятиричная система, но нужен внешний кварц, а то данные сильно уж "размытые" получаются.
Надо будет пробовать. Дождусь программатора и займусь. А то не удобно будет дергать UNO для заливки скетча на тиньку а потом в тот же UNO заливать скетч приемника. А пока покурю гугл, да и может у кого мысли какие появятся.
Спс, сейчас попробую, тут еще вот такую штуку нашел:
вроде частоту измеряет...
...функцией бы ШИМ сообразить для ПН в принципе не нужно большого разнообразия частот, да и точность тоже +/- 2000Гц... не сильно страшно.
Во времена, раньше чтобы частотомер сообразить простейший - целая эпопея... а тут вот нарыл FreqCounter, подцепил к I2C дисплею ... и пользуйся... даже преамп не нужен, ну если знаем точно куда цепляемся.
HWman, извиняюсь, код рабочий, разобраться надо, другой вопрос на какой частоте у меня это происходит... :_(
У кого непонятки с задержками - есть решение, используйте не родной шаблон типа:
А вот такой:
Лично мне помогло разрулить непонятки с этим проектом:
http://razniepodelki.blogspot.com/2014/08/attiny13-arduino.html
ЗЫ 404 сообщение Гг
Ну, на самом деле это "близко" к "родному шаблону".
ВОт так он выглядит в
hardware\arduino\cores\arduino\main.cpp
Как видим разница только в вызове init() и обработки событий Serial-ла.
Его можно найти в wiring.c - там можно увидеть настройку таймеров и т.п. мдени.
Возможно что-то из этих "настроек" вам и мешало.
С другой стороны, если вы "отказались" от этого, то можно ожидать, что некоторые стандартные функции типа delay(), millis() - могут начать глючить. Ну и сооотвественно с serial могут быть сюрпризы. Вообщем "все дальше делать самому".
//честно так и не понял зачем тут возвращать 0
21
}
// закрываем int main()
Ну если мы объявили что фунция возвращает int, то "правило хорошего тона" - все-таки делать return 0, хотя бы "с чем нибудть".
Иначе любой статический анализатор начнет нам ошибки кидать, что типа "обещали вернуть, а не вернули".
А зачем "обещали"? А думаю "так исторически сложилось". Что main() что-то возвращает (код возврата). Когда на компе программы запускали, и предполагалось, что операционка должа как-то узнать "нормально програма завершилась, или что-то у нее случилось".
В контроллере - это конечно не имеет смысла. Некому смотреть этот "код возврата". Тем более что функция main() у нас никогда не заврешится, и до этого return - дело никогда не дойдет. И что вы там вернете - ни на что не влияет.
Так что понять "зачем?" - вы никогда не сможете. Потому что ответ: низачем. Так исторически сложилось.
Здравствйте. Не могу разобраться с прерываниями, не выходит ничего. Обращаюсь, в основном, к HWman`у с просьбой подробнее описать работу с прерываниями PCINT. Я пробовал сшить что-то из примеров его кода, но не смог сменить бит порта. Мне нужно на PB3 и PB4. Привожу свой скетч, вся работа с пррываниями находится до loop, выделил места настройки прерывания комментариями, подскажите, что я делаю не так.
Да я сам нагуглил какой-то пример. Пока я до прерываний ещё не дошёл.
Блин, жалко. Останутся рыбы(делал контроллер RGB ленты для аквариума) без света...
Блин, жалко. Останутся рыбы(делал контроллер RGB ленты для аквариума) без света...
рыб жалко
http://avrbasiccode.wikispaces.com/
Я так понял, он использует библиотеку, которую скачать не получается из-за побитой ссылки(востановить не смог я), и я так и не понял что значит:
Особенно _BV и то, как работать с маской. "INT0 is falling edge" меня совсем в тупик ставит, как он настртраивает прерывание, которое всегда имеет Any logical change...
Вот тут хоровые примеры http://sotvorimvmeste.ru/viewtopic.php?f=36&t=74 в т.ч. и по прерываниям.
А рыб чего жалко? Вегетативные циклы?
Утром встаю, свет не горит в аквариуме, включаю и кормлю. Спать ложусь, а в аквариуме светло - кормлю и выключаю свет. Без света забываю. Раньше там стояла люминесцентная, дохла каждый месяц, старую конструкци. рахобрал, а новую не собрал....
Нашёл на форуме некую библиотеку для работы с PCINT, но в ней используется запись в регистры, которые то ли отсутствуют в attiny13, то ли IDE капризнечает. При выборе платы, как UNO - компилируется, при выборе attiny13 нет.
Удивительно, но я так и не нашёл прерывания, которые можно взять как есть и всунуть в IDE, но смог сгибридизировать пару кодов и получить следующий код. Все строки, косающиеся прерываний, откомментировал.
я может скажу какую глупость
но на тини12 есть ардуина?
Решил собрать свой драйвер для карманного фонарника на мощном светодиоде, столкнулся с такой гадостью, как зависание микроконтроллера attiny13. Питание от литиевого элемента 18650. Вочдог не то, зависает через 5-50 секунд во время смены яркости свечения. Можно как-нибудь переставить фьюзбиты или что-нибудь придумать? Может, если частоту снизить МК будет постабильней?
дубль.
я может скажу какую глупость
но на тини12 есть ардуина?
Я не видел, спросите у гугла.
Решил собрать свой драйвер для карманного фонарника на мощном светодиоде, столкнулся с такой гадостью, как зависание микроконтроллера attiny13. Питание от литиевого элемента 18650. Вочдог не то, зависает через 5-50 секунд во время смены яркости свечения. Можно как-нибудь переставить фьюзбиты или что-нибудь придумать? Может, если частоту снизить МК будет постабильней?
Уменьшение рабочей частоты увеличивает рабочий диапазон питания МК(в нижнюю сторону) и уменьшает энергопотребление.
Для всяких фонариков и прочего хватит частоты 1.2 МГц.
Для всяких фонариков и прочего хватит частоты 1.2 МГц.
Да мне и 16кГц хватит, 128кГц с делителем на 8, уже проверил, работает! Блинк ускоренный гонял пол часа, вроде не было перезагрузки, но вылилось некоторое неудобство: Не прошивается ну вот ничем на частоте такой. Менял скорость загрузки прошики, но не удалось, даже на 500Гц, хотя фьюзы пишутся читаются. Пока что вышел из этого так: Шью, когда МК на частоте 9,6Мгц, затем меняю фьюзы и МК работает с той же прошивкой, но на частоте 16кГц. Конечно же, я переопределил в boards.txt как частоту, так и скорость загрузки и фьюзы(на всякий случай) для 16кГц, переписал wiring.c , т.к IDE жаловалась на то, что нет такой частоты, как 16кГц, 128 минимум! Переписал там, какие то коэфициенты подогнал, но IDE выдаёт:
Я пробовал шить на частоте 128КГц, там пишет в файле boards.txt чем это кончилось, если Вы используете предложенные мною файлы.
Использую Ваше ядро, но не то, на которое ссылка, а ту версию, которю Вы выложили не так давно. Не понял, кто и что пишет в файле boards.txt?
Там в boards.txt я написал что на частоте 128 кГц тиньки лочатся почему-то, у меня уже даже целая колекция насобиралась.
На фото зачатие ATtiny2313.
Вот как даже можно:
https://www.youtube.com/watch?v=-lpd3ro48Go
Скачайте Khazama AVR Programmer, обновите ПО USB ASP до последней версии (если каза не пожалуется на то, что не может быть выбрана скорость программирования, то и не нужно обновлять), выберите настройки и частоту задайте в ручную на 1-4 кГц, далее пункт про фьюз биты, Read All, ну а если оно их считало, то и запишет, т.к в начале проверяется ID микроконтроллера. Может получится оживить.
Не знаете других дешёвых AVR, но с более широким набором интерфейсов? Может, чуть больше ног, но дешевые..... Та же ATtiny2313 стоит как ATmega8...
/*Скачайте Khazama AVR Programmer, обновите ПО USB ASP до последней версии (если каза не пожалуется на то, что не может быть выбрана скорость программирования, то и не нужно обновлять), выберите настройки и частоту задайте в ручную на 1-4 кГц, далее пункт про фьюз биты, Read All, ну а если оно их считало, то и запишет, т.к в начале проверяется ID микроконтроллера. */
От бы у меня был ещё той USB ASP...
/*Та же ATtiny2313 стоит как ATmega8...*/
Я в данном случае не вижу иного выхода как юзать мегу 8-ю.
А мегу8 слишком жалко, потому что не использую весь её потенциал. Замкнутый круг.
Не думали купить USB ASP? Стоит же копейки. Или сделать самому, на той же меге8.
А я тут плюшками балуюсь...
Да ATtiny2313 стоит как ATmega8 , а ещё в ATtiny2313 нет АЦП и всего 2 кб..
HWMan, dывод Reset придётся отдать...
MaksMS, о чём и речь.
HWMan, dывод Reset придётся отдать...
MaksMS, о чём и речь.
Зато используются почти все ресурсы МК.
Как думаете, реально ли на ATtiny13 сделать устройствос непосредственным юзб(типа v-USB), что б эмулировался COM порт, и данные, отправленные в этот порт немного обрабатывались и заливались в сдвиговый регистр? Меня, лично, волнует не столько вес, т.к фиг с ним, можно и mega8 использовать, сколько эмуляция comпорта через виртуальный usb, который бы использовался на том же микроконтроллере.
Есть ПО котороё шлёт данные в выбранные com порт(цветомузыка), для обработки приходится использовать usb-uart, затем мк ещё, и сдвиговые регистры. Хочется сократить всё до 1 микросхемы подороже, либо 1 по дешевле и со сдвиговыми регистрами.
конечно можно. куча устройств работает
http://www.obdev.at/products/vusb/prjdata.html
Как считаете, стоит ли данный проект статьи на хабре?
https://www.youtube.com/watch?v=9QC27o6uLzE
почему бы и нет. но задача такая узкая. малопригодная. кроме разве что uart на тиньке
смысл если стоит 1602 ставить тиньку 13 а не мегу8 например и извращаться. ведь после программирования повторно ничего не зальешь. reset ведь используется как пин
Кстати, можно сделать чтобы как-то МК уходил в ребут при каких-то условиях... ну например, сделать чтобы при подаче порт логической 1 срабатывало прерывание которое заводило ватчдог на мин. время... или же так не прокатит?
Что-то типа программный ресет Гг.
Что-то я туплю, нужно же подавать логический ноль, точней программатор так делает.
Мне главное понять можно ли так сделать как я предложил, только задать при каких условиях это было бы возможно.
Ещё только что пришла мысль использовать BOD для перезагрузки МК...
Походу бредовые идеи... не так ли?
Подключить питание МК через транзистор, управляемый ресет пином программатора? Вы об этом? Интересно, но вот будет ли это то же самое, что и ресет. Это же не ардуина, которая ждёт загрузки определённое время после включения.
На ютьюбе посмотрел видюшки, есть много на тему сброса фьюзов у tiny? притом любых. Типа высоковольтный фьюз программатор.
Заинтересовали, давайте ваш проект. Буду тестировать.
Какой проект? Тини лсд юарт?
Да, его. Что б если уж залочится тинька, то хоть что-то делает пусть.
http://vk.com/doc256435878_327375100
Там только хекс файл и схемка в протеусе.
Фьюзы давать или сами разберётесь?
Кстати, это будет более правильная схема:
Не рекомендую повторять если нету ВВ программатора, кстати я так и не собрал реальное устройство так что не знаю вообще заработает или нет, иногда бывает что в протеусе работает а в реале нет.
Кстати, в железе я не тестил так что не знаю что будет.
Это я понял, не пугает. Ночью посижу, наверное.
...Это же не ардуина, которая ждёт загрузки определённое время после включения...
Как раз так по ходу и есть, после перезагрузки МК ждёт некоторое время, надеется что ему кто-то подкинет какую-то прошивочку.
Могу быть не прав, так что поправьте если что.
Кто-нибудь проверял https://arduino.ru/forum/programmirovanie/attiny13a-101-primenenie?page=8#comment-77641 прерывания эти? У меня раньше работало, а сейчас нет
Нагуглил вот такую ссылку, может кто из опытных посмотрит?
http://www.mikrocontroller.net/topic/73196
Ссылка на английском.
А как можно с тиньки отправить пару тройку байт на такой модуль. Вроде бы функция shiftOut() подходит, но там два выхода задействованы
dataPin, clockPin
. А на передатчик можно завести только один провод, а библиотека VirtualWire для тиньки не катит вроде.Илья73, как раз занимаюсь этим, но... Немного подзабил. Попробуйте написать свою библиотеку для работы с этими передатчиками. Я пробовал кодировать сигнал длительностью высокого и низкого уровня, получал около 5 различимых сигналов, т.е некая пятиричная система, но нужен внешний кварц, а то данные сильно уж "размытые" получаются.
Надо будет пробовать. Дождусь программатора и займусь. А то не удобно будет дергать UNO для заливки скетча на тиньку а потом в тот же UNO заливать скетч приемника. А пока покурю гугл, да и может у кого мысли какие появятся.
Все уже давно все придумано..Используйте протокол пультов RCswitch
незнаю заметили или нет, вышла новая версия ядра - 19
http://sourceforge.net/projects/ard-core13/files/
И снова та же история с ШИМ.
wiring_analog.c
Пока тестирую, присоединяйтесь.