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

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

HWman пишет:

PB5 это ресет, использовать его неполучится если фюзы не сменить, кстати, у меня получается использовато только ногу PB3 в качестве АЦП, другие почуму-то нехотят.

если фьюзы сменить получится ли потом его еще раз прошить?

да и так выводов достаточно. если мало мега8 стоит немного дороже тиньки13

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

jeka_tm пишет:

если фьюзы сменить получится ли потом его еще раз прошить?

По SPI нет.

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

тогда лучше не использовать

kazakoff
Offline
Зарегистрирован: 07.06.2013

Хмм тему эту еще не видел.

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

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

Интересно почему один и тодже код на attiny13 весит 680 байт , а залив его в NANO V7 он становится уже 3 с лишним кб ?

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

Как минимум больше ножек и регистров(фишек).

kazakoff
Offline
Зарегистрирован: 07.06.2013

Кто нить пытался на тиньке 85 сделать HID USB клавиатуру?

Я сделал на ардуинке вот по этой статье http://mosaic.cnfolio.com/B202Coursework2012DesignReport2

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

Решил проверить тиньку. на PB1 подал шим то уменьшающийся то увеличивающийся . подключил светодиод. светодиод горит не на полную и все. ничего не понял думал что то неправильно сделал. и только потом промоделировал в протеусе. частота увеличения и уменьшения максимума была слишком большая. около 300 герц. глаз просто не успевал увидеть. поставил теперь задержек. проверю отпишусь

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

jeka_tm пишет:

Решил проверить тиньку. на PB1 подал шим то уменьшающийся то увеличивающийся . подключил светодиод. светодиод горит не на полную и все. ничего не понял думал что то неправильно сделал. и только потом промоделировал в протеусе. частота увеличения и уменьшения максимума была слишком большая. около 300 герц. глаз просто не успевал увидеть. поставил теперь задержек. проверю отпишусь

так как в тине програмки очень короткие , то частота LOOP приличная - тоже сначала непонял в чем дело , но потом использовал библиотеку <util/delay.h>  и при прописал в сроке увеличения ШИМ  _delay_ms(5);

получил плавное увеличение яркости от 0-255 примерно за 1,5-2 сек. - скетч почти невырос в размере !!!

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

sp34 пишет:

jeka_tm пишет:

Решил проверить тиньку. на PB1 подал шим то уменьшающийся то увеличивающийся . подключил светодиод. светодиод горит не на полную и все. ничего не понял думал что то неправильно сделал. и только потом промоделировал в протеусе. частота увеличения и уменьшения максимума была слишком большая. около 300 герц. глаз просто не успевал увидеть. поставил теперь задержек. проверю отпишусь

так как в тине програмки очень короткие , то частота LOOP приличная - тоже сначала непонял в чем дело , но потом использовал библиотеку <util/delay.h>  и при прописал в сроке увеличения ШИМ  _delay_ms(5);

получил плавное увеличение яркости от 0-255 примерно за 1,5-2 сек. - скетч почти невырос в размере !!!

я использовал стандартный delay/ тоже будет набирать яркость примерно за 2 секунды. уже прошил вечермо проверю что получилось

//                 +-\/-+
// ADC0 (D 5) PB5 1|    |8 Vcc
// ADC3 (D 3) PB3 2|    |7 PB2 (D 2) ADC1
// ADC2 (D 4) PB4 3|    |6 PB1 (D 1) PWM1
//            GND 4|    |5 PB0 (D 0) PWM0
void setup(){
  pinMode(PB1, OUTPUT);
}

void loop(){
  for (int i = 0; i < 200; i++) {
    analogWrite(PB1,i);
    delay(50);
    }
  for (int i = 200; i > 0; i--) {
    analogWrite(PB1,i);
    delay(50);
    
  }
}

 

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

Зашивал стандартний fade всё вроде работало что на РВ0 что на РВ1.

А вот использовать АЦП удалось только на ноге PB3, на других ничего.

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

HWman пишет:

Зашивал стандартний fade всё вроде работало что на РВ0 что на РВ1.

А вот использовать АЦП удалось только на ноге PB3, на других ничего.

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

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

Ну эт если в даташите нет, там много интересного, ещё бы английский знать...

Кстати, насчёт опорного напряжения, кто понимает английский прочтите пожалуйста несколько постов из этой ветки, возможно там нашли решение, я несовсем понимаю что они пишут.

 

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

HWman пишет:

Ну эт если в даташите нет, там много интересного, ещё бы английский знать...

Кстати, насчёт опорного напряжения, кто понимает английский прочтите пожалуйста несколько постов из этой ветки, возможно там нашли решение, я несовсем понимаю что они пишут.

 

насчет опорного обещали в следующей версии исправить

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

Ну и хорошо, буду ждать.

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

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

HWman пишет:

Ну и хорошо, буду ждать.

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

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

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

У меня ATtiny 13A корпуса двух видов , на них точно работают аналоговые входы ADC2 , ADC3 как там ADC1 незнаю он у меня цифровой вход - тоже все ок.

Проблема в следующем - как сделать плавное наростание яркости LED - скажем за интервал 3 сек или 10 сек

, без delay -уж слишком тормозит он тиню .

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

sp34 пишет:

У меня ATtiny 13A корпуса двух видов , на них точно работают аналоговые входы ADC2 , ADC3 как там ADC1 незнаю он у меня цифровой вход - тоже все ок.

Пример кода который 100% работает можешь привести?

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

HWman пишет:

Пример кода который 100% работает можешь привести?

Все стандартно как в примерах , ничего мудренного !

void loop;

{

int V = analogRead(A3);// - (2 нога attiny 13a)

int V_2 = analogRead(A2);// - (3 нога attiny 13a)

}

вот так я решил с более медленным чем 2сек увиличением яркости

 byte del =0; // - byte для оптимизации кода
void setup(){
 pinMode(0,OUTPUT);
}
void loop(){
 analogWrite(0, brightness);
 if(условие плавного включения LED)
   {
     del++;
     if(del==15){brightness++;del=0;} // - количество циклов loop ( каждый 15-й +1)
    // - включение на постоянную
     if(brightness==254){brightness=255;}

   }
}

 

 

 

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

jeka_tm пишет:

насчет опорного обещали в следующей версии исправить

Вот тут что-то пишут что заработало если немного подправить wiring.h в папке C:\Users\Администратор\Documents\Arduino\hardware\attiny13\cores\core13

Цитирую "Seems to work reasonably well between INTERNAL and EXTERNAL settings."

И вот тестовый код:




int led = 3;
const int inPin = 2;    // analog in, to ADC2 for temp sensor TMP36, pin 3 on ATtiny13

void setup() {                
  pinMode(led, OUTPUT);

  // initialize the ADC voltage reference
  analogReference(EXTERNAL);    // Vref = Vcc
//  analogReference(INTERNAL);    // Vref = 1.1V
}

void loop() {
  // Read temperature sensor
  int value = analogRead(inPin);
//  float millivolts = (value / 1024.0) * 1100;  // Internal 1.1V
//  float millivolts = (value / 1024.0) * 4800;  // External VCC 4.8V
//  float celsius = (millivolts / 10.0) - 50;    // TMP 36 offset
//  float fahrenheit = (celsius *9)/5 + 32;

//  if ( value > 692) {  // Internal threshold for temp 76 deg
  if ( value > 158) {  // External theshold for temp 76 deg
     digitalWrite(led, HIGH);   // temp above threshold
  } else {
     digitalWrite(led, LOW);    // temp equal or below threshold
  }
  delay(1000);
}

 

Кто что думает по этому поводу? Неужели получится сделать амперметр без использования каких-то ОУ из тиньки?

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

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

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


Ненравится как работает PWM на ATtiny13A - при шаге возростания яркости 1 было такое впечатление что он равен 20-30

открыл файл core13 и в нем wiring_analog.c

#include "wiring_private.h"
//#include "pins_arduino.h"
void analogReference(char bla){}//Not supported
int analogRead(uint8_t pin){
	uint8_t l,h;
	ADMUX = (1<<REFS0) | pin & 7; //Setup ADC
	ADCSRA |= _BV(ADSC);	
	while(ADCSRA & 1<<ADSC); //Wait for conversion
	l = ADCL;  //Read and return 10 bit result
	h = ADCH;
	return (h << 8)|l; 
}
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 / 16) * 16;
		}
		if(pin == 0){
			TCCR0A |= (1 << COM0A1);
			OCR0A = (val / 16) * 16;
		}
	}
}

Изменил в нем не понятное по смыслу уравнение ( математически равно одному и томуже числу ) и все заработало ровно как должно !


		if(pin == 1){
			TCCR0A |= (1 << COM0B1);
			OCR0B = val ;
		}
		if(pin == 0){
			TCCR0A |= (1 << COM0A1);
			OCR0A = val ;
		}
	}
}

Просмотрел все версии core15 по 18 - во всех не понятное уравнение !

Вопрос к знатокам форума : 

Для чего это уравнение ,  если я оставлю по своему варианту на что это может повлиять ?

 

toc
Offline
Зарегистрирован: 09.02.2013
По-моему, это 
 
OCR0A = (val / 16) * 16;

непонятное уравнения превращает 

нормальные значения val от 0 до 255, в том числе 0,1,2,3,4,5...253,254,255 (256 различных значений)
в
хитрые значения val от 0 до 255, в том числе 0,16,32,64,128,255 (16 различных значений).
Зачем оно, не знаю.
sp34
Offline
Зарегистрирован: 05.03.2013

По поведению ШИМ - все как вы описываете совпадает с реальностью , но с математической полный ахтунг , ведь нет никаких выражений округления и приравнивания , получается шаг = 1 уже равен 16 , а отсюда и неравномерное возрастание ШИМ.

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

хм... и для чего это сделали?

Может забыть о analogWrite(*) и использовать родную функцию для тини?

Вот только жаль что наглядность кода теряется...

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

HWman пишет:

Может забыть о analogWrite(*) и использовать родную функцию для тини?

Вот только жаль что наглядность кода теряется...

А как пишется в коде родная функция ATtiny?

 

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

Имеется в виду не на процесинге а на Си.

Я бы сам не против посмотреть как пишется, а если бы ешё и в IDE Arduino функция компилировалась без ошибок то было вообще отлично.

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

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

Конечно не зря , но для чего ? - хочется знать т.к лично для моей задачи на ATtiny ( оно мне мешает и я пока поюзаю без него ) если выскочит какой баг отпишусь !

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

Мне кажется тут можно узнать для чего сделали только 16 шагов ШИМ а не 255, только нужно знать английский.

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

Подскажите пожалуйста в чем может быть проблема  с Attiny13.  Все сделал вроде бы правильно

пользовался материалами от сюда

потом от сюда , тут вроде более свежие установки.

Немного было сложностей с папками, но вроде все получилось... Подключил тини как по первой ссылке с конденсатором.

 

Скетч не загружается  и выдает вот такую ошибку.

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

Потом все разобрал и собрал заново, проверил раз пять подключение. Все тоже..

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

Загружаем скетч с помощью кнопки "загрузить с помощью программатора" ? Через что прошиваем м/к ?

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

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

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

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

Если установили фьюз RSTDISBL (Reset Disabled) ,который переключает назначение ножки reset как вход/выход,то прошить через SPI сейчас нельзя.

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

 

ATtiny Pin 2 to Arduino Pin 13 (or SCK of another programmer)
ATtiny Pin 1 to Arduino Pin 12 (or MISO of another programmer)
ATtiny Pin 0 to Arduino Pin 11 (or MOSI of another programmer)
ATtiny Reset Pin to Arduino Pin 10 (or RESET of another programmer)

Светодиод опционально.

Карта пинов тиньки:

http://hwman.ho.ua/files/ATtiny13A101/attiny13.zip (добавьте в первый пост ато там битая силка)

У меня эти файлы лежат "C:\Users\Пользователь\Documents\Arduino\hardware"

В конце заливки должно красный писать:

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

Если да - всё норм.

PS Когда будешь использовать АЦП обязательно пиши А1-3, я долго с этим тупил и пользовался только Pin3.

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

HWman, спасибо!

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

 

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

У меня так же пишет на убитой тиньке, вполне возможно что что-то сделали не так.

 

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

Интересно как поведёт себя тиньнька если я зашью в неё analogWrite(led, level); например analogWrite(0, 122);  на выходе будет примерно 2.2В - 2.4 В но это  если напряжение питания тиньки 5 В, а что если запитать от, скажем, элемента 18650(4.2-3.3 В) то напряжение на выходе тиньки будет падать пропорционально входящему напряжению, верно?

И ещё вопрос, при понижении питания камень тормозится, это понятно, а как это скажется в моём случае, функция analogWrite(led, level); случайно не утратит своё значение в 122?

leshak
Offline
Зарегистрирован: 29.09.2011

HWman пишет:

Интересно как поведёт себя тиньнька если я зашью в неё analogWrite(led, level); например analogWrite(0, 122);  на выходе будет примерно 2.2В - 2.4 В но это  если напряжение питания тиньки 5 В, а что если запитать от, скажем, элемента 18650(4.2-3.3 В) то напряжение на выходе тиньки будет падать пропорционально входящему напряжению, верно?

Неверно. Во всех случаях на выходе будет напряжение питания. Читайте чем занимается Функция analogWrite() | Аппаратная платформа Arduino

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

Про тормозится не слышал, может перезагружаться

Но это можно отключить во фьюзах изменяя BODLEVEL

можно выставить 4.3В, 2,7В, 1,8В или вообще отключить. но вы должны понимать что делаете и к чему это может привести

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

 

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

Ура! Сегодня купил тиньку правда в другом корпусе, пришлось ноги подпаивать под макетку. Воткнул, подключил, зашил блинк, все работает!

HWman,  Спасибо!

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

С тебя интересный проект на тиньке ;)

Я вот драйвер для мощного светодиода делаю под аккумы 18650.

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

Я тут кстати планирую контроллер для зарядки от солнца сделать. Заказал в китае готовый, но похоже он уже не придет :(, деньги то китайцы через пай пал вернут, а вот контроллер уже повторно наверно заказывать не буду. Попробую сам сделать. Если вы не против то как начну, могу продолжить в вашей теме если не против конечно.

Еще хочу тиньки использовать как мини BMS (контроллер побаночный включая балансир на каждую банку) для LiPo батарей. Потому как скопилось таких батарей достаточно, большие токи они уже не отдают, но шуруповерт еще крутят получше чем новые NiCd, да и в ту же солнечную батарею пойдут.

В общем зима длинная буду всякие игрушки себе собирать.

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

А какая частота ШИМ в тиньки при если в IDE выбрать ATtiny13 @ 9.6 Мгц ?

И ещё один вопросик, изменяется ли частота ШИМа тиньки при понижении напряжения? Чисто эксперимента ради зашивал в тиньку блинк, мигала вроде бы с одинаковой частотой что при напряжении 3 В что при 5 В что наталкивает на мысль что частота будет относительно стабильной...

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

Шим мне не понравился, рывками как то.

Ставил фоторезистор на аналоговый вход и на цифровой выход светодиод. При затемнении фоторезистора светик загорается. Пробовал на 5в, на 3.3в и от двух АА аккумуляторов т.е 2.4 в, ни какокой разницы в включении светодиода не заметил, схема работала стабильно.

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

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

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

Чтобы ШИМ небыл рывками то прочитай это, я юзаю, вроде проблем не наблюдаю.

sp34
Offline
Зарегистрирован: 05.03.2013
Есть условие
 if(digitalRead(4)==LOW)
  { xxxxxxxxxx;}
 
Как прописать его примерно в таком виде (PORTB&(1<<PB4) для экономии места в скетче ?
 
HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Вот функцыя digitalRead() изнутри:

uint8_t digitalRead(uint8_t pin){
if(pin > 5 || pin < 0){return 0;}
if(pin < 2) turnOffPWM(pin); //If its PWM pin, makes sure the PWM is off
return !!(PINB & _BV(pin));
}

 

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

Ну то что она состоит из кучки команд - это понятно ( отсюда и вес )

А как считывать напрямую из порта его состояние - что то не найду ни в справочниках по С++ ни в Google ( может плохо ищу ) ?

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

Попробуйте return !!(PINB & _BV(Ваш порт));

 

Экспериментальным путём( прораммой анализатором спектра на телефоне замерял писк мотора) было установлено что частота ШИМ для core13 - около 5кГц.

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

HWman пишет:

Попробуйте return !!(PINB & _BV(Ваш порт));

Не хочет компилировать с return , пробовал библиотеку подкидывать как в wiring_digital.c - нет результата !