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

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

читайте выше

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

А как считать частоту ШИМа? (37,5кГц / 83) * нужная частота?

К примеру, я хочу получить ШИМ с частотой в 250 Гц как же её получить?

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

http://www.youtube.com/watch?v=ear2PrT8iKg

Вот код:



boolean aR = LOW; 
byte data = 0;
byte clock = 1;
byte latch = 2;

unsigned long time;
unsigned long time1;
unsigned int interval = 5000; 

void setup() 
{ 
  // Настройка портов
  PORTB=0x00;
  DDRB=0b000111;

} 

void loop() 
{
  time = millis(); // из примера блинк без делея
  if(time - time1 > interval){
    time1 = time;
    aR = !aR;
    if(aR == LOW){
      analogReference(INTERNAL); // опорник
    }
    else{
      analogReference(EXTERNAL); // обычно
    }  
  } 
  digit(analogRead(A2));
}

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

"Размер скетча в двоичном коде: 1 016 байт (из 1 024 байт максимум)" - ели залез.

У кого есть возможность потестировать в железе?

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

HWman пишет:

А как считать частоту ШИМа? (37,5кГц / 83) * нужная частота?

К примеру, я хочу получить ШИМ с частотой в 250 Гц как же её получить?

незнаю зачем такая низкая. но тут связано с делителями и частотой микроконтроллера

например ближайшую частоту (без внешних кварцев)  можно сделать если запустить микроконтроллер на внутреннем генераторе 128кГц без делителя и при этом мы можем получить следующие частоты ШИМ:

128кГц

16кГц

2кГц

500Гц

125Гц

Если добавить делитель на 2 то получаем:

64кГЦ

8кГЦ

1кГЦ

250Гц

63Гц

Повезло. на внутреннем генераторе можно получить 250Гц, но частота микроконтроллера при этом всего 64кГц. если не нужно высокая скорость расчетов и и важно пониженное потребление то пожалуйста. для драйвера светодиода думаю как раз работать на 128кГц

 

toc
Offline
Зарегистрирован: 09.02.2013

Илья73 пишет:

  OCR0A=50;  //сделаем шим на PB0 шириной 50%

50 / 255 = 19,6%  не 50% 
?

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

toc пишет:

Илья73 пишет:

  OCR0A=50;  //сделаем шим на PB0 шириной 50%

50 / 255 = 19,6%  не 50% 
?

он не менял комментарии исходного кода. было 127

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

toc пишет:

Илья73 пишет:

  OCR0A=50;  //сделаем шим на PB0 шириной 50%

50 / 255 = 19,6%  не 50% 
?

он не менял комментарии исходного кода. было 127

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

Что-то случается когда OCR0A=0, немогу увеличить скважность потом почему-то...

функция из ядра виглядит так, файлик wiring_digital.c :

void analogWrite(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 |= (1 << COM0B1);
			OCR0B = val;
		}
		if(pin == 0){
			TCCR0A |= (1 << COM0A1);
			OCR0A = val;
		}
	}
}
jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

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

Просто эта функция работает нормально, проверил неодноразово а Ваш код почему то после 0 отказывается работать.

Вот бы сделать работающую функцию и иметь возможность выставлять частоту ШИМ было бы супер.

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

какая функция работает analogWrite? я незнаю почему при нуле не работает. попробуйте также сделать условия. если поможет значит в этом дело

NikitosZs
NikitosZs аватар
Offline
Зарегистрирован: 26.09.2013

Здравствуйте! Можно ли задействовать функцию Serial на attiny13a? Необходимо получать информацию, отправлять не нужно. Какой пин будет являться RX, если это вообще возможно?

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

Второй код хотя бы компилируется но непонятно что отсылает тинька, тоесть отсылает мусор.

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

HWman пишет:

Второй код хотя бы компилируется но непонятно что отсылает тинька, тоесть отсылает мусор.

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

NikitosZs
NikitosZs аватар
Offline
Зарегистрирован: 26.09.2013

Спасибо за наводки, но для меня это слишком сложно..

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

HWman пишет:

Просто эта функция работает нормально, проверил неодноразово а Ваш код почему то после 0 отказывается работать.

Вот бы сделать работающую функцию и иметь возможность выставлять частоту ШИМ было бы супер.

сделать можно. но вот вопрос как вы будете выставлять частоту шим? она зависит от частоты микроконтроллера, делителя, и делителя для шим. если бы например для 9.6МГЦ без делителя частоты то можно. или для любой другой частоты. а если на все виды частот то тоже можно, но дофига кода. зачем делать на все случаи жизни если это будет отжирать память у тиньки, которая и так маленькая

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

Еще один маленький проект на тини реализовал. Управление двумя вентеляторами в зарядном устройстве.

Спасибо большое за подсказки и помощь jeka_tm  и HWman.

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

красавчик что сделал. видео приложи. как управляется? температурой или переменным резистором?

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

А смысл управлять переменным резистором. :) Там на первой фотке два черных термистора выведены на проводках. Один я заложил между пластин радиатора, тот что на второй фотке большой прямоугольный. А другой под катушку, она сильно греется на больших токах зарядки. Видео не положу уже, собрал все и уже потестировал... Вечером код скину и схемку.

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

ну хорошо. выкладывай. может кому тоже понадобится

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

И код добавьте.

Ого, что это за зарядник такой, как же много транзисторов...

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

Вот код. На самом деле нижнюю температуру можно чуток приподнять. В качестве темодатчиков использовал термисторы, мне понравилось, очень широки  диапазон дают на АЦП, и дешевые!

Зарядное такое


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

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

Пришли attiny13a в SU  корпусе по цене 50 центов за штуку :).. буду пробовать их на своем проекте беспроводного датчика влажности/температуры.

Пока не подержал в руках думал ничего сложного её как нибудь запаять :) а щас даже не знаю..

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

MaksMS пишет:

Пришли attiny13a в SU  корпусе по цене 50 центов за штуку :).. буду пробовать их на своем проекте беспроводного датчика влажности/температуры.

Пока не подержал в руках думал ничего сложного её как нибудь запаять :) а щас даже не знаю..

нормально паяются. вот только непонятно какой радиомодуль будете использовать

случаем не такие?

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

Да ,такие..другие радиомодули и не потянет :)

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

а протокол какой? uart?

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

http://homes-smart.ru/index.php/oborudovanie/bez-provodov-433-315mgts/be...

Прошивка передатчиков на Си ,а приемник может быть на ардуино

NikitosZs
NikitosZs аватар
Offline
Зарегистрирован: 26.09.2013

MaksMS пишет:

Пришли attiny13a в SU  корпусе по цене 50 центов за штуку 

Attiny13-SU имеет корпус SOP-8, а не SU.

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

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

NikitosZs пишет:

Attiny13-SU имеет корпус SOP-8, а не SU.

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

И хотелось бы самой дуинкой прошывать.

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

лушче usbasp купить 

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

Ну я и имел ввиду корпус sop-8...

Прошивается через avrdude - как раз через её чаще всего и прошивают все программы..

На странице беспроводного датчика(когда создается прошивка) как раз описано как прошивать м/к  обычным hex файлом,который можно компилировать в avr-gcc или winavr -windows.

Программатор USBasp купить считаю не лишним,его стоимость 3 бакса ,а ещё его можно перепрограммировать в другие железки и не мучатся с пайкой.

Клапауций
Offline
Зарегистрирован: 10.02.2013

MaksMS пишет:

а ещё его можно перепрограммировать в другие железки и не мучатся с пайкой.

хуже - из него можно сделать дуино

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

ну дуино не интересно,хотя можно без проблем - даже описывал это на сайте,но выводов маловато выведено и в адруино иде нет нормальной возможности использовать усб - по этому только чистый Си..

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

Вроде и не чайник ,но прошить тиньку13 не получается,НИКАК ! хоть через ардуину,хоть через усбасп , одну м/с припаял на "переходник" и пытался провести опыты... вникакую не хотит прошиваться , позже заметил,что на 7 ноге мигает блинк ,а я даже не уверен я ли его туда залил...На кнопку reset не реагирут -как будто отключена Оо .Пытал другие м/к экземпляры попытаясь подключится на макетке без пайки - там блинка нет...

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

Если включен делитель,то обычно помогает параметр -B для занижения скорости,или перемычка 3 на USBasp - ничего не помогает.

Как бы не пришлось паять фьюзе доктор :(..

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

я меня тоже не прошивалось. оказалось прошивка старая и не работает с последними версиями avrdude (через нее прошивается в  ардуине). но прошить можно через eXtreme Burner - AVR или Khazama AVR Programmer. первая особенно удобная. когда пришел второй usbasp, обновил  через eXtreme Burner прошивку на обоих. и теперь шьется через ардуину

Khazama AVR Programmer мне нравится тем что когда по непомнятным причинам (была ситуация с мегой 8) не читалось и не писалось , прочитать все таки ей удавалось. и после этого и eXtreme Burner начинал работать.

Khazama AVR Programmer кстати позволяет настроить частоту CLK. у меня максимум работает на тиньке 12 93,75. выше не хочет, но и не надо. прошивается очень быстро

вопрос кто в курсе в дефолте какая частота и делитель включены в тиньке 13?

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

Прошивки в усбавр обновлял давно на последнюю , шил и через его и через ардуино  - на шьется.

Частота задается и в avrdude через параметр -B ,а так же перемычкой на USBavr.

Обычно по умолчанию должно быть настроено на внутренний генератор и делитель на 8 ,т.е. частота 1.2 мгц.

Марцинов
Offline
Зарегистрирован: 17.11.2013

криво перевожу или криво написано, но сколько входов  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 ...

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

MaksMS пишет:

Прошивки в усбавр обновлял давно на последнюю , шил и через его и через ардуино  - на шьется.

Частота задается и в avrdude через параметр -B ,а так же перемычкой на USBavr.

Обычно по умолчанию должно быть настроено на внутренний генератор и делитель на 8 ,т.е. частота 1.2 мгц.

не шьется? а вы какие фьюзы выставили? может уже залочили

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

м/к только что из упаковки ,Фьюзы не трогал ,только пытался считать инфу через параметр -v  у avrdude.

Написал продавцу ,и возможно буду собирать фьзе доктора чтобы сбросить их...

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

скачай Khazama AVR Programmer. через него убавь в настройках часоту CLK. а потом считай флеш или фьюзы в этой же программе. мне помогало

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

Попробую конечно... Даже ноут с виндой достану.. но думаю управление частотой - то же,что я делал с параметром -B

У одного из м/к точно залочен reset -тут только фьзе доктор поможет ,возможно и у других

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

вы сначала попробуйте. мне ничего не помогало в крайних случаях. у меня 20штук atmega8 пришли. ни одна не работала ни черзе дудку ни даже через eXtreme Burner. я уже подумал все. дохлые. но решил до конца проверить. в чем причина не понял но через ту программу все заработало. а чтобы заработал eXtreme Burner (им удобнее) запускал Khazama AVR Programmer (с измененнным CLK), считывал просто так фьюзы, вижу работает. не выключая Khazama AVR Programmer запускал eXtreme Burner. в нем прошивал фьюзы (9,6мгц без делителя, без BODlevel дальше не помню) и после этого все работало

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

У распаянной м/к зашит блинк - даже не знаю как он там оказался - и программа не сбрасывается ресетом ,вывод: ресет залочен..

Корпус напомню -  SOP-8 , с ним очень сложно возится - панельки нет

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

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

NE_XT
NE_XT аватар
Offline
Зарегистрирован: 22.05.2012

Буду рад, если кто подскажет как и на чём реализовать следующее:

Устройство на ATtiny в неё записать код управления кондиционером (1 команда), код предварительно считать ардуиной, управление  отправки комманды пином с ардуины. Можно всё делать ардуиной, но хочется тинькой. Может кто встречал (или делал)  нечто подобное, гугль что-то много всего выдает, соорентироваться трудно (глаза разбегаются) :) .

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

Ну вот и приближается проверка в железе драйвера фонарика

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

NE_XT пишет:

Буду рад, если кто подскажет как и на чём реализовать следующее:

Устройство на ATtiny в неё записать код управления кондиционером (1 команда), код предварительно считать ардуиной, управление  отправки комманды пином с ардуины. Можно всё делать ардуиной, но хочется тинькой. Может кто встречал (или делал)  нечто подобное, гугль что-то много всего выдает, соорентироваться трудно (глаза разбегаются) :) .

Давайте угадаем что за команду и чем вы хотите отправлять :)

ИК пульт ? через какую библиотеку ?

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

NE_XT
NE_XT аватар
Offline
Зарегистрирован: 22.05.2012

MaksMS пишет:

Давайте угадаем что за команду и чем вы хотите отправлять :)

ИК пульт ? через какую библиотеку ?

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

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

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

ЗЫ. Не надо пустых постов набирать, есть вопрос - нужен ответ,  пустобрёхов никто не любит.

Клапауций
Offline
Зарегистрирован: 10.02.2013

NE_XT пишет:

ЗЫ. Не надо пустых постов набирать, есть вопрос - нужен ответ,  пустобрёхов никто не любит.

правильно - так и поступите, наберите в форумном поиске "кондиционер" и читайте, не нужно пустых постов набирать