Ну вот и приближается проверка в железе драйвера фонарика
Код конечно же непокажете?
Почему не покажу. я не скрываю свои коды если не заметили.но еще рано. надо допилить. как все будет нормально работать тогда и выложу коды, видео, фото
криво перевожу или криво написано, но сколько входов ATtiny13A могут работать по внешним прерываниям ?
Цитата:
... one 8-bit Timer/Counter with compare modes, Internal and External Interrupts, a 4-channel, 10-bit ADC, a programmable Watchdog Timer with internal Oscillator, and three ...
судя по схеме внешние прерывания доступны на всех ногах кроме земли и питания, те их больше, чем у Atmega256 ...
PCINTx-прерывания обслуживают сразу целый порт, поэтому в обработчике необходимо смотреть на записанное и текущее состояние выводов и выискивать, какой же из пинов изменил свое состояние (и в какую сторону). Ну а потом уже решать, реагировать ли на это изменение или проигнорировать.
Вот, например, у ATMega328 есть три соответствующих вектора обработки прерываний PCINT: 4-й (PCINT0_vect), 5-й (PCINT0_vec1) и 6-й (PCINT2_vect). 4-й вектор обслуживает ноги PCINT7...0 (порт B), 5-й - PCINT8...14 (порт C - в нем только 7 выводов), 6-й - PCINT16...23 (порт D).
INTx слушает один-единственный вывод и может настраиваться на тип происходящего на нем изменения уровня. Стало быть, более оперативно реагирует на дергание соответствующей ножки.
Вот код. На самом деле нижнюю температуру можно чуток приподнять. В качестве темодатчиков использовал термисторы, мне понравилось, очень широки диапазон дают на АЦП, и дешевые!
void setup()
{
PORTB=0x00; //записать в весь порт В 0
DDRB=0x01; //настроить порт В 0x01: по другому 000001 (1 означает выход, 0 вход)
//Настройка аппаратного ШИМ
TCCR0A=0x83; //настраиваем аппартанный шим на PB0 с частотой 37,5кГц(аппаратный шим только на PB0 и PB1)
TCCR0B=0x83; //на PB1 (второй шим) ничего делать не надо
OCR0A=0x00;
}
void loop()
{
{
int valo = analogRead(A3); //Читаем термистор
valo = map(valo,400,750,40,255); // масштабируем аналог в шим
analogWrite(1,valo); //выводим шим на вентелятор
valo = analogRead(A3); // это выражение может показаться лишним, но без него программа не работает.
if(valo<=400)analogWrite(1,0); //если температура ниже чем 30гр. то шим ноль
if(valo>=750)analogWrite(1,255); //если выше 65 то шим на максимум
}
{
int val = analogRead(A1); //то же самое, только для второго вентелятора.
val = map(val,400,750,40,255);
analogWrite(0,val);
val = analogRead(A1);
if(val<=400)analogWrite(0,0);
if(val>=750)analogWrite(0,255);
}
}
Илья73, напиши нормальный код без PORTB, DDRВ,TCCR0A, TCCR0B и OCR0A, просто напиши как на дуинку, выкинь конденсаторы С3 и С4, чтобы транзисторы работали в ключевом режиме и перекачай ядро потом перед прошивкой тиньки выбери из списка ATtiny13 9.6 MHz BOD 2.7 V и запиши загрузчик потом залей прошивку и скорей всего ты писк уже не услышишь.
Хочу на УАЗик сделать управляемые тинькой дворники с запоминанием. Три режима - медленный, средний и быстрый плюс спецрежим, когда можно задать время между махами и на каком то махе писать писалкой. Главное - это то что время между махами и время между сцыками надо запоминать в епроме. У кого какие идеи будут?
HWman, а на какой частоте это "ядро". Сейчас попробую установить ядро, а тиньку завтра вытащу, она на работе.
Если все получится, будет совсем не плохо иметь такую версию ядра. Можно будет делать выбор если нужен шим неслышный :)
Да он в принципе и не пищит сейчас, вернее пищал только перед самым включеним , вот эти кондеры и гасили этот начальный писк. Сейчас только потрескивает перед запуском один вентелятор уже не помню на каой ноге. В общем вроде и работает, но чувствую что как то не совсем правильно.
Кстати, убил 2 тиньки неверно выставленными фьюзами, что-то мудрил с частотой 128 кГц, будь внимательный.
Перед прошивкой жми записать загрузчик, это выставит нужные фьюзы и рабочая частота тиньки будет 9.6 мГц., если же ничего не хочешь менять то выбирай 0.6 мГц., в таком случае загрузчик шить ненужно.
Кстати, конденсаторы в цепи образуют RC цепочку, тоесть транзистор по идее работает как бы в линейном режиме - дико греется, в ключевом не так.
Вот код. На самом деле нижнюю температуру можно чуток приподнять. В качестве темодатчиков использовал термисторы, мне понравилось, очень широки диапазон дают на АЦП, и дешевые!
void setup()
{
PORTB=0x00; //записать в весь порт В 0
DDRB=0x01; //настроить порт В 0x01: по другому 000001 (1 означает выход, 0 вход)
//Настройка аппаратного ШИМ
TCCR0A=0x83; //настраиваем аппартанный шим на PB0 с частотой 37,5кГц(аппаратный шим только на PB0 и PB1)
TCCR0B=0x83; //на PB1 (второй шим) ничего делать не надо
OCR0A=0x00;
}
void loop()
{
{
int valo = analogRead(A3); //Читаем термистор
valo = map(valo,400,750,40,255); // масштабируем аналог в шим
analogWrite(1,valo); //выводим шим на вентелятор
valo = analogRead(A3); // это выражение может показаться лишним, но без него программа не работает.
if(valo<=400)analogWrite(1,0); //если температура ниже чем 30гр. то шим ноль
if(valo>=750)analogWrite(1,255); //если выше 65 то шим на максимум
}
{
int val = analogRead(A1); //то же самое, только для второго вентелятора.
val = map(val,400,750,40,255);
analogWrite(0,val);
val = analogRead(A1);
if(val<=400)analogWrite(0,0);
if(val>=750)analogWrite(0,255);
}
}
Илья73, напиши нормальный код без PORTB, DDRВ,TCCR0A, TCCR0B и OCR0A, просто напиши как на дуинку, выкинь конденсаторы С3 и С4, чтобы транзисторы работали в ключевом режиме и перекачай ядро потом перед прошивкой тиньки выбери из списка ATtiny13 9.6 MHz BOD 2.7 V и запиши загрузчик потом залей прошивку и скорей всего ты писк уже не услышишь.
видишь даже в ссылке на ядро что ты дал написано 9600000 частота при твоих фьюзах а не 1200000 как у тебя
###############################################################
attiny13.name=ATtiny13 9.6 (internal 9.6 MHz clock) MHz BOD 2.7 V
attiny13.upload.using=arduino:arduinoisp
attiny13.bootloader.low_fuses=0x7A # частота тиньки 9.6 мГц
attiny13.bootloader.high_fuses=0xFB # BOD 2.7 В.
attiny13.upload.maximum_size=1024
attiny13.build.mcu=attiny13
attiny13.build.f_cpu=9600000L
attiny13.build.core=core13
###############################################################
Перезалил ядро, при выборе Attiny13 1 MHz (default) никаких проблем с задержками быть не должно, даже загрузчик шить не обязательно.
Если хочется больше скорости то есть другой режим - ATtiny13 9.6 MHz, BOD 2.7 V с настроенным BODLEVELом на 2.7 В. просто перед прошивкой тинки жмём прошить загрузчик, это выставит нужные фьюзы.
Кстати, я тут делал хоть какую-то регулировку частоты ШИМ, немного переделал функцию из ядра, постарался максимально закоментировать что и как:
Перезалил ядро, при выборе Attiny13 1 MHz (default) никаких проблем с задержками быть не должно, даже загрузчик шить не обязательно.
Если хочется больше скорости то есть другой режим - ATtiny13 9.6 MHz, BOD 2.7 V с настроенным BODLEVELом на 2.7 В. просто перед прошивкой тинки жмём прошить загрузчик, это выставит нужные фьюзы.
Кстати, я тут делал хоть какую-то регулировку частоты ШИМ, немного переделал функцию из ядра, постарался максимально закоментировать что и как:
Вот если кому надо включение освещения по фоторезистору под 13 тиньку.
Код Megakoteyka написал (за что ему огромное спасибо), я толко резисторы прикрутил и чуть по другому гистерезис сделал.Тинька напрямую управляет твердотельным реле ssr25.
#define BUFFER_SIZE 10 // количество показаний датчика для расчета среднего
//#define INTERVAL 100 // интервал опроса датчика
int buffer[BUFFER_SIZE];// буфер с показаниями датчика
long nextTime = 0; // время очередного срабатывания датчика
// пороги гистерезиса
void setup()
{
pinMode(0, OUTPUT);
}
void loop()
{
// получили текущее время
int sensitivity = analogRead(A1);
int INTERVAL = analogRead(A3)*2;
long time = millis();
// если текущее время дошло до времени срабатывания
if(time >= nextTime)
{
// устанавливаем новое время срабатывания
nextTime = time + INTERVAL;
// сдвинули все элементы массива влево,
// при этом потеряли первый элемент
for(int i = 0; i < BUFFER_SIZE - 1; i++)
buffer[i] = buffer[i + 1];
// на место последнего элемента записали показания датчика
buffer[BUFFER_SIZE - 1] = analogRead(A2);
// суммируем показания
int sum = 0;
for(int i = 0; i < BUFFER_SIZE; i++)
sum += buffer[i];
// вычисляем среднее
sum /= BUFFER_SIZE;
if(sum >= sensitivity+20)
{
// выключить свет
digitalWrite(0, LOW);
}
if(sum <= sensitivity-20)
{
// включить свет
digitalWrite(0, HIGH);
}
}
}
Тинька в режиме минимального потребления. Раз в 15 минут должна на вывод (любой) подать меандр с частотой 2 Герца и длительностью 2 секунды.
Задача максимум: Делать то же самое, но при замыкании на ноль одной ноги - выдавать импульсы через 5 минут, другой ноги - через 10 минут, третьей ноги - через 15 минут. Замыкание происходит в отключенном состоянии и невозможно в работе. Т.е. это предустановка.
Понимаю, что для снижения потребления контроллер нужно усыпить и работать из-под вочдога.
Помогите разобраться - никак не пойму с чего копать.
#define ONE_WIRE_BUS 21 // назначаем пин для шины OneWire и датчиков температуры
#define TIME_REFRESH 2000 // Задаем время обновления показаний
#define BUFFER_SIZE 5 // Число итераций для усреднения, чем выше, тем больше инерционность вывода показаний
float tempSensorA; // Переменная температуры с датчика A
float tempABuffer[BUFFER_SIZE]; // Буфер с показаниями датчика A для усреднения
boolean flagAveraging = true; // Указатель - надо ли усреднять выводимые показания
// Подключаем библиотеку Dallas
#include <OneWire.h>
#include <DallasTemperature.h>
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
void setup()
{
Serial.begin(9600);
Serial.println("Setup...");
// Start up the Dallas Temperature library
sensors.begin(); // IC Default 9 bit. If you have troubles consider upping it 12. Ups the delay giving the IC more time to process the temperature measurement
Serial.print("Now Averaging is ");
flagAveraging?Serial.println("TRUE"):Serial.println("FALSE");
Serial.println("... end");
}
void loop()
{
sensorTempRead(); // Опрос датчиков температуры
delay (TIME_REFRESH);
}
// Опрос датчиков температуры
void sensorTempRead()
{
// Serial.println("Reading sensors...");
sensors.requestTemperatures(); // Send the command to get temperatures
tempSensorA = sensors.getTempCByIndex(1); // Читаем второй датчик и записываем в последний элемент массива
Serial.print("TsensorA Current: ");
Serial.print(tempSensorA);
// *** блок усреднения показаний для устранения скачков
if (flagAveraging)
{
// сдвинули все элементы массива влево, при этом потеряли первый элемент
for(byte i = 0; i < BUFFER_SIZE - 1; i++) tempABuffer[i] = tempABuffer[i + 1];
// на место последнего элемента записали текущие показания датчика
tempABuffer[BUFFER_SIZE - 1] = tempSensorA;
// суммируем показания
static float sumA = 0;
for(byte i = 0; i < BUFFER_SIZE; i++) sumA += tempABuffer[i];
// вычисляем среднее
sumA /= BUFFER_SIZE; // Аналогично выражению sum = sum/BUFFER_SIZE
tempSensorA = sumA; // Перезаписываем текущее показание усредненным значением
Serial.print("\t");
Serial.print("Average: ");
Serial.print(tempSensorA);
}
// *** конец блока усреднения
Serial.println();
}
девайс рулит скоростью движка шимом при помощи двух клавиш, плюс сохраняет текущее значение в еепром при отключении питания.
немогу понять, как пофиксить багу - при старте девайса предидущие значения берутся из еепрома, например 20% шима, и при уменьшении кнопкой до нуля, значения прыгают опять до этой цифры.
#include <EEPROM.h>
byte eep,B1,B2=0;
int pwm=0;
unsigned long time,timeB1,timeB2;
void setup()
{
pinMode(0,OUTPUT);
}
void loop()
{
pwm=min(pwm,255); //ограничиваем диапазон pwm от 0 до 255
pwm=max(pwm,0);
time=millis(); //запускаем таймер и очевидные проверки,
eep=EEPROM.read(0); //проверить, запустилисть мы с нуля или нет
if(millis()-time<50&&pwm==0)
{
if(eep<=180) //если у нас шим был больше 180, то сбрасываем в базовые значения
pwm=eep;
}
B1=digitalRead(3); //кнопки
B2=digitalRead(4);
if(B1==HIGH) //определяем нажатие клавиш, 50мс для антидребезга и +1 для счётчика
{
if (millis()-timeB1>50)
{
timeB1=millis();
pwm++;
}
}
if(B2==HIGH) //определяем нажатие клавиш...
{
if (millis()-timeB2>50)
{
timeB2=millis();
pwm--;
}
}
analogWrite(0, pwm); //пишем значение шим
if (digitalRead(2)==LOW) //определяем есть ли напряжение до стабилизатора.
{ //(на тиньке висит толстый кондёр, если с блока
EEPROM.write(0,pwm); //питания пропадёт напруга - пишем текущее значение в еепром)
delay(500); //ну это буду подбирать в зависимости от толщины кондёра
}
}
ну так то я изначально попробовал, но если лишнее выкинуть и оставить только шим и две кнопки, то при достижения максимума переменная сваливается в ноль.
EEPROM.read похоже возвращает значение именно в byte, если ограничение max сделать равным 1 , то всё работает,но мне нужен 0% шим
ячейка EEPROM имеет размерность byte, т.е. ты пытаешься впихнуть 65535 (int) в 255 (byte) :) При этом вполне возможно, что ячейка или обнуляется, или затрагивает соседние. А в следующей строчке тут же читаеся из EEPROM это непредсказуемое значение.
А по коду у тебя и должно при превышении максимума сваливаться в ноль, потому что никаких ограничений не задано.
#include <EEPROM.h>
byte eep,B1,B2=0;
byte pwm=0;
unsigned long time,timeB1,timeB2;
void setup()
{
pinMode(0,OUTPUT);
}
void loop()
{
time=millis(); //запускаем таймер и очевидные проверки,
eep=EEPROM.read(0); //проверить, запустилисть мы с нуля или нет
if(millis()-time<50 && pwm==0 && eep<=180){
pwm=eep;
}
B1=digitalRead(3); //кнопки
B2=digitalRead(4);
if(B1==HIGH) //определяем нажатие клавиш, 50мс для антидребезга и +1 для счётчика
// ++++ кнопка по моему некорректно в некоторых случаях будет обрабатываться
{
if (millis()-timeB1>50)
{
timeB1=millis();
if (pwm < 255){ //++++ это чтобы не переполнялся PWM и не переходил в ноль после 255
pwm++;
}
}
}
if(B2==HIGH) //определяем нажатие клавиш...
{
if (millis()-timeB2>50)
{
timeB2=millis();
if(pwm>0){
pwm--; //++++ чтобы не было скачка с 0 на 255
}
}
}
analogWrite(0, pwm); //пишем значение шим
if (digitalRead(2)==LOW) //определяем есть ли напряжение до стабилизатора.
{ //(на тиньке висит толстый кондёр, если с блока
EEPROM.write(0,pwm); //питания пропадёт напруга - пишем текущее значение в еепром
delay(500); //ну это буду подбирать в зависимости от толщины кондёра
}
}
#include <EEPROM.h>
byte eep,B1,B2=0;
byte pwm=0;
unsigned long time,timeB1,timeB2;
void setup()
{
pinMode(0,OUTPUT);
}
void loop()
{
time=millis(); //запускаем таймер и очевидные проверки,
eep=EEPROM.read(0); //проверить, запустилисть мы с нуля или нет
if(millis()-time<50 && pwm==0 && eep<=180){
pwm=eep;
}
B1=digitalRead(3); //кнопки
B2=digitalRead(4);
if(B1==HIGH) //определяем нажатие клавиш, 50мс для антидребезга и +1 для счётчика
// ++++ кнопка по моему некорректно в некоторых случаях будет обрабатываться
{
if (millis()-timeB1>50)
{
timeB1=millis();
if (pwm < 255){ //++++ это чтобы не переполнялся PWM и не переходил в ноль после 255
pwm++;
}
}
}
if(B2==HIGH) //определяем нажатие клавиш...
{
if (millis()-timeB2>50)
{
timeB2=millis();
if(pwm>0){
pwm--; //++++ чтобы не было скачка с 0 на 255
}
}
}
analogWrite(0, pwm); //пишем значение шим
if (digitalRead(2)==LOW) //определяем есть ли напряжение до стабилизатора.
{ //(на тиньке висит толстый кондёр, если с блока
EEPROM.write(0,pwm); //питания пропадёт напруга - пишем текущее значение в еепром
delay(500); //ну это буду подбирать в зависимости от толщины кондёра
}
}
блин, теория и практика - разные вещи, я так уже пробовал, сейчас попробовал ещё раз, обнаружились грубые ошибки - компилятору не понравились переменные с заглавными буквами типа В1 и В2.
ну это я для сайта хотел код причесать
что происходит на практике без min и max: при зажатой кнопке В1 значение переменной byte pwm растёт до 255 и не останавливается, а сбрасывается до значения переменной eep.
при зажатой кнопке В2 значение уменьшается до 0 и сбрасывается до значения eep.
насчёт ссылочки про работу с кнопками - если бы я её не перелопатил, данный "код" не родился бы.
Я рассписал необходимые действия и вопросы и не надо грубо так отвечать..
У распаянной м/к зашит блинк - даже не знаю как он там оказался - и программа не сбрасывается ресетом ,вывод: ресет залочен..
Корпус напомню - SOP-8 , с ним очень сложно возится - панельки нет
1. По моему сначала моргает бутлодер, а потом начинает работать блинк.
Они все с прошитым блинком приходят.
2. http://www.ebay.com/itm/SOIC8-SOP8-to-DIP8-EZ-Programmer-Adapter-Socket-...
У тинек 13 не куда загрузчик запихивать - там всего 1 кб , та и вообще серия attiny не поддерживает бутлоадер.Хотя есть пути обхода..
Про переходник вкурсе ,но цена его не выгодна.Лучше уж http://www.startcopy.ru/repair/soic.htm - хватит для опытов и перепрограммирования.
Неправда Ваша, есть для тинек бутлоадер. Не дуиновский конечно, но есть.
У тинек нет фьюза BOOTRST ..А то что зашить загрузчик можно я упомянул.
Вот самый известный загрузчик для Attiny 13 -
http://jps.hut2.ru/free_avr_loader_en.html
Сдаюсь ,не видал:) .Но речь была о том,что так таковой поддержки загрузчиков НЕТ..Это все костыли
Ну вот и приближается проверка в железе драйвера фонарика
Код конечно же непокажете?
Вот самый известный загрузчик для Attiny 13 -
http://jps.hut2.ru/free_avr_loader_en.html
Но даст возможность пихать тине по юарту прошивку?
Вот самый известный загрузчик для Attiny 13 -
http://jps.hut2.ru/free_avr_loader_en.html
Но даст возможность пихать тине по юарту прошивку?
Залезте на страничку с окончанием не на "en" а на "ru". Там по русски. Там все написано (внутри зипа).
UPD. Упс. Ридми там на английском.
Ну вот и приближается проверка в железе драйвера фонарика
Код конечно же непокажете?
Почему не покажу. я не скрываю свои коды если не заметили.но еще рано. надо допилить. как все будет нормально работать тогда и выложу коды, видео, фото
А как же народная мудрость и всё такое?
А как же народная мудрость и всё такое?
вы это к чему?
Разобрался с китайскими attiny13 ,которые не шились.Собрал фьюз доктор и установил правельные фьюзы.У одной был залочен ресет и SPI (L:F6 H:F8).
PS. Востановил все 5 штук.Везде были установлены какие попало фьюзы...Проверена через SPI -одна
Использовал Arduino UNO и горсть радиодеталей :)
Кому интересно написал про это тут http://homes-smart.ru/index.php/oborudovanie/arduino/48-vostanavlivaem-fyuzy-na-mikrokontrollerakh-attiny-cherez-arduino .В будущем исправлю и дополню статью..
Разобрался с делителями для ШИМа но рабочую частоту тиньки не могу поднять выше 1.2 мГц, прилагаю лог прошивки:
C:\MC\arduino-1.0.4\hardware\tools\avr\bin\avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu=attiny13 -DF_CPU=1200000 -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=104 -IC:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13 C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\Fade.cpp -o C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\Fade.cpp.o C:\MC\arduino-1.0.4\hardware\tools\avr\bin\avr-gcc -c -g -Os -Wall -ffunction-sections -fdata-sections -mmcu=attiny13 -DF_CPU=1200000 -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=104 -IC:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13 C:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13\pins_arduino.c -o C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\pins_arduino.c.o C:\MC\arduino-1.0.4\hardware\tools\avr\bin\avr-gcc -c -g -Os -Wall -ffunction-sections -fdata-sections -mmcu=attiny13 -DF_CPU=1200000 -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=104 -IC:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13 C:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13\wiring.c -o C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\wiring.c.o In file included from C:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13\/wiring_private.h:31, from C:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13\wiring.c:10: c:/mc/arduino-1.0.4/hardware/tools/avr/lib/gcc/../../avr/include/avr/delay.h:36:2: warning: #warning "This file has been moved to <util/delay.h>." C:\MC\arduino-1.0.4\hardware\tools\avr\bin\avr-gcc -c -g -Os -Wall -ffunction-sections -fdata-sections -mmcu=attiny13 -DF_CPU=1200000 -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=104 -IC:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13 C:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13\wiring_analog.c -o C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\wiring_analog.c.o In file included from C:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13\/wiring_private.h:31, from C:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13\wiring_analog.c:9: c:/mc/arduino-1.0.4/hardware/tools/avr/lib/gcc/../../avr/include/avr/delay.h:36:2: warning: #warning "This file has been moved to <util/delay.h>." C:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13\wiring_analog.c: In function 'analogRead': C:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13\wiring_analog.c:20: warning: suggest parentheses around arithmetic in operand of | C:\MC\arduino-1.0.4\hardware\tools\avr\bin\avr-gcc -c -g -Os -Wall -ffunction-sections -fdata-sections -mmcu=attiny13 -DF_CPU=1200000 -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=104 -IC:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13 C:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13\wiring_digital.c -o C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\wiring_digital.c.o In file included from C:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13\/wiring_private.h:31, from C:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13\wiring_digital.c:9: c:/mc/arduino-1.0.4/hardware/tools/avr/lib/gcc/../../avr/include/avr/delay.h:36:2: warning: #warning "This file has been moved to <util/delay.h>." C:\MC\arduino-1.0.4\hardware\tools\avr\bin\avr-gcc -c -g -Os -Wall -ffunction-sections -fdata-sections -mmcu=attiny13 -DF_CPU=1200000 -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=104 -IC:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13 C:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13\wiring_shift.c -o C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\wiring_shift.c.o In file included from C:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13\/wiring_private.h:31, from C:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13\wiring_shift.c:9: c:/mc/arduino-1.0.4/hardware/tools/avr/lib/gcc/../../avr/include/avr/delay.h:36:2: warning: #warning "This file has been moved to <util/delay.h>." C:\MC\arduino-1.0.4\hardware\tools\avr\bin\avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu=attiny13 -DF_CPU=1200000 -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=104 -IC:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13 C:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13\events.cpp -o C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\events.cpp.o In file included from C:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13\/wiring_private.h:31, from C:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13\events.cpp:9: c:/mc/arduino-1.0.4/hardware/tools/avr/lib/gcc/../../avr/include/avr/delay.h:36:2: warning: #warning "This file has been moved to <util/delay.h>." C:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13\events.cpp: In function 'long unsigned int pulseIn(unsigned char, unsigned char, long unsigned int)': C:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13\events.cpp:13: warning: 'st' may be used uninitialized in this function C:\MC\arduino-1.0.4\hardware\tools\avr\bin\avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu=attiny13 -DF_CPU=1200000 -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=104 -IC:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13 C:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13\main.cpp -o C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\main.cpp.o C:\MC\arduino-1.0.4\hardware\tools\avr\bin\avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu=attiny13 -DF_CPU=1200000 -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=104 -IC:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13 C:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13\Print.cpp -o C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\Print.cpp.o C:\MC\arduino-1.0.4\hardware\tools\avr\bin\avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu=attiny13 -DF_CPU=1200000 -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=104 -IC:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13 C:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13\WMath.cpp -o C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\WMath.cpp.o C:\MC\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\core.a C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\pins_arduino.c.o C:\MC\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\core.a C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\wiring.c.o C:\MC\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\core.a C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\wiring_analog.c.o C:\MC\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\core.a C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\wiring_digital.c.o C:\MC\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\core.a C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\wiring_shift.c.o C:\MC\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\core.a C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\events.cpp.o C:\MC\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\core.a C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\main.cpp.o C:\MC\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\core.a C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\Print.cpp.o C:\MC\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\core.a C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\WMath.cpp.o C:\MC\arduino-1.0.4\hardware\tools\avr\bin\avr-gcc -Os -Wl,--gc-sections -mmcu=attiny13 -o C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\Fade.cpp.elf C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\Fade.cpp.o C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\core.a -LC:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp -lm C:\MC\arduino-1.0.4\hardware\tools\avr\bin\avr-objcopy -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\Fade.cpp.elf C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\Fade.cpp.eep C:\MC\arduino-1.0.4\hardware\tools\avr\bin\avr-objcopy -O ihex -R .eeprom C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\Fade.cpp.elf C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\Fade.cpp.hex Размер скетча в двоичном коде: 490 байт (из 1 024 байт максимум) C:\MC\arduino-1.0.4\hardware/tools/avr/bin/avrdude -CC:\MC\arduino-1.0.4\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -pattiny13 -cstk500v1 -P\\.\COM25 -b19200 -Uflash:w:C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\Fade.cpp.hex:i avrdude: Version 5.11, compiled on Sep 2 2011 at 19:38:36 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2009 Joerg Wunsch System wide configuration file is "C:\MC\arduino-1.0.4\hardware/tools/avr/etc/avrdude.conf" Using Port : \\.\COM25 Using Programmer : stk500v1 Overriding Baud Rate : 19200 avrdude: Send: 0 [30] [20] avrdude: Send: 0 [30] [20] avrdude: Send: 0 [30] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] AVR Part : ATtiny13 Chip Erase delay : 4000 us PAGEL : P00 BS2 : P00 RESET disposition : dedicated RETRY pulse : SCK serial program mode : yes parallel program mode : yes Timeout : 200 StabDelay : 100 CmdexeDelay : 25 SyncLoops : 32 ByteDelay : 0 PollIndex : 3 PollValue : 0x53 Memory Detail : Block Poll Page Polled Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- eeprom 65 5 4 0 no 64 4 0 4000 4000 0xff 0xff Block Poll Page Polled Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- flash 65 6 32 0 yes 1024 32 32 4500 4500 0xff 0xff Block Poll Page Polled Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00 Block Poll Page Polled Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 Block Poll Page Polled Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- calibration 0 0 0 0 no 2 0 0 0 0 0x00 0x00 Block Poll Page Polled Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 Block Poll Page Polled Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 Programmer Type : STK500 Description : Atmel STK500 Version 1.x firmware avrdude: Send: A [41] . [80] [20] avrdude: Recv: . [14] avrdude: Recv: . [02] avrdude: Recv: . [10] avrdude: Send: A [41] . [81] [20] avrdude: Recv: . [14] avrdude: Recv: . [01] avrdude: Recv: . [10] avrdude: Send: A [41] . [82] [20] avrdude: Recv: . [14] avrdude: Recv: . [12] avrdude: Recv: . [10] avrdude: Send: A [41] . [98] [20] avrdude: Recv: . [14] avrdude: Recv: . [00] avrdude: Recv: . [10] Hardware Version: 2 Firmware Version: 1.18 Topcard : Unknown avrdude: Send: A [41] . [84] [20] avrdude: Recv: . [14] avrdude: Recv: . [00] avrdude: Recv: . [10] avrdude: Send: A [41] . [85] [20] avrdude: Recv: . [14] avrdude: Recv: . [00] avrdude: Recv: . [10] avrdude: Send: A [41] . [86] [20] avrdude: Recv: . [14] avrdude: Recv: . [00] avrdude: Recv: . [10] avrdude: Send: A [41] . [87] [20] avrdude: Recv: . [14] avrdude: Recv: . [00] avrdude: Recv: . [10] avrdude: Send: A [41] . [89] [20] avrdude: Recv: . [14] avrdude: Recv: . [00] avrdude: Recv: . [10] Vtarget : 0.0 V Varef : 0.0 V Oscillator : Off SCK period : 0.1 us avrdude: Send: A [41] . [81] [20] avrdude: Recv: . [14] avrdude: Recv: . [01] avrdude: Recv: . [10] avrdude: Send: A [41] . [82] [20] avrdude: Recv: . [14] avrdude: Recv: . [12] avrdude: Recv: . [10] avrdude: Send: B [42] . [14] . [00] . [00] . [01] . [01] . [01] . [01] . [02] . [ff] . [ff] . [ff] . [ff] . [00] [20] . [00] @ [40] . [00] . [00] . [04] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny13 avrdude: Send: P [50] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: AVR device initialized and ready to accept instructions Reading | avrdude: Send: V [56] 0 [30] . [00] . [00] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [1e] avrdude: Recv: . [10] avrdude: Send: V [56] 0 [30] . [00] . [01] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [90] avrdude: Recv: . [10] ################avrdude: Send: V [56] 0 [30] . [00] . [02] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [07] avrdude: Recv: . [10] ################################## | 100% 0.06s avrdude: Device signature = 0x1e9007 avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed To disable this feature, specify the -D option. avrdude: Send: V [56] . [a0] . [00] < [3c] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [ff] avrdude: Recv: . [10] avrdude: Send: V [56] . [a0] . [00] = [3d] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [ff] avrdude: Recv: . [10] avrdude: Send: V [56] . [a0] . [00] > [3e] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [ff] avrdude: Recv: . [10] avrdude: Send: V [56] . [a0] . [00] ? [3f] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [ff] avrdude: Recv: . [10] avrdude: erasing chip avrdude: Send: V [56] . [ac] . [80] . [00] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [00] avrdude: Recv: . [10] avrdude: Send: A [41] . [81] [20] avrdude: Recv: . [14] avrdude: Recv: . [01] avrdude: Recv: . [10] avrdude: Send: A [41] . [82] [20] avrdude: Recv: . [14] avrdude: Recv: . [12] avrdude: Recv: . [10] avrdude: Send: B [42] . [14] . [00] . [00] . [01] . [01] . [01] . [01] . [02] . [ff] . [ff] . [ff] . [ff] . [00] [20] . [00] @ [40] . [00] . [00] . [04] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny13 avrdude: Send: P [50] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: reading input file "C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\Fade.cpp.hex" avrdude: writing flash (490 bytes): Writing | avrdude: Send: U [55] . [00] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: d [64] . [00] [20] F [46] . [09] . [c0] ! [21] . [c0] [20] . [c0] I [49] . [c0] . [1e] . [c0] . [1d] . [c0] . [1c] . [c0] . [1b] . [c0] . [1a] . [c0] . [19] . [c0] . [11] $ [24] . [1f] . [be] . [cf] . [e9] . [cd] . [bf] . [10] . [e0] . [a0] . [e6] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] ###avrdude: Send: U [55] . [10] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: d [64] . [00] [20] F [46] . [b0] . [e0] . [e8] . [ee] . [f1] . [e0] . [02] . [c0] . [05] . [90] . [0d] . [92] . [a2] 6 [36] . [b1] . [07] . [d9] . [f7] . [10] . [e0] . [a2] . [e6] . [b0] . [e0] . [01] . [c0] . [1d] . [92] . [aa] 6 [36] . [b1] . [07] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] ###avrdude: Send: U [55] [20] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: d [64] . [00] [20] F [46] . [e1] . [f7] . [cc] . [d0] . [cf] . [c0] . [dc] . [cf] . [80] . [91] b [62] . [00] ` [60] . [91] d [64] . [00] b [62] . [d0] [20] . [91] ` [60] . [00] 0 [30] . [91] a [61] . [00] . [80] . [91] d [64] . [00] . [90] . [91] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] ###avrdude: Send: U [55] 0 [30] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: d [64] . [00] [20] F [46] e [65] . [00] . [82] . [0f] . [93] . [1f] . [90] . [93] e [65] . [00] . [80] . [93] d [64] . [00] . [00] . [97] . [19] . [f0] . [8f] ? [3f] . [91] . [05] A [41] . [f4] . [88] ' [27] . [99] ' [27] . [82] . [1b] . [93] . [0b] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] ####avrdude: Send: U [55] @ [40] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: d [64] . [00] [20] F [46] . [90] . [93] a [61] . [00] . [80] . [93] ` [60] . [00] . [8e] . [e1] . [90] . [e0] + [2b] . [d0] . [08] . [95] . [80] . [91] b [62] . [00] a [61] . [e0] ` [60] . [d0] . [08] . [95] . [1f] . [92] . [0f] . [92] . [0f] . [b6] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] ###avrdude: Send: U [55] P [50] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: d [64] . [00] [20] F [46] . [0f] . [92] . [11] $ [24] . [8f] . [93] . [9f] . [93] . [af] . [93] . [bf] . [93] . [80] . [91] f [66] . [00] . [90] . [91] g [67] . [00] . [a0] . [91] h [68] . [00] . [b0] . [91] i [69] . [00] . [01] . [96] . [a1] . [1d] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] ###avrdude: Send: U [55] ` [60] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: d [64] . [00] [20] F [46] . [b1] . [1d] . [80] . [93] f [66] . [00] . [90] . [93] g [67] . [00] . [a0] . [93] h [68] . [00] . [b0] . [93] i [69] . [00] . [bf] . [91] . [af] . [91] . [9f] . [91] . [8f] . [91] . [0f] . [90] . [0f] . [be] . [0f] . [90] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] ###avrdude: Send: U [55] p [70] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: d [64] . [00] [20] F [46] . [1f] . [90] . [18] . [95] , [2c] . [e2] 1 [31] . [e0] . [04] . [c0] . [f9] . [01] 1 [31] . [97] . [f1] . [f7] . [01] . [97] . [00] . [97] . [d1] . [f7] . [08] . [95] . [83] . [b7] . [81] ` [60] . [83] . [bf] . [8f] . [b5] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] ####avrdude: Send: U [55] . [80] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: d [64] . [00] [20] F [46] . [83] ` [60] . [8f] . [bd] . [89] . [b7] . [82] ` [60] . [89] . [bf] . [12] . [be] x [78] . [94] . [86] . [b1] . [82] h [68] . [86] . [b9] . [08] . [95] . [0f] . [93] . [1f] . [93] . [18] / [2f] . [06] / [2f] a [61] . [e0] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] ###avrdude: Send: U [55] . [90] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: d [64] . [00] [20] F [46] . [1b] . [d0] . [00] # [23] . [19] . [f4] . [81] / [2f] ` [60] . [e0] . [04] . [c0] . [0f] ? [3f] ! [21] . [f4] . [81] / [2f] a [61] . [e0] - [2d] . [d0] . [0d] . [c0] . [11] 0 [30] ) [29] . [f4] . [8f] . [b5] . [80] b [62] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] ###avrdude: Send: U [55] . [a0] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: d [64] . [00] [20] F [46] . [8f] . [bd] . [09] . [bd] . [06] . [c0] . [11] # [23] ! [21] . [f4] . [8f] . [b5] . [80] h [68] . [8f] . [bd] . [06] . [bf] . [1f] . [91] . [0f] . [91] . [08] . [95] 8 [38] / [2f] . [86] 0 [30] . [c0] . [f4] f [66] # [23] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] ###avrdude: Send: U [55] . [b0] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: d [64] . [00] [20] F [46] a [61] . [f4] ' [27] . [b3] . [81] . [e0] . [90] . [e0] . [02] . [c0] . [88] . [0f] . [99] . [1f] : [3a] . [95] . [e2] . [f7] . [80] . [95] . [82] # [23] . [87] . [bb] . [08] . [95] ' [27] . [b3] . [81] . [e0] . [90] . [e0] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] ####avrdude: Send: U [55] . [c0] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: d [64] . [00] [20] F [46] . [02] . [c0] . [88] . [0f] . [99] . [1f] : [3a] . [95] . [e2] . [f7] ( [28] + [2b] ' [27] . [bb] . [08] . [95] 8 [38] / [2f] . [86] 0 [30] . [10] . [f5] . [82] 0 [30] @ [40] . [f4] . [88] # [23] . [19] . [f4] . [8f] . [b5] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] ###avrdude: Send: U [55] . [d0] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: d [64] . [00] [20] F [46] . [8f] w [77] . [02] . [c0] . [8f] . [b5] . [8f] } [7d] . [8f] . [bd] f [66] # [23] a [61] . [f4] ( [28] . [b3] . [81] . [e0] . [90] . [e0] . [02] . [c0] . [88] . [0f] . [99] . [1f] : [3a] . [95] . [e2] . [f7] . [80] . [95] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] ###avrdude: Send: U [55] . [e0] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: d [64] . [00] [20] F [46] . [82] # [23] . [88] . [bb] . [08] . [95] ( [28] . [b3] . [81] . [e0] . [90] . [e0] . [02] . [c0] . [88] . [0f] . [99] . [1f] : [3a] . [95] . [e2] . [f7] ( [28] + [2b] ( [28] . [bb] . [08] . [95] . [8d] . [df] X [58] . [df] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] ###avrdude: Send: U [55] . [f0] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: d [64] . [00] . [0a] F [46] 3 [33] . [df] . [fe] . [cf] . [f8] . [94] . [ff] . [cf] . [01] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] ## | 100% 1.32s avrdude: 490 bytes of flash written avrdude: verifying flash memory against C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\Fade.cpp.hex: avrdude: load data flash data from input file C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\Fade.cpp.hex: avrdude: input file C:\Users\836D~1\AppData\Local\Temp\build9103030239233877441.tmp\Fade.cpp.hex contains 490 bytes avrdude: reading on-chip flash data: Reading | avrdude: Send: U [55] . [00] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: t [74] . [00] [20] F [46] [20] avrdude: Recv: . [14] avrdude: Recv: . [09] . [c0] ! [21] . [c0] [20] . [c0] I [49] . [c0] . [1e] . [c0] . [1d] . [c0] . [1c] . [c0] . [1b] . [c0] . [1a] . [c0] . [19] . [c0] . [11] $ [24] . [1f] . [be] . [cf] . [e9] . [cd] . [bf] . [10] . [e0] . [a0] . [e6] avrdude: Recv: . [10] ###avrdude: Send: U [55] . [10] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: t [74] . [00] [20] F [46] [20] avrdude: Recv: . [14] avrdude: Recv: . [b0] . [e0] . [e8] . [ee] . [f1] . [e0] . [02] . [c0] . [05] . [90] . [0d] . [92] . [a2] 6 [36] . [b1] . [07] . [d9] . [f7] . [10] . [e0] . [a2] . [e6] . [b0] . [e0] . [01] . [c0] . [1d] . [92] . [aa] 6 [36] . [b1] . [07] avrdude: Recv: . [10] ###avrdude: Send: U [55] [20] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: t [74] . [00] [20] F [46] [20] avrdude: Recv: . [14] avrdude: Recv: . [e1] . [f7] . [cc] . [d0] . [cf] . [c0] . [dc] . [cf] . [80] . [91] b [62] . [00] ` [60] . [91] d [64] . [00] b [62] . [d0] [20] . [91] ` [60] . [00] 0 [30] . [91] a [61] . [00] . [80] . [91] d [64] . [00] . [90] . [91] avrdude: Recv: . [10] ###avrdude: Send: U [55] 0 [30] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: t [74] . [00] [20] F [46] [20] avrdude: Recv: . [14] avrdude: Recv: e [65] . [00] . [82] . [0f] . [93] . [1f] . [90] . [93] e [65] . [00] . [80] . [93] d [64] . [00] . [00] . [97] . [19] . [f0] . [8f] ? [3f] . [91] . [05] A [41] . [f4] . [88] ' [27] . [99] ' [27] . [82] . [1b] . [93] . [0b] avrdude: Recv: . [10] ####avrdude: Send: U [55] @ [40] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: t [74] . [00] [20] F [46] [20] avrdude: Recv: . [14] avrdude: Recv: . [90] . [93] a [61] . [00] . [80] . [93] ` [60] . [00] . [8e] . [e1] . [90] . [e0] + [2b] . [d0] . [08] . [95] . [80] . [91] b [62] . [00] a [61] . [e0] ` [60] . [d0] . [08] . [95] . [1f] . [92] . [0f] . [92] . [0f] . [b6] avrdude: Recv: . [10] ###avrdude: Send: U [55] P [50] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: t [74] . [00] [20] F [46] [20] avrdude: Recv: . [14] avrdude: Recv: . [0f] . [92] . [11] $ [24] . [8f] . [93] . [9f] . [93] . [af] . [93] . [bf] . [93] . [80] . [91] f [66] . [00] . [90] . [91] g [67] . [00] . [a0] . [91] h [68] . [00] . [b0] . [91] i [69] . [00] . [01] . [96] . [a1] . [1d] avrdude: Recv: . [10] ###avrdude: Send: U [55] ` [60] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: t [74] . [00] [20] F [46] [20] avrdude: Recv: . [14] avrdude: Recv: . [b1] . [1d] . [80] . [93] f [66] . [00] . [90] . [93] g [67] . [00] . [a0] . [93] h [68] . [00] . [b0] . [93] i [69] . [00] . [bf] . [91] . [af] . [91] . [9f] . [91] . [8f] . [91] . [0f] . [90] . [0f] . [be] . [0f] . [90] avrdude: Recv: . [10] ###avrdude: Send: U [55] p [70] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: t [74] . [00] [20] F [46] [20] avrdude: Recv: . [14] avrdude: Recv: . [1f] . [90] . [18] . [95] , [2c] . [e2] 1 [31] . [e0] . [04] . [c0] . [f9] . [01] 1 [31] . [97] . [f1] . [f7] . [01] . [97] . [00] . [97] . [d1] . [f7] . [08] . [95] . [83] . [b7] . [81] ` [60] . [83] . [bf] . [8f] . [b5] avrdude: Recv: . [10] ####avrdude: Send: U [55] . [80] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: t [74] . [00] [20] F [46] [20] avrdude: Recv: . [14] avrdude: Recv: . [83] ` [60] . [8f] . [bd] . [89] . [b7] . [82] ` [60] . [89] . [bf] . [12] . [be] x [78] . [94] . [86] . [b1] . [82] h [68] . [86] . [b9] . [08] . [95] . [0f] . [93] . [1f] . [93] . [18] / [2f] . [06] / [2f] a [61] . [e0] avrdude: Recv: . [10] ###avrdude: Send: U [55] . [90] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: t [74] . [00] [20] F [46] [20] avrdude: Recv: . [14] avrdude: Recv: . [1b] . [d0] . [00] # [23] . [19] . [f4] . [81] / [2f] ` [60] . [e0] . [04] . [c0] . [0f] ? [3f] ! [21] . [f4] . [81] / [2f] a [61] . [e0] - [2d] . [d0] . [0d] . [c0] . [11] 0 [30] ) [29] . [f4] . [8f] . [b5] . [80] b [62] avrdude: Recv: . [10] ###avrdude: Send: U [55] . [a0] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: t [74] . [00] [20] F [46] [20] avrdude: Recv: . [14] avrdude: Recv: . [8f] . [bd] . [09] . [bd] . [06] . [c0] . [11] # [23] ! [21] . [f4] . [8f] . [b5] . [80] h [68] . [8f] . [bd] . [06] . [bf] . [1f] . [91] . [0f] . [91] . [08] . [95] 8 [38] / [2f] . [86] 0 [30] . [c0] . [f4] f [66] # [23] avrdude: Recv: . [10] ###avrdude: Send: U [55] . [b0] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: t [74] . [00] [20] F [46] [20] avrdude: Recv: . [14] avrdude: Recv: a [61] . [f4] ' [27] . [b3] . [81] . [e0] . [90] . [e0] . [02] . [c0] . [88] . [0f] . [99] . [1f] : [3a] . [95] . [e2] . [f7] . [80] . [95] . [82] # [23] . [87] . [bb] . [08] . [95] ' [27] . [b3] . [81] . [e0] . [90] . [e0] avrdude: Recv: . [10] ####avrdude: Send: U [55] . [c0] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: t [74] . [00] [20] F [46] [20] avrdude: Recv: . [14] avrdude: Recv: . [02] . [c0] . [88] . [0f] . [99] . [1f] : [3a] . [95] . [e2] . [f7] ( [28] + [2b] ' [27] . [bb] . [08] . [95] 8 [38] / [2f] . [86] 0 [30] . [10] . [f5] . [82] 0 [30] @ [40] . [f4] . [88] # [23] . [19] . [f4] . [8f] . [b5] avrdude: Recv: . [10] ###avrdude: Send: U [55] . [d0] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: t [74] . [00] [20] F [46] [20] avrdude: Recv: . [14] avrdude: Recv: . [8f] w [77] . [02] . [c0] . [8f] . [b5] . [8f] } [7d] . [8f] . [bd] f [66] # [23] a [61] . [f4] ( [28] . [b3] . [81] . [e0] . [90] . [e0] . [02] . [c0] . [88] . [0f] . [99] . [1f] : [3a] . [95] . [e2] . [f7] . [80] . [95] avrdude: Recv: . [10] ###avrdude: Send: U [55] . [e0] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: t [74] . [00] [20] F [46] [20] avrdude: Recv: . [14] avrdude: Recv: . [82] # [23] . [88] . [bb] . [08] . [95] ( [28] . [b3] . [81] . [e0] . [90] . [e0] . [02] . [c0] . [88] . [0f] . [99] . [1f] : [3a] . [95] . [e2] . [f7] ( [28] + [2b] ( [28] . [bb] . [08] . [95] . [8d] . [df] X [58] . [df] avrdude: Recv: . [10] ###avrdude: Send: U [55] . [f0] . [00] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude: Send: t [74] . [00] . [0a] F [46] [20] avrdude: Recv: . [14] avrdude: Recv: 3 [33] . [df] . [fe] . [cf] . [f8] . [94] . [ff] . [cf] . [01] . [00] avrdude: Recv: . [10] ## | 100% 0.78s avrdude: verifying ... avrdude: 490 bytes of flash verified avrdude: Send: Q [51] [20] avrdude: Recv: . [14] avrdude: Recv: . [10] avrdude done. Thank you.PS: с учетом важного дополнения от step962:
http://arduino.ru/forum/apparatnye-voprosy/otlichie-int-i-pcint#comment-...
PCINTx-прерывания обслуживают сразу целый порт, поэтому в обработчике необходимо смотреть на записанное и текущее состояние выводов и выискивать, какой же из пинов изменил свое состояние (и в какую сторону). Ну а потом уже решать, реагировать ли на это изменение или проигнорировать.
Вот, например, у ATMega328 есть три соответствующих вектора обработки прерываний PCINT: 4-й (PCINT0_vect), 5-й (PCINT0_vec1) и 6-й (PCINT2_vect). 4-й вектор обслуживает ноги PCINT7...0 (порт B), 5-й - PCINT8...14 (порт C - в нем только 7 выводов), 6-й - PCINT16...23 (порт D).
INTx слушает один-единственный вывод и может настраиваться на тип происходящего на нем изменения уровня. Стало быть, более оперативно реагирует на дергание соответствующей ножки.
Вот код. На самом деле нижнюю температуру можно чуток приподнять. В качестве темодатчиков использовал термисторы, мне понравилось, очень широки диапазон дают на АЦП, и дешевые!
Зарядное такое
void setup() { PORTB=0x00; //записать в весь порт В 0 DDRB=0x01; //настроить порт В 0x01: по другому 000001 (1 означает выход, 0 вход) //Настройка аппаратного ШИМ TCCR0A=0x83; //настраиваем аппартанный шим на PB0 с частотой 37,5кГц(аппаратный шим только на PB0 и PB1) TCCR0B=0x83; //на PB1 (второй шим) ничего делать не надо OCR0A=0x00; } void loop() { { int valo = analogRead(A3); //Читаем термистор valo = map(valo,400,750,40,255); // масштабируем аналог в шим analogWrite(1,valo); //выводим шим на вентелятор valo = analogRead(A3); // это выражение может показаться лишним, но без него программа не работает. if(valo<=400)analogWrite(1,0); //если температура ниже чем 30гр. то шим ноль if(valo>=750)analogWrite(1,255); //если выше 65 то шим на максимум } { int val = analogRead(A1); //то же самое, только для второго вентелятора. val = map(val,400,750,40,255); analogWrite(0,val); val = analogRead(A1); if(val<=400)analogWrite(0,0); if(val>=750)analogWrite(0,255); } }Илья73, напиши нормальный код без PORTB, DDRВ, TCCR0A, TCCR0B и OCR0A, просто напиши как на дуинку, выкинь конденсаторы С3 и С4, чтобы транзисторы работали в ключевом режиме и перекачай ядро потом перед прошивкой тиньки выбери из списка ATtiny13 9.6 MHz BOD 2.7 V и запиши загрузчик потом залей прошивку и скорей всего ты писк уже не услышишь.
Хочу на УАЗик сделать управляемые тинькой дворники с запоминанием. Три режима - медленный, средний и быстрый плюс спецрежим, когда можно задать время между махами и на каком то махе писать писалкой. Главное - это то что время между махами и время между сцыками надо запоминать в епроме. У кого какие идеи будут?
HWman, а на какой частоте это "ядро". Сейчас попробую установить ядро, а тиньку завтра вытащу, она на работе.
Если все получится, будет совсем не плохо иметь такую версию ядра. Можно будет делать выбор если нужен шим неслышный :)
Да он в принципе и не пищит сейчас, вернее пищал только перед самым включеним , вот эти кондеры и гасили этот начальный писк. Сейчас только потрескивает перед запуском один вентелятор уже не помню на каой ноге. В общем вроде и работает, но чувствую что как то не совсем правильно.
Кстати, убил 2 тиньки неверно выставленными фьюзами, что-то мудрил с частотой 128 кГц, будь внимательный.
Перед прошивкой жми записать загрузчик, это выставит нужные фьюзы и рабочая частота тиньки будет 9.6 мГц., если же ничего не хочешь менять то выбирай 0.6 мГц., в таком случае загрузчик шить ненужно.
Кстати, конденсаторы в цепи образуют RC цепочку, тоесть транзистор по идее работает как бы в линейном режиме - дико греется, в ключевом не так.
Если ни чего не менять, т.е выбрать 0.6 мГц то и тинька будет работать на 0.6 мГц? С delay проблем не будет?
Сейчас перезаписал в Arduino 1.0.5
Вот код. На самом деле нижнюю температуру можно чуток приподнять. В качестве темодатчиков использовал термисторы, мне понравилось, очень широки диапазон дают на АЦП, и дешевые!
Зарядное такое
void setup() { PORTB=0x00; //записать в весь порт В 0 DDRB=0x01; //настроить порт В 0x01: по другому 000001 (1 означает выход, 0 вход) //Настройка аппаратного ШИМ TCCR0A=0x83; //настраиваем аппартанный шим на PB0 с частотой 37,5кГц(аппаратный шим только на PB0 и PB1) TCCR0B=0x83; //на PB1 (второй шим) ничего делать не надо OCR0A=0x00; } void loop() { { int valo = analogRead(A3); //Читаем термистор valo = map(valo,400,750,40,255); // масштабируем аналог в шим analogWrite(1,valo); //выводим шим на вентелятор valo = analogRead(A3); // это выражение может показаться лишним, но без него программа не работает. if(valo<=400)analogWrite(1,0); //если температура ниже чем 30гр. то шим ноль if(valo>=750)analogWrite(1,255); //если выше 65 то шим на максимум } { int val = analogRead(A1); //то же самое, только для второго вентелятора. val = map(val,400,750,40,255); analogWrite(0,val); val = analogRead(A1); if(val<=400)analogWrite(0,0); if(val>=750)analogWrite(0,255); } }Илья73, напиши нормальный код без PORTB, DDRВ, TCCR0A, TCCR0B и OCR0A, просто напиши как на дуинку, выкинь конденсаторы С3 и С4, чтобы транзисторы работали в ключевом режиме и перекачай ядро потом перед прошивкой тиньки выбери из списка ATtiny13 9.6 MHz BOD 2.7 V и запиши загрузчик потом залей прошивку и скорей всего ты писк уже не услышишь.
видишь даже в ссылке на ядро что ты дал написано 9600000 частота при твоих фьюзах а не 1200000 как у тебя
видишь даже в ссылке на ядро что ты дал написано 9600000 частота при твоих фьюзах а не 1200000 как у тебя
Так я поправил и перезалил, раньше было 1200000 причём без буквы "L"
Если ни чего не менять, т.е выбрать 0.6 мГц то и тинька будет работать на 0.6 мГц? С delay проблем не будет?
Сейчас перезаписал в Arduino 1.0.5
Так как все свои тиньки поубивал то проверить что там с delay нету возможности.
Кстати, приставка BOD 2.7 V означает что тинька будет питаться до 2.7 В дальше будет перезагружатся пока напряжение не станет выше 2.7В .
Так как все свои тиньки поубивал
Не поубивал,а просто заблокировал :) востановить как оказалось ничего сложного.
ага. давай уже восстанавливай и исправляй boards
ага. давай уже восстанавливай и исправляй boards
Под рукой кроме дуинки ничего нет, так получится восстановить?
А что с boards.txt не так?
Кстати, тиня залочилась когда я выбрал данную опцию:
Перезалил ядро, при выборе Attiny13 1 MHz (default) никаких проблем с задержками быть не должно, даже загрузчик шить не обязательно.
Если хочется больше скорости то есть другой режим - ATtiny13 9.6 MHz, BOD 2.7 V с настроенным BODLEVELом на 2.7 В. просто перед прошивкой тинки жмём прошить загрузчик, это выставит нужные фьюзы.
Кстати, я тут делал хоть какую-то регулировку частоты ШИМ, немного переделал функцию из ядра, постарался максимально закоментировать что и как:
void analogWrite1(uint8_t pin, uint8_t val){ pinMode(pin, OUTPUT); //For compatibility - STUPID! if(val==0){ //Handle Off condition digitalWrite(pin,0); } else if(val == 255){ //Handle On condition digitalWrite(pin, HIGH); } else { //Otherwise setup the appropriate timer compare if(pin == 1){ TCCR0A = 0x83; // рулим ШИМом TCCR0B = 0x04; // делитель N = 256 OCR0B = val; } if(pin == 0){ TCCR0A = 0x83; TCCR0B = 0x04; // N = 256 /* TCCR0B = 0x05 (N = 1024), 9600000(9.6 МГц) / 1024 / 256 = 36.6 Гц TCCR0B = 0x04; (N = 256), 9600000 / 256 / 256 = 146 Гц TCCR0B = 0x03 (N = 64), 9600000 / 64 / 256 = 586 Гц TCCR0B = 0x02 (N = 8), 9600000 / 8 / 256 = 4688 Гц TCCR0B = 0x01 (N = 1), 9600000 / 1 / 256 = 37500 Гц */ OCR0A = val; } } }И теперь я в своей велофаре могу убавить частоту до 70 Гц, что на глаз не заметно, но, по моему мнению немного уменьшит энергопотребление.
сделал плату для драйвера. теперь осталось отладить программу
А ты как будешь рулить яркостью? Подавать ШИМ на драйвер?
А ты как будешь рулить яркостью? Подавать ШИМ на драйвер?
да шим, но на транзистор, а управлять яркостью кнопкой (2 контакта слева)
кнопка нужна просто для переключения тока, который драйвер будет стибилизировать при изменении напряжения питания
планирую только 2 режима: 50% яркости (может немного меньше или больше) и 100%. больше мне не требуется
частота шим в районе 100-150: на глаз незаметно, но меньше нагружает выход тиньки
частота тиньки скорее всего 128 кгц
пока так
Перезалил ядро, при выборе Attiny13 1 MHz (default) никаких проблем с задержками быть не должно, даже загрузчик шить не обязательно.
Если хочется больше скорости то есть другой режим - ATtiny13 9.6 MHz, BOD 2.7 V с настроенным BODLEVELом на 2.7 В. просто перед прошивкой тинки жмём прошить загрузчик, это выставит нужные фьюзы.
Кстати, я тут делал хоть какую-то регулировку частоты ШИМ, немного переделал функцию из ядра, постарался максимально закоментировать что и как:
void analogWrite1(uint8_t pin, uint8_t val){ pinMode(pin, OUTPUT); //For compatibility - STUPID! if(val==0){ //Handle Off condition digitalWrite(pin,0); } else if(val == 255){ //Handle On condition digitalWrite(pin, HIGH); } else { //Otherwise setup the appropriate timer compare if(pin == 1){ TCCR0A = 0x83; // рулим ШИМом TCCR0B = 0x04; // делитель N = 256 OCR0B = val; } if(pin == 0){ TCCR0A = 0x83; TCCR0B = 0x04; // N = 256 /* TCCR0B = 0x05 (N = 1024), 9600000(9.6 МГц) / 1024 / 256 = 36.6 Гц TCCR0B = 0x04; (N = 256), 9600000 / 256 / 256 = 146 Гц TCCR0B = 0x03 (N = 64), 9600000 / 64 / 256 = 586 Гц TCCR0B = 0x02 (N = 8), 9600000 / 8 / 256 = 4688 Гц TCCR0B = 0x01 (N = 1), 9600000 / 1 / 256 = 37500 Гц */ OCR0A = val; } } }И теперь я в своей велофаре могу убавить частоту до 70 Гц, что на глаз не заметно, но, по моему мнению немного уменьшит энергопотребление.
у меня тоже к вас вопрос в том что вы выкладывали
файл boards
вроде как частота должна быть не 1мгц а 1.2 мгц
и здесь должно быть соответственно 1200000
поправьте если ошибаюсь
Всё там нормально, при 1200000 задержка в 1000 где-то реально на 1200-1300, можеш проверить.
Всё там нормально, при 1200000 задержка в 1000 где-то реально на 1200-1300, можеш проверить.
странно это. частота по фьюзам стоит 9.6. делитель на 8 получается 1.2 мгц. откуда 1мгц не понял. ладно вечером постараюсь проверить
очень большое фото в тему
кристалл тини13
http://s.zeptobars.ru/atmel-attiny13a-HD.jpg
внимание размер более 8000пх
Вот если кому надо включение освещения по фоторезистору под 13 тиньку.
Код Megakoteyka написал (за что ему огромное спасибо), я толко резисторы прикрутил и чуть по другому гистерезис сделал.Тинька напрямую управляет твердотельным реле ssr25.
#define BUFFER_SIZE 10 // количество показаний датчика для расчета среднего //#define INTERVAL 100 // интервал опроса датчика int buffer[BUFFER_SIZE];// буфер с показаниями датчика long nextTime = 0; // время очередного срабатывания датчика // пороги гистерезиса void setup() { pinMode(0, OUTPUT); } void loop() { // получили текущее время int sensitivity = analogRead(A1); int INTERVAL = analogRead(A3)*2; long time = millis(); // если текущее время дошло до времени срабатывания if(time >= nextTime) { // устанавливаем новое время срабатывания nextTime = time + INTERVAL; // сдвинули все элементы массива влево, // при этом потеряли первый элемент for(int i = 0; i < BUFFER_SIZE - 1; i++) buffer[i] = buffer[i + 1]; // на место последнего элемента записали показания датчика buffer[BUFFER_SIZE - 1] = analogRead(A2); // суммируем показания int sum = 0; for(int i = 0; i < BUFFER_SIZE; i++) sum += buffer[i]; // вычисляем среднее sum /= BUFFER_SIZE; if(sum >= sensitivity+20) { // выключить свет digitalWrite(0, LOW); } if(sum <= sensitivity-20) { // включить свет digitalWrite(0, HIGH); } } }Новая статья на ЕЕ, возможно кому то будет интересно:
8 канальный ШИМ на attiny13, (с использованием 74HC595)
Ребята помогите разобраться.
Задача минимум:
Тинька в режиме минимального потребления. Раз в 15 минут должна на вывод (любой) подать меандр с частотой 2 Герца и длительностью 2 секунды.
Задача максимум: Делать то же самое, но при замыкании на ноль одной ноги - выдавать импульсы через 5 минут, другой ноги - через 10 минут, третьей ноги - через 15 минут. Замыкание происходит в отключенном состоянии и невозможно в работе. Т.е. это предустановка.
Понимаю, что для снижения потребления контроллер нужно усыпить и работать из-под вочдога.
Помогите разобраться - никак не пойму с чего копать.
Вот тут есть парочка интересных вещей.
Вот если кому надо...
Как-то неправильно усреднение работает - при неизменном текущем значении усредненное отображается на пару градусов выше.
Размер буфера 5 измерений, т.е. уже за 10 измерений текущее и усредненное по идее должны совпадать, а они отличаются.
Вот вывод показаний:
Вот код:
#define ONE_WIRE_BUS 21 // назначаем пин для шины OneWire и датчиков температуры #define TIME_REFRESH 2000 // Задаем время обновления показаний #define BUFFER_SIZE 5 // Число итераций для усреднения, чем выше, тем больше инерционность вывода показаний float tempSensorA; // Переменная температуры с датчика A float tempABuffer[BUFFER_SIZE]; // Буфер с показаниями датчика A для усреднения boolean flagAveraging = true; // Указатель - надо ли усреднять выводимые показания // Подключаем библиотеку Dallas #include <OneWire.h> #include <DallasTemperature.h> // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature. DallasTemperature sensors(&oneWire); void setup() { Serial.begin(9600); Serial.println("Setup..."); // Start up the Dallas Temperature library sensors.begin(); // IC Default 9 bit. If you have troubles consider upping it 12. Ups the delay giving the IC more time to process the temperature measurement Serial.print("Now Averaging is "); flagAveraging?Serial.println("TRUE"):Serial.println("FALSE"); Serial.println("... end"); } void loop() { sensorTempRead(); // Опрос датчиков температуры delay (TIME_REFRESH); } // Опрос датчиков температуры void sensorTempRead() { // Serial.println("Reading sensors..."); sensors.requestTemperatures(); // Send the command to get temperatures tempSensorA = sensors.getTempCByIndex(1); // Читаем второй датчик и записываем в последний элемент массива Serial.print("TsensorA Current: "); Serial.print(tempSensorA); // *** блок усреднения показаний для устранения скачков if (flagAveraging) { // сдвинули все элементы массива влево, при этом потеряли первый элемент for(byte i = 0; i < BUFFER_SIZE - 1; i++) tempABuffer[i] = tempABuffer[i + 1]; // на место последнего элемента записали текущие показания датчика tempABuffer[BUFFER_SIZE - 1] = tempSensorA; // суммируем показания static float sumA = 0; for(byte i = 0; i < BUFFER_SIZE; i++) sumA += tempABuffer[i]; // вычисляем среднее sumA /= BUFFER_SIZE; // Аналогично выражению sum = sum/BUFFER_SIZE tempSensorA = sumA; // Перезаписываем текущее показание усредненным значением Serial.print("\t"); Serial.print("Average: "); Serial.print(tempSensorA); } // *** конец блока усреднения Serial.println(); }косяк найден :)
Вместо
Надо
Похоже что на вашей ATtiny13 памяти вагон и ёё некуда девать, и RAM и FLASH
http://arduino.ru/forum/proekty/dosvetka-v-teplitse#comment-49692
http://arduino.ru/forum/proekty/dosvetka-v-teplitse#comment-49917
Hi уважаемый All
стандартная проблема - новичок.
девайс рулит скоростью движка шимом при помощи двух клавиш, плюс сохраняет текущее значение в еепром при отключении питания.
немогу понять, как пофиксить багу - при старте девайса предидущие значения берутся из еепрома, например 20% шима, и при уменьшении кнопкой до нуля, значения прыгают опять до этой цифры.
#include <EEPROM.h> byte eep,B1,B2=0; int pwm=0; unsigned long time,timeB1,timeB2; void setup() { pinMode(0,OUTPUT); } void loop() { pwm=min(pwm,255); //ограничиваем диапазон pwm от 0 до 255 pwm=max(pwm,0); time=millis(); //запускаем таймер и очевидные проверки, eep=EEPROM.read(0); //проверить, запустилисть мы с нуля или нет if(millis()-time<50&&pwm==0) { if(eep<=180) //если у нас шим был больше 180, то сбрасываем в базовые значения pwm=eep; } B1=digitalRead(3); //кнопки B2=digitalRead(4); if(B1==HIGH) //определяем нажатие клавиш, 50мс для антидребезга и +1 для счётчика { if (millis()-timeB1>50) { timeB1=millis(); pwm++; } } if(B2==HIGH) //определяем нажатие клавиш... { if (millis()-timeB2>50) { timeB2=millis(); pwm--; } } analogWrite(0, pwm); //пишем значение шим if (digitalRead(2)==LOW) //определяем есть ли напряжение до стабилизатора. { //(на тиньке висит толстый кондёр, если с блока EEPROM.write(0,pwm); //питания пропадёт напруга - пишем текущее значение в еепром) delay(500); //ну это буду подбирать в зависимости от толщины кондёра } }а можете тоже самое словами описать? просто интересно то что вы написали соответствует тому что вы хотели написать
просто коментами рядом с кодом
замени
intpwm=0;наbytepwm=0;и выкинь min и maxА код - он да, немного не соответствует ТЗ :)
ну так то я изначально попробовал, но если лишнее выкинуть и оставить только шим и две кнопки, то при достижения максимума переменная сваливается в ноль.
EEPROM.read похоже возвращает значение именно в byte, если ограничение max сделать равным 1 , то всё работает,но мне нужен 0% шим
А код - он да, немного не соответствует ТЗ :)
повторюсь - я не волшебник...
ячейка EEPROM имеет размерность byte, т.е. ты пытаешься впихнуть 65535 (int) в 255 (byte) :) При этом вполне возможно, что ячейка или обнуляется, или затрагивает соседние. А в следующей строчке тут же читаеся из EEPROM это непредсказуемое значение.
А по коду у тебя и должно при превышении максимума сваливаться в ноль, потому что никаких ограничений не задано.
вот так немного лучше
#include <EEPROM.h> byte eep,B1,B2=0; byte pwm=0; unsigned long time,timeB1,timeB2; void setup() { pinMode(0,OUTPUT); } void loop() { time=millis(); //запускаем таймер и очевидные проверки, eep=EEPROM.read(0); //проверить, запустилисть мы с нуля или нет if(millis()-time<50 && pwm==0 && eep<=180){ pwm=eep; } B1=digitalRead(3); //кнопки B2=digitalRead(4); if(B1==HIGH) //определяем нажатие клавиш, 50мс для антидребезга и +1 для счётчика // ++++ кнопка по моему некорректно в некоторых случаях будет обрабатываться { if (millis()-timeB1>50) { timeB1=millis(); if (pwm < 255){ //++++ это чтобы не переполнялся PWM и не переходил в ноль после 255 pwm++; } } } if(B2==HIGH) //определяем нажатие клавиш... { if (millis()-timeB2>50) { timeB2=millis(); if(pwm>0){ pwm--; //++++ чтобы не было скачка с 0 на 255 } } } analogWrite(0, pwm); //пишем значение шим if (digitalRead(2)==LOW) //определяем есть ли напряжение до стабилизатора. { //(на тиньке висит толстый кондёр, если с блока EEPROM.write(0,pwm); //питания пропадёт напруга - пишем текущее значение в еепром delay(500); //ну это буду подбирать в зависимости от толщины кондёра } }и еще почитай
http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-no...
вот так немного лучше
#include <EEPROM.h> byte eep,B1,B2=0; byte pwm=0; unsigned long time,timeB1,timeB2; void setup() { pinMode(0,OUTPUT); } void loop() { time=millis(); //запускаем таймер и очевидные проверки, eep=EEPROM.read(0); //проверить, запустилисть мы с нуля или нет if(millis()-time<50 && pwm==0 && eep<=180){ pwm=eep; } B1=digitalRead(3); //кнопки B2=digitalRead(4); if(B1==HIGH) //определяем нажатие клавиш, 50мс для антидребезга и +1 для счётчика // ++++ кнопка по моему некорректно в некоторых случаях будет обрабатываться { if (millis()-timeB1>50) { timeB1=millis(); if (pwm < 255){ //++++ это чтобы не переполнялся PWM и не переходил в ноль после 255 pwm++; } } } if(B2==HIGH) //определяем нажатие клавиш... { if (millis()-timeB2>50) { timeB2=millis(); if(pwm>0){ pwm--; //++++ чтобы не было скачка с 0 на 255 } } } analogWrite(0, pwm); //пишем значение шим if (digitalRead(2)==LOW) //определяем есть ли напряжение до стабилизатора. { //(на тиньке висит толстый кондёр, если с блока EEPROM.write(0,pwm); //питания пропадёт напруга - пишем текущее значение в еепром delay(500); //ну это буду подбирать в зависимости от толщины кондёра } }и еще почитай
http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-no...
блин, теория и практика - разные вещи, я так уже пробовал, сейчас попробовал ещё раз, обнаружились грубые ошибки - компилятору не понравились переменные с заглавными буквами типа В1 и В2.
ну это я для сайта хотел код причесать
что происходит на практике без min и max: при зажатой кнопке В1 значение переменной byte pwm растёт до 255 и не останавливается, а сбрасывается до значения переменной eep.
при зажатой кнопке В2 значение уменьшается до 0 и сбрасывается до значения eep.
насчёт ссылочки про работу с кнопками - если бы я её не перелопатил, данный "код" не родился бы.
никаких ограничений не задано.
кроме min и max как ограничения задать? поймите правильно, на форуме пишу, только когда уже отчаялся.
Программирование -> constrain()