Для того чтобы прочитать текущее состояние любого вывода или всего порта, используется регистр PINx, где “x” имя порта. Чтение состояния вывода можно производить при любых настройках вывода : будь то вход, выход или альтернативная функция вывода. Также регистр PINx можно только читать (Read only).
unsigned char pin_value; // переменная для хранения состояний выводов
pin_value = PINB; // читаем состояние порта B
Хотел бы поднять эту тему так как есть задача сделать ШИМ регулятор, только частота ШИМ"а в районе 5 кГц, а можно как-то увеличить частоту ШИМ с 5 кГц до скажем 25-30 кГц? Чтобы не слышать этот дурацкий писк.
Нет, про среду я ничего не говорю, она кстати, не имеет практически никаких ограничений - хоть на асме пишите, а вот некоторые дуиновские функции... все равно в итоге от них откажитесь.
А как на асме писать в среде Arduino, я когда брал чужой код с кусками асма и IDE ругалась, нужно библиотеку какую-то подключить или ещё что?
Прошиваю с помощью arduino uno, в программе выбираю плату "Attiny13", програматор выбираю "arduino as ISP",пробовал просто загружать и "загрузить с помощью программатора".
А мог ли я тиньку убить? До этого у меня на дуино был загружен другой скетч который использовал выводы в том числе и те которые идут на программирование тиньки, и тиньку я подключал с работающим скетчем на ардуино.
например у меня в ардуино 1-0-5 в меню нет платы "Attiny13", вы как-то ее искуственно добавляли?
Хватит ли тиньки и дуиновских функций для того чтобы генерить ШИМом на двух портах вот таким от образом:
Тоесть при помощи ШИМ сделать синус частотой в 50 герц, первое что приходит в голову - цикл фор с делеймикросекондс, тоесть каждые там столько-то микросекунд увеличат ШИМ на один шаг, при достижении пика уменьшать...
Читал что высокочастотную составляющую потом выравнивают при помощи фильтра НЧ состоящего из дроселя и конденсатора, за счёт такого подхода КПД преобразователя увеличивается, ведь транзисторы работают в ключевом режиме.
не торопитесь. я протестировал только в протеусе. в железе еще не проверял
возможно разобрался с внутренним опорником
если заменить в начале
#define ADC_VREF_TYPE 0x00
на
#define ADC_VREF_TYPE 0x40
то должен от внутреннего. но я еще не проверял
нужно как проверить что он намерил. хотел UART подцепить, но пока не осилил. поэтому на данный момент цепляю 4 разрядный 7 сегментный дисплей через 74HC595. и тогда уже точно буду знать что он намерял
Attiny13/25/45/85 очень простые в написании кода прямо в обычном "блокноте" с подсветкой синтаксиса и компилятором avr-gcc (в линуксе) или на windows - winavr. Код получается мелкий и можно много чего запихать даже в attiny13.Например недавно запихал код беспроводного датчика влажности/температуры на базе радиомодулей 433 мгц/315мгц :).
напомните кто помнит в какой теме была выложена программа для АЦП написанная одни из форумчан, там было напряжение питания, разрядность ацп и еще что. небольшая программа была, я там еще автору предлагал добавить расчет для шунта
Но это не то, это вообще баловство, может мне подскажет кто в какую сторону смотреть?
Это будет "отпугиватель птиц" для огорода, всё что я напаяю/моделирую/на программирую, я всё выложу сюда на форум в свободный доступ, главное разобраться с прошивкой, тини идеально подходит для таких проектов...
знам, знам это будет ультразвуковой отпугиватель преподавателей на лекции
Было бы тут чего паять - всего 8 ножек !!! Сам готовые ардуино платы использую только для опытов и проектирования,а конечные схемы всеравно лучше сделать отдельным устройством( можно и без кварца- тогда ещё +2 вывода можем использовать. ).Исключение - мега1280/2560 -тут очень мелкий корпус м/к.
напомните кто помнит в какой теме была выложена программа для АЦП написанная одни из форумчан, там было напряжение питания, разрядность ацп и еще что. небольшая программа была, я там еще автору предлагал добавить расчет для шунта
напомните кто помнит в какой теме была выложена программа для АЦП написанная одни из форумчан, там было напряжение питания, разрядность ацп и еще что. небольшая программа была, я там еще автору предлагал добавить расчет для шунта
Собрал на макетке управление двумя вентеляторами для охлождения зарядки, потестил пока на UNO. Писк не понравился, повысил частоту ШИМ нашел на этом форуме как это сделать, все стало нормально. Но как повысить на тине не знаю, то что написано чуть выше не по мне... не понимаю. Вычитал что можно отключить фьюзCKDIV8, как это можно сделать что нужно написать в коде?
Собрал на макетке управление двумя вентеляторами для охлождения зарядки, потестил пока на UNO. Писк не понравился, повысил частоту ШИМ нашел на этом форуме как это сделать, все стало нормально. Но как повысить на тине не знаю, то что написано чуть выше не по мне... не понимаю. Вычитал что можно отключить фьюзCKDIV8, как это можно сделать что нужно написать в коде?
CKDIV8 - это делитель частоты на 8 внутреннего задающего генератора,устанавливается через фьюзы,а не в коде программы.
Понятно :( Жаль что не получается это сделать просто. Вроде бы все получилось быстро и без проблем, спаял на макетке схемку на два вентелятора, написал простенький код на "дуиновском" языке, залил, все работает прекрасно и как надо. Но этот писк противный достал...Пробовал RC фильтр, но он не работает как надо...
HWman, решил ли задачку как поднять частоту шим выше звуковых частот?
jeka_tm, да я видел что вы написали))) И спасибо большое за это! Но я как начинающий и еще многого не понимающий, не понял как его применить к своему коду ))) Если бы вы описали в коде что за что отвечает и как оно работает, потому как к сожалению еще с трудом читаю через раз "ардуиновский" код, а этот даже не понимаю на каком языке ))))
void setup(){
//Настройка порта
PORTB=0x00; //записать в весь порт В 0
DDRB=0x01; //настроить порт В 0x01: по другому 000001 (1 означает выход, 0 вход)
//нумерация слева направо. получается PB0 сделать выходом, остальные входы
//Настройка аппаратного ШИМ
TCCR0A=0x83; //настраиваем аппартанный шим на PB0 с частотой 37,5кГц(аппаратный шим только на PB0 и PB1)
TCCR0B=0x01; //на PB1 (второй шим) ничего делать не надо
OCR0A=0x00; //записать в регистр OCR0A 0 (это регистр задает ширину шим)
//0 соответствует 0% ширине, 255 ширине 100% импульсов в шим
}
void loop()
{
OCR0A=127; //сделаем шим на PB0 шириной 50%, меандр короче получили
//запишите другое чисто от 0 до 255 этим вы регулируете шим
}
Но вот возможно ли скрестить эти настройки с этим кодом.
void setup()
{
}
void loop()
{
{
int valo = analogRead(A3); // Читаем А3
valo = map(valo,340,780,0,255); // Масштабирем аналоговые значения в шим
analogWrite(1,valo); // Выводим шим
valo = analogRead(A3); // это возможно лишнее
if(valo<=340)digitalWrite(1,0); //Если температура ниже 30* то отключаем выход в ноль
if(valo>=780)digitalWrite(1,1); //если выше 80 то включаем на постоянку
}
{
int val = analogRead(A1); //то же самое, только для второго вентелятора.
val = map(val,340,780,0,255);
analogWrite(0,val);
val = analogRead(A1);
if(val<340)digitalWrite(0,0);
if(val>=780)digitalWrite(0,1);
}
}
ну код неоптимален на самом деле в лишней строке. а далее почему digitalWrite если вы используете шим. то есть у вас на выходе шим и при определенных условиях вы подаете на тот же выход 1 или 0. я лично не проверял возможно ли такое. завтра напишу с использованием того что я написал выше. сегодня уже времени скорее всего не будет
и кстати вы в курсе что это не нагреватель где шим можно подавать от нуля. если это не обычный мотор а компьютерный вентилятор то работать он будет только от определенного значения напряжения как и светодиод. светодиод тоже не работает от 0 вольт так что шим на самом деле должен быть для компьютерного например от 80 приблизительно. я лично не проверял. зависит также от самого вентилятора. надо проверять опытным путем
jeka_tm Все правильно, шим запускает вентелятор не от нуля, но по ощущениям гдето с 30 точно, это я подправлю.
А digitalWrite поставил после того когда попробовал код в реале. То что масштабируется в районе шим работает нормально, но если А3 меньше чем 340 вентелятор запускается вновь на малой скорости, после 780 он опять переходит в слабый режим работы и как будто шим начинается с нуля, и с ростом температуры начинает увеличиваться снова. Поэтому попробовал останавливать вентелятор по низу 340 и запуск на максимум после 780 digitalWrite, и проблема исчезла. Возможно это не правильно с точки зрения программирования. но в моем случае это работает.
HWman, решил ли задачку как поднять частоту шим выше звуковых частот?
Да, добавлением конденсатора 3300 мкФ который подключил в параллель к нагрузке, писк пропал, на выходе прямая линия, правда регулировка как-то уматово осуществляется, но всё работает.
Правда не для мощных нагрузок, но для 3-х ваттного светодиода хватает такой метод вроде как проходит, я тестил - ничего не греется.
ЗЫ в инициализации нужно сделать analogWrite(порт,1) и дать подзарядится конденсатору пару миллисекунд, ато когда он разряжен он как КЗ, транзистор может убить если нету нормального запаса.
Мне кондер вообще не помог, я делаю выход на полевик а он уже и управляет нагрузкой. Если маленькую емкость поставить то писк идет всеравно, а если микрофарад 10 -20 то регулеровки вообще нет, вернее она наверно есть но в малых пределах и никак не ощущается. В этой теме очень хорошо написано как изменить частоту , но только на UNO. Если бы так просто можно было сменить на тиньке, было бы не плохо.
Мне кондер вообще не помог, я делаю выход на полевик а он уже и управляет нагрузкой. Если маленькую емкость поставить то писк идет всеравно, а если микрофарад 10 -20 то регулеровки вообще нет, вернее она наверно есть но в малых пределах и никак не ощущается. В этой теме очень хорошо написано как изменить частоту , но только на UNO. Если бы так просто можно было сменить на тиньке, было бы не плохо.
Да, я уже исправил. Я выше спрашивал.... Все стало нормально.
Сейчас подставил в код значения те что дал jeka_tm , компилятор не ругается, завтра попробую добавить то же для второго порта и попробую загрузить и проверить как работает..
Странно(, загрузил чисто этот скетч Вентелятор крутится и пищит. Поробовал менять значения шим, все работает скорость меняется но писк остается.
вместо вентилятора подцепи обычный мотор и посмотри
а также открой файл boards и посмотри у нас частота одинаковая стоит и фьюзы или нет. если нет сделай как у меня. я измерял частоту на макетке все четко. у вас возможно стоит делитель на 8, и получается частота в 8 раз ниже
void setup(){
//Настройка порта
PORTB=0x00; //записать в весь порт В 0
DDRB=0x01; //настроить порт В 0x01: по другому 000001 (1 означает выход, 0 вход)
//нумерация слева направо. получается PB0 сделать выходом, остальные входы
//Настройка аппаратного ШИМ
TCCR0A=0x83; //настраиваем аппартанный шим на PB0 с частотой 37,5кГц(аппаратный шим только на PB0 и PB1)
TCCR0B=0x83; //на PB1 (второй шим) ничего делать не надо
OCR0A=0x00;
//записать в регистр OCR0A 0 (это регистр задает ширину шим)
//0 соответствует 0% ширине, 255 ширине 100% импульсов в шим
}
void loop()
{
OCR0A=50; //сделаем шим на PB0 шириной 50%, меандр короче получили
//запишите другое чисто от 0 до 255 этим вы регулируете шим
}
Записал так , писк исчез. Хотя мотор висит на пятой ноге, т.е PB0
Для того чтобы прочитать текущее состояние любого вывода или всего порта, используется регистр PINx, где “x” имя порта. Чтение состояния вывода можно производить при любых настройках вывода : будь то вход, выход или альтернативная функция вывода. Также регистр PINx можно только читать (Read only).
http://makesystem.net/?p=896
С горем пополам , но осилел , прочитал с порта (B) конкретный pin(4) и присвоим это значение переменной.
Спасибо за помощь ! а гуру молчат 2-й день , не знают наверное........
Хотел бы поднять эту тему так как есть задача сделать ШИМ регулятор, только частота ШИМ"а в районе 5 кГц, а можно как-то увеличить частоту ШИМ с 5 кГц до скажем 25-30 кГц? Чтобы не слышать этот дурацкий писк.
Нет, про среду я ничего не говорю, она кстати, не имеет практически никаких ограничений - хоть на асме пишите, а вот некоторые дуиновские функции... все равно в итоге от них откажитесь.
А как на асме писать в среде Arduino, я когда брал чужой код с кусками асма и IDE ругалась, нужно библиотеку какую-то подключить или ещё что?
http://www.nongnu.org/avr-libc/user-manual/inline_asm.html
Блинк на асме:
А мог ли я тиньку убить? До этого у меня на дуино был загружен другой скетч который использовал выводы в том числе и те которые идут на программирование тиньки, и тиньку я подключал с работающим скетчем на ардуино.
например у меня в ардуино 1-0-5 в меню нет платы "Attiny13", вы как-то ее искуственно добавляли?
например у меня в ардуино 1-0-5 в меню нет платы "Attiny13", вы как-то ее искуственно добавляли?
Легко,если почитать эту тему сначала..
Вначале темы силка нерабочая, вот, закидаете содержимое архива куда надо, перезагружаете IDE - вуаля.
Хватит ли тиньки и дуиновских функций для того чтобы генерить ШИМом на двух портах вот таким от образом:
Тоесть при помощи ШИМ сделать синус частотой в 50 герц, первое что приходит в голову - цикл фор с делеймикросекондс, тоесть каждые там столько-то микросекунд увеличат ШИМ на один шаг, при достижении пика уменьшать...
Читал что высокочастотную составляющую потом выравнивают при помощи фильтра НЧ состоящего из дроселя и конденсатора, за счёт такого подхода КПД преобразователя увеличивается, ведь транзисторы работают в ключевом режиме.
Поделюсь своими изысканиями
Аппаратный ШИМ на Attiny13
Настройка и считывание с ADC0 значение АЦП и управление шимом
правда пока незнаю как запустить АЦП на внутреннем опорнике
Оу, спасибо.
Оу, спасибо.
не торопитесь. я протестировал только в протеусе. в железе еще не проверял
возможно разобрался с внутренним опорником
если заменить в начале
на
то должен от внутреннего. но я еще не проверял
нужно как проверить что он намерил. хотел UART подцепить, но пока не осилил. поэтому на данный момент цепляю 4 разрядный 7 сегментный дисплей через 74HC595. и тогда уже точно буду знать что он намерял
Вот тут есть парочка интересных вещей.
Attiny13/25/45/85 очень простые в написании кода прямо в обычном "блокноте" с подсветкой синтаксиса и компилятором avr-gcc (в линуксе) или на windows - winavr. Код получается мелкий и можно много чего запихать даже в attiny13.Например недавно запихал код беспроводного датчика влажности/температуры на базе радиомодулей 433 мгц/315мгц :).
MaksMS полностью согласен) пихать ардуино в тиньку это как пихать виннипуха в нору к зайцу) на голодную пролезет, но при первом же аппетите труба)
а зачем winavr? Он оправдан только если компьютер такой же древний как и сам winavr)
Ну это как пример.Я использую avr-gcc т.к. сижу все время в линуксе...
напомните кто помнит в какой теме была выложена программа для АЦП написанная одни из форумчан, там было напряжение питания, разрядность ацп и еще что. небольшая программа была, я там еще автору предлагал добавить расчет для шунта
У меня заработал ацп на внутреннем опорнике)))))
просто меняете в первой строке. для VCC в качестве опорника должно быть
а для внутреннего опорника 1,1В поставить эту строку
теперь не придется в драйвере для фонарика ставить стабилизатор)))
вот 2 фото. 1 фото опорник питание 5В, на вход подаю 5В получаю 1023 как и должно быть
2 фото внутренний опорник 1.1В, на вход подаю 1.1В и получаю также 1023
Итак, уже давненько появился способ программировать маленькие, дешёвые, маложрущие и доступные микрухи ATtiny13A.
за сколько можно купить такую плату с Atiny13A, что то они стоят дороже UNO ? По шелкографии вижу - заводская.
самая дешевая пустая плата за 6 долларов : http://www.ebay.com/itm/eeZee-Tiny-8-pin-ATtiny-breakout-target-board-/331037022186?pt=LH_DefaultDomain_0&hash=item4d135817ea
Это будет "отпугиватель птиц" для огорода, всё что я напаяю/моделирую/на программирую, я всё выложу сюда на форум в свободный доступ, главное разобраться с прошивкой, тини идеально подходит для таких проектов...
нехрена баловться
Одна тинька без этой готовой платки стоит реально копейки, такую платку можно сделать самому.
http://research.andbas.com/2012/09/arduino-isp-programmer-for-attiny-45-...
Не понимаю ,чего сложного взять макетки типа таких http://www.ebay.com/itm/250976573749 и натыкать всяких разъемов ,например таких http://www.ebay.com/itm/261030252314 -вот и готова макетка.
Было бы тут чего паять - всего 8 ножек !!! Сам готовые ардуино платы использую только для опытов и проектирования,а конечные схемы всеравно лучше сделать отдельным устройством( можно и без кварца- тогда ещё +2 вывода можем использовать. ).Исключение - мега1280/2560 -тут очень мелкий корпус м/к.
согласен. зачем. я вот себе за 10 минут набросал плату, и еще от делать нечего полчаса оптимизировал
блин только сейчас заметил что питание не вывел на макетку))))
Переделал
вот ссылка на печатку в формате Diptrace
http://yadi.sk/d/QySm8OuSCDMYV
напомните кто помнит в какой теме была выложена программа для АЦП написанная одни из форумчан, там было напряжение питания, разрядность ацп и еще что. небольшая программа была, я там еще автору предлагал добавить расчет для шунта
http://arduino.ru/forum/obshchii/adc-calc
напомните кто помнит в какой теме была выложена программа для АЦП написанная одни из форумчан, там было напряжение питания, разрядность ацп и еще что. небольшая программа была, я там еще автору предлагал добавить расчет для шунта
http://arduino.ru/forum/obshchii/adc-calc
спасибо. вы ее дорабатывать будете? есть ряд предложений
Возможно, какие предложения?
отвечу в теме программы
Собрал на макетке управление двумя вентеляторами для охлождения зарядки, потестил пока на UNO. Писк не понравился, повысил частоту ШИМ нашел на этом форуме как это сделать, все стало нормально. Но как повысить на тине не знаю, то что написано чуть выше не по мне... не понимаю. Вычитал что можно отключить фьюз CKDIV8, как это можно сделать что нужно написать в коде?
Собрал на макетке управление двумя вентеляторами для охлождения зарядки, потестил пока на UNO. Писк не понравился, повысил частоту ШИМ нашел на этом форуме как это сделать, все стало нормально. Но как повысить на тине не знаю, то что написано чуть выше не по мне... не понимаю. Вычитал что можно отключить фьюз CKDIV8, как это можно сделать что нужно написать в коде?
CKDIV8 - это делитель частоты на 8 внутреннего задающего генератора,устанавливается через фьюзы,а не в коде программы.
Понятно :( Жаль что не получается это сделать просто. Вроде бы все получилось быстро и без проблем, спаял на макетке схемку на два вентелятора, написал простенький код на "дуиновском" языке, залил, все работает прекрасно и как надо. Но этот писк противный достал...Пробовал RC фильтр, но он не работает как надо...
HWman, решил ли задачку как поднять частоту шим выше звуковых частот?
я же выкладывал код для шима. частота 37,5кГц. если услышите повышу частоту)))
jeka_tm, да я видел что вы написали))) И спасибо большое за это! Но я как начинающий и еще многого не понимающий, не понял как его применить к своему коду ))) Если бы вы описали в коде что за что отвечает и как оно работает, потому как к сожалению еще с трудом читаю через раз "ардуиновский" код, а этот даже не понимаю на каком языке ))))
все просто. для шим на PB0 нужно сделать так
jeka_tm спасибо! Логика стала понятна.
Но вот возможно ли скрестить эти настройки с этим кодом.
ну код неоптимален на самом деле в лишней строке. а далее почему digitalWrite если вы используете шим. то есть у вас на выходе шим и при определенных условиях вы подаете на тот же выход 1 или 0. я лично не проверял возможно ли такое. завтра напишу с использованием того что я написал выше. сегодня уже времени скорее всего не будет
и кстати вы в курсе что это не нагреватель где шим можно подавать от нуля. если это не обычный мотор а компьютерный вентилятор то работать он будет только от определенного значения напряжения как и светодиод. светодиод тоже не работает от 0 вольт так что шим на самом деле должен быть для компьютерного например от 80 приблизительно. я лично не проверял. зависит также от самого вентилятора. надо проверять опытным путем
jeka_tm Все правильно, шим запускает вентелятор не от нуля, но по ощущениям гдето с 30 точно, это я подправлю.
А digitalWrite поставил после того когда попробовал код в реале. То что масштабируется в районе шим работает нормально, но если А3 меньше чем 340 вентелятор запускается вновь на малой скорости, после 780 он опять переходит в слабый режим работы и как будто шим начинается с нуля, и с ростом температуры начинает увеличиваться снова. Поэтому попробовал останавливать вентелятор по низу 340 и запуск на максимум после 780 digitalWrite, и проблема исчезла. Возможно это не правильно с точки зрения программирования. но в моем случае это работает.
HWman, решил ли задачку как поднять частоту шим выше звуковых частот?
Да, добавлением конденсатора 3300 мкФ который подключил в параллель к нагрузке, писк пропал, на выходе прямая линия, правда регулировка как-то уматово осуществляется, но всё работает.
Правда не для мощных нагрузок, но для 3-х ваттного светодиода хватает такой метод вроде как проходит, я тестил - ничего не греется.
ЗЫ в инициализации нужно сделать analogWrite(порт,1) и дать подзарядится конденсатору пару миллисекунд, ато когда он разряжен он как КЗ, транзистор может убить если нету нормального запаса.
Мне кондер вообще не помог, я делаю выход на полевик а он уже и управляет нагрузкой. Если маленькую емкость поставить то писк идет всеравно, а если микрофарад 10 -20 то регулеровки вообще нет, вернее она наверно есть но в малых пределах и никак не ощущается. В этой теме очень хорошо написано как изменить частоту , но только на UNO. Если бы так просто можно было сменить на тиньке, было бы не плохо.
У меня заработал ацп на внутреннем опорнике)))))
просто меняете в первой строке. для VCC в качестве опорника должно быть
а для внутреннего опорника 1,1В поставить эту строку
теперь не придется в драйвере для фонарика ставить стабилизатор)))
вот 2 фото. 1 фото опорник питание 5В, на вход подаю 5В получаю 1023 как и должно быть
2 фото внутренний опорник 1.1В, на вход подаю 1.1В и получаю также 1023
Можеш скинуть файли протеуса и код.
Мне кондер вообще не помог, я делаю выход на полевик а он уже и управляет нагрузкой. Если маленькую емкость поставить то писк идет всеравно, а если микрофарад 10 -20 то регулеровки вообще нет, вернее она наверно есть но в малых пределах и никак не ощущается. В этой теме очень хорошо написано как изменить частоту , но только на UNO. Если бы так просто можно было сменить на тиньке, было бы не плохо.
А что тот код который давал jeka_tm не катит?
Да он конечно катит)) И большое спасибо ему за пояснения. Завтра буду пробовать. Попробую скрестить с (ардуиновским) языком если получится.
Кстати, если очень большие шаги ШИМ попробуй вот это.
Да, я уже исправил. Я выше спрашивал.... Все стало нормально.
Сейчас подставил в код значения те что дал jeka_tm , компилятор не ругается, завтра попробую добавить то же для второго порта и попробую загрузить и проверить как работает..
как удалять сообщения если они получились 2 раза?
пожалуйста
и протеус
http://yadi.sk/d/zAsxMuQzCS9NU
прошивку сами скомпилируйте
Спасибо, теперь будет чем занятся.
Странно(, загрузил чисто этот скетч Вентелятор крутится и пищит. Поробовал менять значения шим, все работает скорость меняется но писк остается.
Странно(, загрузил чисто этот скетч Вентелятор крутится и пищит. Поробовал менять значения шим, все работает скорость меняется но писк остается.
вместо вентилятора подцепи обычный мотор и посмотри
а также открой файл boards и посмотри у нас частота одинаковая стоит и фьюзы или нет. если нет сделай как у меня. я измерял частоту на макетке все четко. у вас возможно стоит делитель на 8, и получается частота в 8 раз ниже
Записал так , писк исчез. Хотя мотор висит на пятой ноге, т.е PB0