Какие таймеры МК ардуина занимает?

axill
Offline
Зарегистрирован: 05.09.2011

мне нужно организовать обработку по таймеру, какой могу настроить под себя чтобы не повредить функции самой ардуины?

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Навскидку, поиск по исходникам (v1.0.5) слова ISR (с учетом регистра) подсказывает, что:

Timer0 - нельзя использовать (можно, но будет некий гемор), есть обработчик (wiring.c), а остальные таймеры можно, если не использовать PWM, Tone. Кстати, может быть гемор с Tone (Tone.cpp), поскольку там тоже есть обработчик и могут быть грабли при компиляции (обработчик уже существует, но можно обойти, если хочется).

Ну и, разумеется, кол-во таймеров и их разрядность - зависит от камня, это Вы знаете.

 

axill
Offline
Зарегистрирован: 05.09.2011

Спасибо! Значит сиогу довольно легко использовать 1 и 2 таймеры

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Ну да, главное PWM не трогать, а то таймеры перепрограммируются и кирдык :) Ну и еще помнить, что любые сторонние либы могут задействовать таймеры, любые.

Мысли вслух: такие вещи, конечно, для макетирования и отладки можно делать, а потом слезать с этой среды на голый компилятор, без wiring, чтобы всё было тупо и надежно, без случайных ошибок, а то фиг найдешь :) И шить через ISP, выкинув загрузчик. Эк меня понесло то :)

 

axill
Offline
Зарегистрирован: 05.09.2011

kisoft пишет:

Ну да, главное PWM не трогать, а то таймеры перепрограммируются и кирдык :) Ну и еще помнить, что любые сторонние либы могут задействовать таймеры, любые.

PWM фигня, совместить его с обработчиком прерываний не сложно

kisoft пишет:

Мысли вслух: такие вещи, конечно, для макетирования и отладки можно делать, а потом слезать с этой среды на голый компилятор, без wiring, чтобы всё было тупо и надежно, без случайных ошибок, а то фиг найдешь :) И шить через ISP, выкинув загрузчик. Эк меня понесло то :

дык у меня таже идея. Но переносить некоторые либы под голый компилятор мне в лом. Вот сейчас сделал несколько устройств с применением RCSwitch. Еще нужна будет IRemote. Пробовал переписывать другие либы, муторно это. Сейчас все в принципе написал в логике ардуино с delay(), но как то коробит)) привык уже в основном цикле только флаги проверять, а все задержки определять по ISR

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


#define ADC_COUNT	64
void setADC(uint8_t channel) {
	ADMUX = (1 << REFS0) | channel;
}
ISR(ADC_vect) {
	var.adc.sum += ADCW;
	if(++var.adc.count == ADC_COUNT) {
		var.adc.sum /= ADC_COUNT;
		// усреднение завершилось
		switch(ADMUX & 0b1111) {
			case TIMEPOT_ADC:
				var.adc.sum = 1023 - var.adc.sum;
				var.timepot_sec = LIGHT_TIMEOUT_ON_SEC(var.adc.sum); // инверсия из за дизайна платы
				setADC(LIGHTPOT_ADC);
				break;
			case LIGHTPOT_ADC:
				var.lightpot = var.adc.sum - 512;
				setADC(LIGHTSENS_ADC);
				break;
			case LIGHTSENS_ADC:
				var.lightlevel = 1023 - var.adc.sum;
				setADC(TIMEPOT_ADC);
				break;
		}
		var.adc.sum = 0;
		var.adc.count = 0;
	}
	ADCSRA |= (1 << ADSC);
}

кстати прошивку заливаю именно через ISP, использую visulmicro с atmel avr isp mkII

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

axill пишет:

kisoft пишет:

Ну да, главное PWM не трогать, а то таймеры перепрограммируются и кирдык :) Ну и еще помнить, что любые сторонние либы могут задействовать таймеры, любые.

PWM фигня, совместить его с обработчиком прерываний не сложно

В PWM, благо, нет обработчиков, но таймер они перепрограммируют. Скрытый глюк можно словить.

axill пишет:

kisoft пишет:

Мысли вслух: такие вещи, конечно, для макетирования и отладки можно делать, а потом слезать с этой среды на голый компилятор, без wiring, чтобы всё было тупо и надежно, без случайных ошибок, а то фиг найдешь :) И шить через ISP, выкинув загрузчик. Эк меня понесло то :

дык у меня таже идея. Но переносить некоторые либы под голый компилятор мне в лом. Вот сейчас сделал несколько устройств с применением RCSwitch. Еще нужна будет IRemote. Пробовал переписывать другие либы, муторно это. Сейчас все в принципе написал в логике ардуино с delay(), но как то коробит)) привык уже в основном цикле только флаги проверять, а все задержки определять по ISR

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

Таки да, еще бы DMA был ;)
IRremote - великоват, зараза и развесист (условной компиляции немало, зато можно таймер поменять, но приходится ковыряться в нем иногда), если протокол один, мне кажется лучше юзать другие либы, это уж как удобней, конечно. IRremote хорош, когда надо поковырять протокол, попробовать как работает, а потом от него бежать :) Я время от времени ищу либы подходящие, для боевых условий, но пока не нашел подходящих. Хотя статей немало на эту тему. На ЕЕ (в сообществе) иногда отжигает народ с IR. Иногда и алгоритмы оригинальные проскакивают, а в IRremote сделано тупо, зато универсально.

axill пишет:

кстати прошивку заливаю именно через ISP, использую visulmicro с atmel avr isp mkII

Я USBASP китайский по 90 рублей (1 шт.), не так давно парочку прикупил, лепота! Сначала всё хотел себе AVRDoper сделать (у него 12В есть, ШИМом делают), да только щас ЛЛТ попробовал, а то может и спаял бы, все детальки есть. Благо с ARM совсем другие проблемы, теперь пара-тройка платок есть, там программаторы есть. Надо, пожалуй, заказать себе STM32 да спаять что-нибудь, там шаг вроде нормальный (я не про корпуса на 208 ног ;)

 

axill
Offline
Зарегистрирован: 05.09.2011

нет случаем чего то попроще на простом С для IR?

примеры мне попались, но чтобы из них либу сделать нужно еще больше чем с ардуиной извратиться

мне универсальонсть не нужна, нужно медленное общение не большими объемами информации между рядом расположенными устройствами

STM это вещь. Запаять легко можно. Но мне уже влом переползать. Столько усилий на AVR потрачено, тем более что все что мне нужно AVR умеет

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Мне понравилась простая идея decoder http://we.easyelectronics.ru/dcoder/pruf-of-koncept---priem-i-peredacha-ik-signala-odnim-svetodiodom.html на одном светодиоде. Там, правда только концепт и STM8, плюс в МК совпадают вход компаратора и выход таймера. Да и писать придется, готового ничего нет.
Вот еще, нашел в закладках http://we.easyelectronics.ru/Soft/prostoy-universalnyy-dekoder-ik-du.html но это только приемник на ATTiny26. Правда он юзает 0 таймер.

А для обмена придется протокол выдумывать, с контролем правильности передачи данных. Зато чуть легче, можно выбрать IR протокол полегче в реализации.

А так, к сожалению ничего нет готового, время от времени копаюсь, но пока время не пришло что то реализовать.

 

axill
Offline
Зарегистрирован: 05.09.2011

В том то и ерунда)

я еще активно участвовал в проекте mysensors, но переводить кажду версию на Си нереально. Нужен компромисс. Мне бы вот еще железная отладка заработала совсембыло бы хорошо

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Насколько помню JTAG есть в ATMEGA, но только он криво работает. Для PinBoard DI HALT делает платку для прошивки Happy JTAG ICE 2 http://easyelectronics.ru/files/PinBoard/AVR_base.pdf (в конце файла небольшое описание), которую можно допаять до JTAG ICE I. Но, говорят, работает криво. Автор сам где про это говорил. Плюс нужно с бубном танцевать, чтобы завести.

Есть и видео http://www.youtube.com/watch?v=gpulC_OjGBA&feature=youtu.be с 10 минуты показывает откладку в студии 4 версии (увы, только 4.19 или типа того).

Схема и прошивка у него где то явно есть в паблик доступе. Хотя лучше сначала почитать в форуме, может и не стоит это делать.

 

axill
Offline
Зарегистрирован: 05.09.2011

Jtag шикарно работает с нормальным програматором, а с отладчиком еще и самая полноценная отладка. Причем jtag единственный внутрисхемный вариант с которым не возможно испортить фьюзы. Ну ...почти не возможно. Главное сам jtag не отключить) а вот ошибиться с настройкой кварца не страшно

с atmega328 нормально debugWire работает

но дело не в этом. Дело в том, что среда ардуино не поддерживает отладку в железе

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

А вспомнил, visual micro отладку в триале не держит. Засада. Про фирменные программаторы читал на ЕЕ :) Тихий ужас, а не цены. Я с армовским JTAGом наигрался на курсах по TI, клево отлаживаться, графики, регистры - песня. Ладно не буду на мозги капать ;) Я не нарошно :)

 

axill
Offline
Зарегистрирован: 05.09.2011

Дык с атмелом таже сказка - регистры, точки останова, прямоц доступ к переферии

у visual micro за деньги своя надстройка типа отладка по USB. С нормальной железной отладкой и близко не стояла, не то это