при первом запуске поивилась папка arduino в моих документах зашол туда создал папку hardware создал папку attini13 положил туда сделанный файл boards.txt создал папку cores и распаковал в нее 14 файлов из архива перезапустил ардуино ничего не получилось в списку тини нет посмотрел видео еще раз ничего не получилась вылжите полный архив с папкой cores13 и файлом bords.txt ====================вот засада========================
В настройках как на рисунке раширеный вид при компеляции и автомотически ассоцеировать все работает на раз главное теперь ресет не трогает нога 1 в скече пин 5
Привет всем. решил я зделать компактную плату Димера на симисторе, вот по этой схеме
в качестве микроконтроллера решил применить Attiny 13, так как он маленький и дешовый. Так вот нашел практически готовый код написанный Максимом. о конечно для другого микроконтроллера бы создан но все же
#define ControlSimistor 9 //выход на симистор
#define ControlZero 2 //вход контроля перехода через 0
#define steps 5 // количество шагов в 100%, разрядность, ступенчатость
volatile byte Power = 40; //начальное значение мощности в % (можно не задавать)
void setup()
{
pinMode(ControlSimistor, OUTPUT);
digitalWrite(ControlZero, 1);
attachInterrupt(0, zero, FALLING); //внешнее прерывание контроля перехода через ноль
}
void zero() //если словили переход через 0
{
static int count;
if(count < Power/(100/steps))
digitalWrite(ControlSimistor, 1);
else
digitalWrite(ControlSimistor, 0);
count++;
if(count == steps) count = 0;
}
void loop()
{
//здесь меняем Power согласно каким то установкам и выполняем другие задачи
}
при компиляции выдает размер 1 220 байт, но естественно в тиню он не помещается, при том что в LOOp написал обработку сигнала от переменного ризистора.
Подскажите как выйти из сложившейся ситуации? Присматриватся к другому МК??
Если использовать С-шние функции то и тини13 должно хватит.
По идее С-шная функция буде выглядеть вот так:
#include <avr/io.h> // чисто для приличия
#include <avr/interrupt.h> // нужна
/////////////////////////////////////////////////////
#define ControlSimistor 9 //выход на симистор
#define ControlZero 2 //вход контроля перехода через 0
#define steps 5 // количество шагов в 100%, разрядность, ступенчатость
volatile byte Power = 40; //начальное значение мощности в % (можно не задавать)
ISR(PCINT0_vect) // прерывание по вектору PCINT0(ножка РВ0), тоесть по изменению состояния вывода
{
zero(); // что-то делаем когда меняется состояние порта
}
void InitINT0() // Инициализация прерываний
{
MCUCR =_BV(ISC01) | _BV(ISC00);
GIMSK = _BV(INT0);
sei();
}
void setup() {
InitINT0(); // нужно
pinMode(ControlSimistor, OUTPUT);
digitalWrite(ControlZero, 1);
//attachInterrupt(0, zero, FALLING); // вы есть много кушать!
//внешнее прерывание контроля перехода через ноль
}
void zero() //если словили переход через 0
{
static int count;
if(count < Power/(100/steps))
digitalWrite(ControlSimistor, 1);
else
digitalWrite(ControlSimistor, 0);
count++;
if(count == steps) count = 0;
}
void loop()
{
//здесь меняем Power согласно каким то установкам и выполняем другие задачи
}
"Размер скетча в двоичном коде: 512 байт (из 1 024 байт максимум)" - прочтите второе сообщение темы и может сэкономите ещё сотню другую байт.
Если использовать С-шние функции то и тини13 должно хватит.
По идее С-шная функция буде выглядеть вот так:
#include <avr/io.h> // чисто для приличия
#include <avr/interrupt.h> // нужна
/////////////////////////////////////////////////////
#define ControlSimistor 9 //выход на симистор
#define ControlZero 2 //вход контроля перехода через 0
#define steps 5 // количество шагов в 100%, разрядность, ступенчатость
volatile byte Power = 40; //начальное значение мощности в % (можно не задавать)
ISR(PCINT0_vect) // прерывание по вектору PCINT0(ножка РВ0), тоесть по изменению состояния вывода
{
zero(); // что-то делаем когда меняется состояние порта
}
void InitINT0() // Инициализация прерываний
{
MCUCR =_BV(ISC01) | _BV(ISC00);
GIMSK = _BV(INT0);
sei();
}
void setup() {
InitINT0(); // нужно
pinMode(ControlSimistor, OUTPUT);
digitalWrite(ControlZero, 1);
//attachInterrupt(0, zero, FALLING); // вы есть много кушать!
//внешнее прерывание контроля перехода через ноль
}
void zero() //если словили переход через 0
{
static int count;
if(count < Power/(100/steps))
digitalWrite(ControlSimistor, 1);
else
digitalWrite(ControlSimistor, 0);
count++;
if(count == steps) count = 0;
}
void loop()
{
//здесь меняем Power согласно каким то установкам и выполняем другие задачи
}
"Размер скетча в двоичном коде: 512 байт (из 1 024 байт максимум)" - прочтите второе сообщение темы и может сэкономите ещё сотню другую байт.
С Вас код и схема :)
Да обязательно выложу! схема достаточно простая!!
А вот применение сишных функций возможно пожет! вот только придется подумать хорошенько, особенно С заменой digitalWrite? пока сложновато для меня)
Стабилитрон VD1 выкиньте, потенциометр R4 подключается Х2 к +5В, Х1 к минусу(GND), средняя точка(где стрелочка) идёт к пину А2(ADC2),R3 выкиньте, Vcc к +5В.
РВ5 просто так использовать не получиться, лучше не трогайте этот пин, возьмите РВ1 к примеру под управление MOC3021.
Могу поспорить что АЦП будет довольно таки неплохо шуметь, для уменьшения шумов емкость С2 увеличьте хотя бы до 470 мкФ.
Для чего будет использоватся данный диммер ? Для управления лампочкой он не подойдет - она будет сильно мигать судя по алгоритму скетча..
Да по поводу алгоритма я уже догадался, что пропуск полупериодов не подйдет для изменения яркости свечения лампы накаливания, если я правильно прочитал найденую информацию на просторах интернета, нужен так называемый фазовый метод управления симистором?
Да ,там надо управлять временем полупериуда, сейчас как раз пишу прошивку под диммер на радиомодуле+м/к nRF24LE1. Но там немного другой микроконтроллер: более бедные настройки таймеров ,которые как раз тут необходимы.
разобрался. аппаратный шим на 5 ноге с частотой 17кГц и программный шим ~1Гц на 6 и 7 ноге. показания с потенциометра снимаются на 2 ноге.
int s,b,a=0;
byte pwm;
void setup() {
PORTB=0x00; //записать в весь порт В 0
DDRB=0b00111; //настроить порт В PB4 вход, PB3 вход, PB2 выход, PB1 выход, PB0 выход
//Настройка аппаратного ШИМ
TCCR0A=0xC1; // настраиваем аппартанный шим на PB0 с частотой 17кГц(аппаратный шим только на PB0 и PB1) 0x83-37,5кГц
TCCR0B=0x01; //делитель
OCR0A=0x00; //обнуляем пин
}
void loop() {
a = analogRead(3); //показания потенциометра
pwm = (a-0)*(0-255)/(1023-0)+255; //инвертируем для аппаратного шима, формула из функции map()
b = (a-0)*(0-1000)/(1023-0)+1000;
s = 1000-b;
static unsigned long prevTime1=0;
static unsigned long prevTime2=0;
if(millis()-prevTime1>1000){ //каждую секунду подаём на ноги единицу
prevTime1=millis();
PORTB |= (1<<2)|(1<<1);
prevTime2=millis();
}
if(millis()-prevTime2>s){ //в завиимоти от положения движка потенциометра обнулям ноги
PORTB &=~ ((1<<2)|(1<<1));
prevTime2=millis();
}
OCR0A=pwm; //аппаратный шим
}
наткнулся ещё на одну беду - неработает map() на тиньке13, вообще. формуллу подпихиваю - на выходе рандомные числа. мало оперативы?
Насколько я помню при компилировании постоянных значений компилятор использует тот тип данных который влазит текущее число -так что нормально тут эта функция работает и не жрет многа ресурсов. Накройняк можно свою функцию сделать с типом byte - скорее всего будет точно столько же занято байт..
вот поправил немного код, избавился от функции map, по сути в моем коде она все же была излишнее нагромождние, осталось собрать макет и проверить)
переработанный код
#include <avr/io.h> // чисто для приличия
#include <avr/interrupt.h> // биба для настройки прерываний
/////////////////////////////////////////////////////
volatile boolean ADC_stop = false; //флаг остановки считывания АЦП при рыдержке времени
volatile boolean time_flag = false; //флаг разрешения задержки на включение симистора
#define INTERVAL 39UL //время равное 39 микросекундам участвует в конструкции TIME OUT
byte counter = 0; //счетчик для отчета времени
byte light_time = 0; //переменная непосредственногог управления выдержкой на включение симистора
void setup() {
InitINT0(); // нужно
DDRB |=(1<<3);//PB3 установить как выход
PORTB |=(1<<3);//включаем симистор
ADMUX |=(1<<ADLAR);//читаем только ADCH ! 8 бит разрешение
}
void InitINT0() // Инициализация прерываний
{
MCUCR =_BV(ISC01) | _BV(ISC00);
GIMSK = _BV(INT0);
sei();
}
ISR(PCINT0_vect) // прерывание по вектору PCINT0(ножка РВ0), тоесть по изменению состояния вывода
{
PORTB &=~(1<<3); //выключаем симистор
time_flag = true;//разрешаем отсчет времени на включение симистора
ADC_stop = true; // ставим запрет на считывание АЦП, это для того чтобы не менялось значение
// выдержки в процессе отсчета
}
void loop()
{
if(time_flag) //если переменная TRUE то запускаем конструкцию отсчета выдержки времени
{ //тоесть выдержка начнется как только словим переход чез ноль
static unsigned long prevMicros = 0;//устанавливаем переменную для хранения предыдущего значения micros()
if(micros()- prevMicros > INTERVAL) //если натикало больще 39 микросекунд то
{
prevMicros = micros(); // обновляем переменную
counter++; // увиличиваем значение счетчика на 1
}
}
else{counter = 0;} // иначе если переменная time_flag == false сбрасываем значение счтчика
if(counter == light_time) // если счетчик досчитак до значения устаеовленного потенциометром
{
PORTB |=(1<<3); //включаем симистор
counter = 0; // обнуляем счетчик
time_flag = false;//устанавливаем флаги
ADC_stop = false;
}
if(!ADC_stop) // если разрешено считывание АЦП , то
{
light_time = Read_ADC(2); //читаем канал ADC2 и сохранияем значение в переменную light_time
} // так как считываем значение чтолько из ADCH то значения будут от 0 до 255
} // что задаст в свою очередь выдержку на включение симистора от 0 до приблизительно
//9000 микросекунд, а это примерно диапазон полупериода сусоиды на 50 Гц
byte Read_ADC(byte channel){
ADMUX = channel; // ADC pin
ADCSRA |= 1<<ADEN;
ADCSRA |= 1<<ADSC;
while(!(ADCSRA & (1<<ADIF)));
ADCSRA |= 1<<ADIF;
ADCSRA &= ~(1 << ADEN); // отключаем АЦП, для уменьшения энергопотребления
return ADCH;
}
Размер скетча в двоичном коде: 468 байт (из 1 024 байт максимум)
Ну подскажите еще вот такую вещь, как тиньку 13 прошить USBasp ом, не могу в архиве найти бутлодер, там есть все микроконтроллеры кроме тини 13 или же можно применить от 26 тини??
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny13
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny13
здравствуйте ! видео конечно смотрел раз 5 при компелирование ошибки строк 7 что то про java...... и последний строка просто ....7
сейчас еще раз попробую се снова скачаю процесинг с оф сайта и Arduino 1.5.6-r2 ( Примечания к выпуску ): c Установщик Windows
у меня 7 винда
и архив с первой странице UPD 08.03.2014 новая версия ядра "Version 0.18.5"(у меня на хостинге чуть доработанное).
ардуино 1,5,6 распаковал в диск с папка программ фаил
в архиве нету файла boards.txt я сам его создал а во внутри положил
###########################################################################
attiny13int.name=Attiny13 @ 128 KHz (internal watchdog oscillator)
attiny13int.upload.using=arduino:arduinoisp
attiny13int.upload.maximum_size=1024
attiny13int.upload.speed=250 # important for not losing connection to a slow processor
attiny13int.bootloader.low_fuses=0x7B#### делитель на 8 отключен [CKDIV8=1]. Частота RC - 128 kHz
attiny13int.bootloader.high_fuses=0xFF
attiny13int.bootloader.unlock_bits=0x3F#### - это еще нахрена?
attiny13int.bootloader.lock_bits=0x3F##### - аналогично?
attiny13int.build.mcu=attiny13
attiny13int.build.f_cpu=128000######- частота честная
attiny13int.build.core=core13
###############################################################
attiny13at4.name=ATtiny13 @ 4.8MHz (internal 4.8 MHz clock)
attiny13at4.upload.using=arduino:arduinoisp
attiny13at4.bootloader.low_fuses=0x69 ######- тут делитель на 8 включен [CKDIV8=0]. Частота RC - 4,8 MHz
attiny13at4.bootloader.high_fuses=0xff
attiny13at4.upload.maximum_size=1024
attiny13at4.build.mcu=attiny13
attiny13at4.build.f_cpu=600000##### - частота установлена правильно (поскольку включен делитель)
attiny13at4.build.core=core13
###############################################################
attiny13.name=ATtiny13 @ 9.6MHz (internal 9.6 MHz clock)
attiny13.upload.using=arduino:arduinoisp
attiny13.bootloader.low_fuses=0x7a##### - отключен делитель на 8 ([CKDIV8=1]). Дефолт - 0x6a
attiny13.bootloader.high_fuses=0xff
attiny13.upload.maximum_size=1024
attiny13.build.mcu=attiny13
attiny13.build.f_cpu=1200000 ######- при этом частота МК таки делится на 8 !!!
attiny13.build.core=core13
###############################################################
при первом запуске поивилась папка arduino в моих документах зашол туда создал папку hardware создал папку attini13 положил туда сделанный файл boards.txt создал папку cores и распаковал в нее 14 файлов из архива перезапустил ардуино ничего не получилось в списку тини нет посмотрел видео еще раз ничего не получилась вылжите полный архив с папкой cores13 и файлом bords.txt ====================вот засада========================
====================ВСЕРАВНО НЕ БРОШУ!!!! ATTINY13================
Обратили внимание какая у меня версия Arduino IDE?
Я тоже обэтом подумал где взять старую?????
И архив целиковый ????
Среда http://arduino.googlecode.com/files/arduino-1.0.5-r2-windows.zip
Специально скачал и запустил, тини13 в списке есть:
Ядро http://hwman.ho.ua/files/ATtiny13A101/attiny13.zip
Пошол включать комп
Я ТЕБЯ ОБАЖАЮ только пару галок подправил!!!!!!супер
Каких галок? Может что-то допишу в статью.
В настройках как на рисунке раширеный вид при компеляции и автомотически ассоцеировать все работает на раз главное теперь ресет не трогает нога 1 в скече пин 5
Ещё раз СПАСИБО
Привет всем. решил я зделать компактную плату Димера на симисторе, вот по этой схеме
в качестве микроконтроллера решил применить Attiny 13, так как он маленький и дешовый. Так вот нашел практически готовый код написанный Максимом. о конечно для другого микроконтроллера бы создан но все же
при компиляции выдает размер 1 220 байт, но естественно в тиню он не помещается, при том что в LOOp написал обработку сигнала от переменного ризистора.
Подскажите как выйти из сложившейся ситуации? Присматриватся к другому МК??
Присмотритесь... Ещё что-нибудь туда допишите
По моим сведениям ATTINY13A-SU стоит 0.63 Евро, а ATTINY45-20SU 1.011 Евро ( если брать 1 штуку)
http://www.tme.eu/ru/katalog/?idp=1&search=attiny&cleanParameters=1#sear...
Да наверное целесообразнее заказать ТИНИ 45, 4 кб памяти для димера, даже используя Arduinoвские функции управления портами должно хватить!
Если использовать С-шние функции то и тини13 должно хватит.
По идее С-шная функция буде выглядеть вот так:
/*Да наверное целесообразнее заказать ТИНИ 45, 4 кб памяти для димера, даже используя Arduinoвские функции управления портами должно хватить!*/
Незнаю как там у Вас, у меня в инет магазинах ТИНИ 45 по цене как АТмега 8.
Если использовать С-шние функции то и тини13 должно хватит.
По идее С-шная функция буде выглядеть вот так:
Да обязательно выложу! схема достаточно простая!!
А вот применение сишных функций возможно пожет! вот только придется подумать хорошенько, особенно С заменой digitalWrite? пока сложновато для меня)
Двойка в конце - номер порта.
О спасибо огромно сохраню себе, оч полезная инфа!
Как я уже говорил, всё это есть во втором посте.
вот набросал примерную схему устройства
жду критику
Сигнал с первой ножки ( RESET ) никак на вторую или седьмую или шестую не перебросить?
Хотите лишиться втрой попытки программирования?
Да точно, хорошее замечание сейчас поправлю!
Стабилитрон VD1 выкиньте, потенциометр R4 подключается Х2 к +5В, Х1 к минусу(GND), средняя точка(где стрелочка) идёт к пину А2(ADC2),R3 выкиньте, Vcc к +5В.
РВ5 просто так использовать не получиться, лучше не трогайте этот пин, возьмите РВ1 к примеру под управление MOC3021.
Могу поспорить что АЦП будет довольно таки неплохо шуметь, для уменьшения шумов емкость С2 увеличьте хотя бы до 470 мкФ.
вот несколько подправил схему согласно замечаний
на счет АЦП подумал что 10 битного разрешения здесь и ненужно будет, оставлю 8 бит, плюс усреднение значений думаю для моих целей вполне пойдет
/*...на счет АЦП подумал что 10 битного разрешения здесь и ненужно будет, оставлю 8 бит, плюс усреднение значений думаю для моих целей вполне пойдет*/
Главное чтобы места хватило, если делать всё правильно то думаю хватит.
Вопрос на счет АЦП, а вот этого самого разрешения в 10 бит мы получаем относительно какого напряжения??
Vcc(+5 В).
Все понятно, спасибо)
В Вашем случае +5В, по сути аналогрид - измерение относительно напряжения питания, будь то 3.7 В или 2.6 В или 5.7 В.
Для чего будет использоватся данный диммер ? Для управления лампочкой он не подойдет - она будет сильно мигать судя по алгоритму скетча..
Для чего будет использоватся данный диммер ? Для управления лампочкой он не подойдет - она будет сильно мигать судя по алгоритму скетча..
Да по поводу алгоритма я уже догадался, что пропуск полупериодов не подйдет для изменения яркости свечения лампы накаливания, если я правильно прочитал найденую информацию на просторах интернета, нужен так называемый фазовый метод управления симистором?
Да ,там надо управлять временем полупериуда, сейчас как раз пишу прошивку под диммер на радиомодуле+м/к nRF24LE1. Но там немного другой микроконтроллер: более бедные настройки таймеров ,которые как раз тут необходимы.
разобрался. аппаратный шим на 5 ноге с частотой 17кГц и программный шим ~1Гц на 6 и 7 ноге. показания с потенциометра снимаются на 2 ноге.
наткнулся ещё на одну беду - неработает map() на тиньке13, вообще. формуллу подпихиваю - на выходе рандомные числа. мало оперативы?
Что то не подключается опорное. Подскажите пожалуйста что не так делаю.
Юзайте analogReference(INTERNAL) - 1.1В / analogReference(EXTERNAL) - напряжение питания.
Аналог на Си analogReference(INTERNAL) - ADMUX |= _BV(REFS0); и analogReference(EXTERNAL) - ADMUX &= ~_BV(REFS0);
Кстати, у меня на тини13 при использовании ИОНа шумы АЦП были побольше чем простое измерение относительно напряжения питания.
Оказывается все так просто! Спасибо, получилось!
Про шумы пока ни чего сказать не могу.
Можно еще в первом посте дописать что поддерживает analogReference.
Нет, первый править нельзя.
Сегодня написал код димера, его еще не проверял, так что выкладываю на обсуждение, надеюсь на помощь и подсказки))
Тип даных byte может хранить значение от 0 до 255, советую заглянуть сюда (подскажу - 54 строчка).
Не используйте функцию map(); она "эсть много кушат", для тини13 негодиться.
Считать когда фаза будет переходить через ноль не лучшая идея, частота не всегда ровно 50 герц
Тип даных byte может хранить значение от 0 до 255, советую заглянуть сюда (подскажу - 54 строчка).
Не используйте функцию map(); она "эсть много кушат", для тини13 негодиться.
Считать когда фаза будет переходить через ноль не лучшая идея, частота не всегда ровно 50 герц
Но я же читаю только ADCH, а он у меня будет хранить значения 8 битного разрешения, я же в setup установил ADLAR в 1.
А на счет map она не подходит потому что жрет много оперативы???
А ну да, недосмотрел. Кстати, если инкрементировать переменную типа byte значение которой 255 она обнулиться, ну это так, может кто-то не знает.
Функция map(); кушает много места под код, две три таких функции и у Вас практически не останется места. Почему? сами посмотрите:
Насколько я помню при компилировании постоянных значений компилятор использует тот тип данных который влазит текущее число -так что нормально тут эта функция работает и не жрет многа ресурсов. Накройняк можно свою функцию сделать с типом byte - скорее всего будет точно столько же занято байт..
подправил пост #334, unsigned long как в примере с BlinkWithoutDelay не работает, заработало с static unsigned long
http://arduino.ru/tutorials/BlinkWithoutDelay
у тебя prevTime1 обнуляется чаще, чем успевает натикать 1000 мс. Вынеси инициализацию из loop
вот поправил немного код, избавился от функции map, по сути в моем коде она все же была излишнее нагромождние, осталось собрать макет и проверить)
переработанный код
Размер скетча в двоичном коде: 468 байт (из 1 024 байт максимум)
Ну подскажите еще вот такую вещь, как тиньку 13 прошить USBasp ом, не могу в архиве найти бутлодер, там есть все микроконтроллеры кроме тини 13 или же можно применить от 26 тини??
http://razniepodelki.blogspot.com/2014/05/attiny13-arduino.html только в Вашем случае тип программатора не Arduino as ISP а USBasp.
Но это всего лишь предположение, могу ошибаться.
Пытаюсь прошить тиньку выдает вот это