ATtiny13A 101 применение

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Для того чтобы прочитать текущее состояние любого вывода или всего порта, используется регистр PINx, где “x” имя порта. Чтение состояния вывода можно производить при любых настройках вывода : будь то вход, выход или альтернативная функция вывода. Также регистр PINx можно только читать (Read only).

unsigned char pin_value; // переменная для хранения состояний выводов
 pin_value = PINB; // читаем состояние порта B

http://makesystem.net/?p=896

sp34
Offline
Зарегистрирован: 05.03.2013

С горем пополам , но осилел , прочитал с порта (B) конкретный pin(4) и присвоим это значение переменной.

boolean key  =  PINB&(1<<PB4);

Спасибо за помощь ! а гуру молчат 2-й день  , не знают наверное........

 

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Хотел бы поднять эту тему так как есть задача сделать ШИМ регулятор, только частота ШИМ"а в районе 5 кГц, а можно как-то увеличить частоту ШИМ с 5 кГц до скажем 25-30 кГц? Чтобы не слышать этот дурацкий писк.

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

maksim пишет:

Нет, про среду я ничего не говорю, она кстати, не имеет практически никаких ограничений - хоть на асме пишите, а вот некоторые дуиновские функции... все равно в итоге от них откажитесь.

А как на асме писать в среде Arduino, я когда брал чужой код с кусками асма и IDE ругалась, нужно библиотеку какую-то подключить или ещё что?

maksim
Offline
Зарегистрирован: 12.02.2012

http://www.nongnu.org/avr-libc/user-manual/inline_asm.html

Блинк на асме:

#define LEDPORT PORTB    // Arduino pin 13 is bit 5 of port B
#define LEDPORT_DIR DDRB
#define LEDBIT 5

// The setup() method runs once, when the sketch starts
// For this example, we're going to put ALL of our code in setup, and
// never actually return...

void setup()   {

  asm volatile (
  "sbi %[portdir], %[lbit]    \n"    // Set bit direction
  
  "3:"                                        // main loop label
  "  sbi %[port], %[lbit]     \n"                 //  Turn on.
  "  clr r16  \n"
  "  clr r17  \n"
  "  ldi r18, 81              \n"   // 100 * 256
  
  "1:"  // 1st delay loop label
  "  dec r16                  \n"
  "  brne 1b                  \n"
  "  dec r17                  \n"
  "  brne 1b                  \n"
  "  dec r18                  \n"
  "  brne 1b                  \n"

  "cbi   %[port], %[lbit]     \n"             // Turn off.
  "clr r16                    \n"
  "clr r17                    \n"
  "ldi r18, 81                \n"
  
  "2:"  // 2nd delay loop label
  "  dec r16                  \n"
  "  brne 2b                  \n"
  "  dec r17                  \n"
  "  brne 2b                  \n"
  "  dec r18                  \n"
  "  brne 2b                  \n"
  "  rjmp 3b                  \n"
:
: 
  [portdir] "I" (_SFR_IO_ADDR(LEDPORT_DIR)),
  [port] "I" (_SFR_IO_ADDR(LEDPORT)),
  [lbit] "I" (LEDBIT)
    );
}

// Note that we never get to loop, since setup above loops forever.
void loop()                     
{
}

 

Сяу Ляу Вей
Offline
Зарегистрирован: 25.10.2013

Илья73 пишет:
Прошиваю с помощью arduino uno, в программе выбираю плату "Attiny13", програматор выбираю "arduino as ISP",пробовал просто загружать и "загрузить с помощью программатора".

А мог ли я тиньку убить? До этого у меня на дуино был загружен другой скетч который использовал выводы в том числе и те которые идут на программирование тиньки, и тиньку я подключал с работающим скетчем на ардуино.

например у меня в ардуино 1-0-5 в меню нет платы  "Attiny13",  вы как-то ее искуственно добавляли?

MaksMS
Offline
Зарегистрирован: 11.03.2013

Сяу Ляу Вей пишет:

например у меня в ардуино 1-0-5 в меню нет платы  "Attiny13",  вы как-то ее искуственно добавляли?

Легко,если почитать эту тему сначала..

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Вначале темы силка нерабочая, вот, закидаете содержимое архива куда надо, перезагружаете IDE - вуаля.

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Хватит ли тиньки и дуиновских функций для того чтобы генерить ШИМом на двух портах вот таким от образом:

Тоесть при помощи ШИМ сделать синус частотой в 50 герц, первое что приходит в голову - цикл фор с делеймикросекондс, тоесть каждые там столько-то микросекунд увеличат ШИМ на один шаг, при достижении пика уменьшать...

Читал что высокочастотную составляющую потом выравнивают при помощи фильтра НЧ состоящего из дроселя и конденсатора, за счёт такого подхода КПД преобразователя увеличивается, ведь транзисторы работают в ключевом режиме.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Поделюсь своими изысканиями

Аппаратный ШИМ на Attiny13

int i;
void setup() 
{ 
//Настройка порта
PORTB=0x00;
DDRB=0x01;
//Настройка аппаратного ШИМ 
TCCR0A=0x83;
TCCR0B=0x01;
OCR0A=0x00;
} 

void loop() 
{ 
for (i=0;i<255;i++){ 
      OCR0A=i; 
      } 
      for (i=255;i>0;i--){ 
      OCR0A=i;
      } 
} 

Настройка и считывание с ADC0 значение АЦП и управление шимом

int i;
#define ADC_VREF_TYPE 0x00

void setup() 
{ 
// Настройка портов
PORTB=0x00;
DDRB=0x01;
// Настройка аппаратного ШИМ
TCCR0A=0x83;
TCCR0B=0x0B;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;
// Настройка АЦП
DIDR0&=0x03;
DIDR0|=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0xA7;
ADCSRB&=0xF8;
} 

void loop() 
{ 
OCR0A = (read_adc(0))/4;
} 

//функция измерения АЦП
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

правда пока незнаю как запустить АЦП на внутреннем опорнике

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Оу, спасибо.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

HWman пишет:

Оу, спасибо.

не торопитесь. я протестировал только в протеусе. в железе еще не проверял

возможно разобрался с внутренним опорником

если заменить в начале

#define ADC_VREF_TYPE 0x00

на

#define ADC_VREF_TYPE 0x40

то должен от внутреннего. но я еще не проверял

нужно как проверить что он намерил. хотел UART подцепить, но пока не осилил. поэтому на данный момент цепляю 4 разрядный 7 сегментный дисплей через 74HC595. и тогда уже точно буду знать что он намерял

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Вот тут есть парочка интересных вещей.

MaksMS
Offline
Зарегистрирован: 11.03.2013

Attiny13/25/45/85 очень простые в написании кода прямо в обычном "блокноте" с подсветкой синтаксиса и компилятором avr-gcc (в линуксе) или на windows - winavr. Код получается мелкий и можно много чего запихать даже в  attiny13.Например недавно запихал код беспроводного датчика влажности/температуры на базе радиомодулей 433 мгц/315мгц :).

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

MaksMS полностью согласен) пихать ардуино в тиньку это как пихать виннипуха в нору к зайцу) на голодную пролезет, но при первом же аппетите труба)

а зачем winavr? Он оправдан только если компьютер такой же древний как и сам winavr)

MaksMS
Offline
Зарегистрирован: 11.03.2013

Ну это как пример.Я использую avr-gcc т.к. сижу все время в линуксе...

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

напомните кто помнит в какой теме была выложена программа для АЦП написанная одни из форумчан, там было напряжение питания, разрядность ацп и еще что. небольшая программа была,  я там еще автору предлагал добавить расчет для шунта

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

У меня заработал ацп на внутреннем опорнике)))))

просто меняете в первой строке. для VCC в качестве опорника должно быть

#define ADC_VREF_TYPE 0x00

а для внутреннего опорника 1,1В поставить эту строку

#define ADC_VREF_TYPE 0x40

теперь не придется в драйвере для фонарика ставить стабилизатор)))

вот 2 фото. 1 фото опорник питание 5В, на вход подаю 5В получаю 1023 как и должно быть

2 фото внутренний опорник 1.1В, на вход подаю 1.1В и получаю также 1023

mtone
Offline
Зарегистрирован: 04.11.2013

HWman пишет:

Итак, уже давненько появился способ программировать маленькие, дешёвые, маложрущие и доступные микрухи ATtiny13A

за сколько можно купить такую плату с Atiny13A, что то они стоят дороже UNO ?  По шелкографии вижу - заводская.

 

самая дешевая пустая плата за 6 долларов :   http://www.ebay.com/itm/eeZee-Tiny-8-pin-ATtiny-breakout-target-board-/331037022186?pt=LH_DefaultDomain_0&hash=item4d135817ea

 

mtone
Offline
Зарегистрирован: 04.11.2013

HWman пишет:
Но это не то, это вообще баловство, может мне подскажет кто в какую сторону смотреть?

Это будет "отпугиватель птиц" для огорода, всё что я напаяю/моделирую/на программирую, я всё выложу сюда на форум в свободный доступ, главное разобраться с прошивкой, тини идеально подходит для таких проектов...  

знам, знам это будет ультразвуковой отпугиватель преподавателей на лекции

нехрена баловться

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Одна тинька без этой готовой платки стоит реально копейки, такую платку можно сделать самому.

http://research.andbas.com/2012/09/arduino-isp-programmer-for-attiny-45-...

MaksMS
Offline
Зарегистрирован: 11.03.2013

Не понимаю ,чего сложного взять макетки типа таких http://www.ebay.com/itm/250976573749 и натыкать всяких разъемов ,например таких http://www.ebay.com/itm/261030252314 -вот и готова макетка.

Было бы тут чего паять - всего 8 ножек !!! Сам готовые ардуино платы использую только для  опытов и проектирования,а конечные схемы всеравно лучше сделать отдельным устройством( можно и без кварца- тогда ещё +2 вывода можем использовать. ).Исключение - мега1280/2560 -тут очень мелкий корпус м/к.

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

согласен. зачем. я вот себе за 10 минут набросал плату, и еще от делать нечего полчаса оптимизировал

блин только сейчас заметил что питание не вывел на макетку))))

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Переделал

вот ссылка на печатку в формате Diptrace

http://yadi.sk/d/QySm8OuSCDMYV

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

jeka_tm пишет:

напомните кто помнит в какой теме была выложена программа для АЦП написанная одни из форумчан, там было напряжение питания, разрядность ацп и еще что. небольшая программа была,  я там еще автору предлагал добавить расчет для шунта

http://arduino.ru/forum/obshchii/adc-calc

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

HWman пишет:

jeka_tm пишет:

напомните кто помнит в какой теме была выложена программа для АЦП написанная одни из форумчан, там было напряжение питания, разрядность ацп и еще что. небольшая программа была,  я там еще автору предлагал добавить расчет для шунта

http://arduino.ru/forum/obshchii/adc-calc

спасибо. вы ее дорабатывать будете? есть ряд предложений

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Возможно, какие предложения?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

отвечу в теме программы

Илья73
Offline
Зарегистрирован: 06.09.2013

Собрал на макетке управление двумя вентеляторами для охлождения зарядки, потестил пока на UNO. Писк не понравился, повысил частоту ШИМ нашел на этом форуме как это сделать, все стало нормально. Но как повысить на тине не знаю, то что написано чуть выше не по мне... не понимаю. Вычитал что можно отключить фьюз CKDIV8, как это можно сделать что нужно написать в коде?

MaksMS
Offline
Зарегистрирован: 11.03.2013

Илья73 пишет:

Собрал на макетке управление двумя вентеляторами для охлождения зарядки, потестил пока на UNO. Писк не понравился, повысил частоту ШИМ нашел на этом форуме как это сделать, все стало нормально. Но как повысить на тине не знаю, то что написано чуть выше не по мне... не понимаю. Вычитал что можно отключить фьюз CKDIV8, как это можно сделать что нужно написать в коде?

CKDIV8 - это  делитель частоты на 8 внутреннего задающего генератора,устанавливается через фьюзы,а не в коде программы.

Илья73
Offline
Зарегистрирован: 06.09.2013

Понятно :( Жаль что не получается это сделать просто. Вроде бы все получилось быстро и без проблем, спаял на макетке схемку на два вентелятора, написал простенький код на "дуиновском" языке, залил, все работает прекрасно и как надо. Но этот писк противный достал...Пробовал RC фильтр, но он не работает как надо...

HWman, решил ли задачку как поднять частоту шим выше звуковых частот?

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

я же выкладывал код для шима. частота 37,5кГц. если услышите повышу частоту)))

Илья73
Offline
Зарегистрирован: 06.09.2013

jeka_tm, да я видел что вы написали))) И спасибо большое за это! Но я как начинающий и еще многого не понимающий, не понял как его применить к своему коду ))) Если бы вы описали в коде что за что отвечает и как оно работает, потому как к сожалению еще с трудом читаю через раз "ардуиновский" код,  а этот даже не понимаю на каком языке ))))

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

все просто. для шим на PB0 нужно сделать так

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 этим вы регулируете шим
} 

 

Илья73
Offline
Зарегистрирован: 06.09.2013

jeka_tm спасибо! Логика стала понятна.

Но вот возможно ли скрестить эти настройки с этим кодом.


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);
 }
}

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ну код неоптимален на самом деле в лишней строке. а далее почему digitalWrite если вы используете шим. то есть у вас на выходе шим и при определенных условиях вы подаете на тот же выход 1 или 0. я лично не проверял возможно ли такое. завтра напишу с использованием того что я написал выше. сегодня уже времени скорее всего не будет

и кстати вы в курсе что это не нагреватель где шим можно подавать от нуля. если это не обычный мотор а компьютерный вентилятор то работать он будет только от определенного значения напряжения как и светодиод. светодиод тоже не работает от 0 вольт так что шим на самом деле должен быть для компьютерного например от 80 приблизительно. я лично не проверял. зависит также от самого вентилятора. надо проверять опытным путем

Илья73
Offline
Зарегистрирован: 06.09.2013

jeka_tm  Все правильно, шим запускает вентелятор не от нуля, но по ощущениям гдето с 30 точно, это я подправлю.

А digitalWrite поставил после того когда попробовал код в реале. То что масштабируется в районе шим работает нормально, но если А3 меньше чем 340 вентелятор запускается вновь на малой скорости, после 780 он опять переходит в слабый режим работы и как будто шим начинается с нуля, и с ростом температуры начинает увеличиваться снова. Поэтому попробовал останавливать вентелятор по низу 340 и запуск на максимум после 780 digitalWrite, и проблема исчезла. Возможно это не правильно с точки зрения программирования. но в моем случае это работает.

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Илья73 пишет:

HWman, решил ли задачку как поднять частоту шим выше звуковых частот?

Да, добавлением конденсатора 3300 мкФ который подключил в параллель к нагрузке, писк пропал, на выходе прямая линия, правда регулировка как-то уматово осуществляется, но всё работает.

Правда не для мощных нагрузок, но для 3-х ваттного светодиода хватает такой метод вроде как проходит, я тестил - ничего не греется.

ЗЫ в инициализации нужно сделать analogWrite(порт,1) и дать подзарядится конденсатору пару миллисекунд, ато когда он разряжен он как КЗ, транзистор может убить если нету нормального запаса.

 

Илья73
Offline
Зарегистрирован: 06.09.2013

Мне кондер вообще не помог, я делаю выход на полевик а он уже и управляет нагрузкой. Если маленькую емкость поставить то писк идет всеравно, а если микрофарад 10 -20 то регулеровки вообще нет, вернее она наверно есть но в малых пределах и никак не ощущается. В этой теме очень хорошо написано как изменить частоту , но только на UNO. Если бы так просто можно было сменить на тиньке, было бы не плохо.

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

jeka_tm пишет:

У меня заработал ацп на внутреннем опорнике)))))

просто меняете в первой строке. для VCC в качестве опорника должно быть



#define ADC_VREF_TYPE 0x00

а для внутреннего опорника 1,1В поставить эту строку



#define ADC_VREF_TYPE 0x40

теперь не придется в драйвере для фонарика ставить стабилизатор)))

вот 2 фото. 1 фото опорник питание 5В, на вход подаю 5В получаю 1023 как и должно быть

2 фото внутренний опорник 1.1В, на вход подаю 1.1В и получаю также 1023

Можеш скинуть файли протеуса и код.

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Илья73 пишет:

Мне кондер вообще не помог, я делаю выход на полевик а он уже и управляет нагрузкой. Если маленькую емкость поставить то писк идет всеравно, а если микрофарад 10 -20 то регулеровки вообще нет, вернее она наверно есть но в малых пределах и никак не ощущается. В этой теме очень хорошо написано как изменить частоту , но только на UNO. Если бы так просто можно было сменить на тиньке, было бы не плохо.

А что тот код который давал jeka_tm не катит?

Илья73
Offline
Зарегистрирован: 06.09.2013

Да он конечно катит)) И большое спасибо ему за пояснения. Завтра буду пробовать. Попробую скрестить с (ардуиновским) языком если получится.

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Кстати, если очень большие шаги ШИМ попробуй вот это.

Илья73
Offline
Зарегистрирован: 06.09.2013

Да, я уже исправил. Я выше спрашивал.... Все стало нормально.

Сейчас подставил в код значения те что дал jeka_tm , компилятор не ругается, завтра попробую добавить то же для второго порта и попробую загрузить  и проверить как работает..

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

как удалять сообщения если они получились 2 раза?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

пожалуйста

int i;
#define ADC_VREF_TYPE 0x40  //0x40 вроде так запустить от внутреннего опорника

byte data = 0;
byte clock = 1;
byte latch = 2;


void setup() 
{ 
  // Настройка портов
  PORTB=0x00;
  DDRB=0b000111;
  // Настройка АЦП
  DIDR0&=0x03;
  DIDR0|=0x00;
  ADMUX=ADC_VREF_TYPE & 0xff;
  ADCSRA=0xA7;
  ADCSRB&=0xF8;
} 

void loop() 
{
  digit(read_adc(0));
}

//функция измерения АЦП
unsigned int read_adc(unsigned char adc_input)
{
  ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
  delay(10);
  ADCSRA|=0x40;
  while ((ADCSRA & 0x10)==0);
  ADCSRA|=0x10;
  return ADCW;
}


void digit(int val){
  byte dig_1 = val%10;  //1 цифра часов
  val = val/10;  //1 цифра часов
  byte dig_2 = val%10;  //2 цифра часов
  val = val/10;  //1 цифра часов
  byte dig_3 = val%10;  //3 цифра часов
  val = val/10;  //1 цифра часов
  byte dig_4 = val%10;  //4 цифра часов

  daml(dig_1, 8);
  daml(dig_2, 4);
  daml(dig_3, 2);
  daml(dig_4, 1);
}

void daml(byte val, byte dig){
  switch (val) {
  case 0:
    d_out(64,dig);
    break;
  case 1:
    d_out(121,dig);
    break;
  case 2:
    d_out(36,dig);
    break;
  case 3:
    d_out(48,dig);
    break;
  case 4:
    d_out(25,dig);
    break;
  case 5:
    d_out(18,dig);
    break;
  case 6:
    d_out(2,dig);
    break;
  case 7:
    d_out(120,dig);
    break;
  case 8:
    d_out(0,dig);
    break;
  case 9:
    d_out(16,dig);
    break;

  }
}

void d_out(byte val, byte dig){
  digitalWrite(latch,LOW);
  shiftOut(data, clock, MSBFIRST, dig);
  shiftOut(data, clock, MSBFIRST, val);
  digitalWrite(latch,HIGH);
}

и протеус

http://yadi.sk/d/zAsxMuQzCS9NU

прошивку сами скомпилируйте

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Спасибо, теперь будет чем занятся.

Илья73
Offline
Зарегистрирован: 06.09.2013

Странно(, загрузил чисто  этот скетч Вентелятор крутится и пищит. Поробовал менять значения шим, все работает скорость меняется но писк остается.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Илья73 пишет:

Странно(, загрузил чисто  этот скетч Вентелятор крутится и пищит. Поробовал менять значения шим, все работает скорость меняется но писк остается.

вместо вентилятора подцепи обычный мотор и посмотри

а также открой файл boards и посмотри у нас частота одинаковая стоит и фьюзы или нет. если нет сделай как у меня. я измерял частоту на макетке все четко. у вас возможно стоит делитель на 8, и получается частота в 8 раз ниже

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=9600000L
attiny13.build.core=core13

 

Илья73
Offline
Зарегистрирован: 06.09.2013
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