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

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

andycat пишет:

Собрал новый.

И самая странность с которой я встретился в следующем:

Прошиваю Attiny85 на 1МГц тем же самым скетчем годовалой давности, который исправно работает до сих пор и он не находит DS18B20 совсем :(

Перебрал массу вариантов, перечитал кучу всего, наткнулся на мысль что МК на частоте 1Мгц не успевает обрабатывать данные, но как то это все работало?

Из изменений за этот год - только новая версия Arduino IDE.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

andycat пишет:

Из изменений за этот год - только новая версия Arduino IDE.

Лучшее враг хорошего???

b707
Offline
Зарегистрирован: 26.05.2017

andycat пишет:

При питании от CR2032 потребление в спящем режиме ~110 мкА.

при емкости CR2032 порядка 220 мА*ч  - батарейки хватает на пару-тройку месяцев?

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

b707 пишет:

andycat пишет:

При питании от CR2032 потребление в спящем режиме ~110 мкА.

при емкости CR2032 порядка 220 мА*ч  - батарейки хватает на пару-тройку месяцев?

сложный вопрос. На другом скетче (частота МК 1Мгц) при потреблении ~35 мкА две параллельные CR2032 совсем китайские (по 10 руб штучка) отработали почти 9 месяцев. Сейчас VARTA поставил...посмотрим. Если хотя бы полгода отработают - меня вполне устроит.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

ua6em пишет:

andycat пишет:

Из изменений за этот год - только новая версия Arduino IDE.

Лучшее враг хорошего???

я то надеялся на лучшее :(

selevo
selevo аватар
Offline
Зарегистрирован: 21.12.2013

есть рабочие примеры эмулятора DS18b20 ? проверял кто ?

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

b707 пишет:

andycat пишет:

При питании от CR2032 потребление в спящем режиме ~110 мкА.

при емкости CR2032 порядка 220 мА*ч  - батарейки хватает на пару-тройку месяцев?

Да, были правы: б/у батарейки Varta через 1.5 месяца померли, напряжение упало до 0.8 вольт, что уже не хватало для работы.
Перепаяю на старую рабочую схему с рабочим напряжением 3.3 вольта или возьму более мощный источник питания.

ELITE
Offline
Зарегистрирован: 11.01.2018

andycat пишет:
b707 пишет:

andycat пишет:

При питании от CR2032 потребление в спящем режиме ~110 мкА.

при емкости CR2032 порядка 220 мА*ч  - батарейки хватает на пару-тройку месяцев?

Да, были правы: б/у батарейки Varta через 1.5 месяца померли, напряжение упало до 0.8 вольт, что уже не хватало для работы. Перепаяю на старую рабочую схему с рабочим напряжением 3.3 вольта или возьму более мощный источник питания.

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

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

ELITE пишет:

 

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

мысль, ссылка на описание/расчет витков и размеров есть? чтоб не искать....

ЗЫ. Вспомнил бородатую историю, как мужик в гараже по всему периметру проволоку намотал и освещение халявное сделал, а все гос службы в населенном пункте голову сломали почему падение сигнала сильное в этом районе.

P.P.S. И сильного источника сигнала нет...деревня, две радиостанции ловит, ТВ только с высокой антеной, мобильник только 2G и то в определенных местах.

ELITE
Offline
Зарегистрирован: 11.01.2018

andycat пишет:

ELITE пишет:

 

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

мысль, ссылка на описание/расчет витков и размеров есть? чтоб не искать....

ЗЫ. Вспомнил бородатую историю, как мужик в гараже по всему периметру проволоку намотал и освещение халявное сделал, а все гос службы в населенном пункте голову сломали почему падение сигнала сильное в этом районе.

P.P.S. И сильного источника сигнала нет...деревня, две радиостанции ловит, ТВ только с высокой антеной, мобильник только 2G и то в определенных местах.

ну тут надо просто пробовать - обычный колебательный контур мотаете и старый переменный конденсатор (как в старых приемника) - мультиметр и крутить-вертеть в разных частотных диапазонах.... наверняка ан СВ диапазоне будет чтото весьма прилично фонить....

а по размерам - вполне возможно уровня сигнала с ТВ антенну будет вполне достаточно для питания, а то и даже с избытком и хватит даже экран ЛСД питать (без подсветки)

alex286
Offline
Зарегистрирован: 16.07.2012

Обратите взгляд в  сторону химических источников тока... 

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

При отправке потребление до 15мА,пока поставил три батарейки ААА.
Зимой, как времени свободного больше будет, попробую все таки катушку большую сделать.

ELITE
Offline
Зарегистрирован: 11.01.2018

конденсаторы или еще лучше ионисторы - пока спит - заряжай, надо отправить - питайся

я делал авто БК и надо было немного автономного питания (2-3 секунды)

поставил ионистор 5В 1Ф - этого для полноценной работы ардуины мини с сд картой хватает секунд на 30....

при этом размер ионистора как две таблетки 2032

KPG
Offline
Зарегистрирован: 09.06.2019
Morroc
Offline
Зарегистрирован: 24.10.2016

ELITE пишет:

наверняка ан СВ диапазоне будет чтото весьма прилично фонить....

Если только китайцы в определенное время суток. У нас практически все ДВ/СВ позакрывали, в некоторых регионах 2-3 станции только не сильно большой мощностью и то некоторые не круглосуточно. http://www.novosibdx.info/schedules.html

mir0tv0rec
Offline
Зарегистрирован: 19.09.2018

Всем доброго времени! Прошу помощи или направления для решения проблемы. Ситуция такая - решил заменить драйвер светодиодного фонаря на неизвестном китайском МК, который ушел в мир иной на тини13а. Набросал програмку. На порту 0 и 1 сделал шим, 3 порт хочу сделать, как выход у управлять им полевиком, чтобы включать делитель напряжения в цепь АКБ и не жрать через него аккумулятор, когда фонарь не работает. На 4ом кнопка с внутренней подтяжкой. Порты нагружены светодиодами через резисторы 4.7к. Но столкнулся с проблеммой - если включаю 3й порт, то все начинает глючить... Диоды на 0 и 3 порте или на 1 и 3м (если переключить кнопкой) начинают мигать с частотой герц 15-20 в пол накала. В протеусе тоже ситуация странная на выводах шим амплитуда всего чуть больше вольта, как закоментирую стороки 142-152 все начинает работь нормально.

#define F_CPU 9600000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
//#include <avr/sleep.h>		// здесь описаны режимы сна

#define true 1	// логическое состояние правда
#define false 0	// логическое состояние ложь

volatile uint16_t voltVal = 0;			// переменная для накопления значений АЦП
volatile uint8_t sss1 = 0;				// счетчик значений АЦП
volatile uint8_t sleep_MODE = true;		// режим сна

uint8_t PWM_MODE[4] = {255, 0, 86, 172};		// режимы PWM (100%, 67%, 33%)
uint8_t LedMode = false;		// переключатель светодиодов		


uint8_t butCount = 0;					// счетчик времени нажатия
uint8_t flgPress = false;				// признак кнопка в нажатом состоянии
uint8_t flgClick = false;				// признак отпускания кнопки
uint8_t switchLED = false;				// признак переключения диодов
uint8_t flgLngPress = false;			// признак удержания кнопки
uint8_t i = 0;							// счетчик	

void Set_PWM (void) {
	
	switch (LedMode) {
		case 0:
		DDRB &= (0 << PINB1);
		DDRB |= (1 << PINB0);
		OCR0A = PWM_MODE[i];
		OCR0B = PWM_MODE[0];
		break;
		
		case 1:
		DDRB &= (0 << PINB0);
		DDRB |= (1 << PINB1);
		OCR0A = PWM_MODE[0];
		OCR0B = PWM_MODE[i];
		break;
	}// end switch
	
}// end Set_PWM()

/*
ISR(PCINT0_vect){
	
	GIMSK=0x00;             // Pin Change Interrupt выкл.
	PCMSK=0x00;             // PCINT4 откл.
	if (sleep_MODE) sleep_MODE = false;
	DDRB |= (1 << PINB3);		// порт 3 на выход (для подключения делителя)
	PORTB |= (1 << PINB3);	// порт 3 высокий уровень
				
}// ISR(PCINT0_vect)
*/
/*
ISR (ADC_vect){	
	
	voltVal += ADCW;
	sss1++;	
	
	if (sss1 > 10) {
		voltVal = voltVal / sss1;
		sss1 = 0;
	}// end if
	
	if (voltVal < 690){
		sleep_MODE = true;
	}// end if
	
}// end ISR (ADC_vect)
*/

int main(void){
	/*
	ADMUX |= (1 << REFS0) | (0 << ADLAR) | (1 << MUX0);	// внутреннее опорное напряжение,
														// левое ориентирование данных, выбран вход ADC1
	ADCSRA = 0xEF;	// АЦП включен, запуск преобразования, режим автоизмерения,
					// прерывание по окончанию преобразования, частота CLK/128
	ADCSRB = 0x00;	// режим автоизмерения: постоянно запущено
	DIDR0 |= (1 << PINB2); // запрещаем цифровой вход на ноге аналогового входа
	*/
	
	PORTB |= (1 << PINB4);	// подтяжка кнопки порт 4, высокий на порт 3 (для включения делителя в цепь)	
	DDRB |= (1 << PINB3);		// порт 3 на выход (для подключения делителя)
		
	// Режим Fast PWM, частота сигнала=F_CPU / делитель*256
	TCCR0A |= (1<<WGM00) | (1<<WGM01);	// Режим Fast PWM, таймер считает до 255 и сбрасывается в 0
	TCCR0A |= (1<<COM0A1) | (1<<COM0A0); // 0 при равенстве регистров TCNT0 и OCROA. 1 при переполнении (инвертированный ШИМ-сигнал)
	TCCR0A |= (1<<COM0B1) | (1<<COM0B0); // 1 при равенстве регистров TCNT0 и OCROB. 0 при переполнении (неинвертированный ШИМ-сигнал)
	TCCR0B |= (1<<CS01);				// делитель 8
	OCR0A = 255; // регистр сравнения (инвертированный сигнал ШИМ 255)
	OCR0B = 255; // регистр сравнения (инвертированный сигнал ШИМ 0)
	
	//_delay_ms(50);
	
	//asm("sei");		//разрешаем глобально прерывания
	
	//set_sleep_mode(SLEEP_MODE_PWR_DOWN); // если спать - то на полную

	while(1) {
		
		if ((PINB & (1 << PINB4)) == 0 && !flgLngPress) {
			_delay_ms(10);		// задержка (защита от дребезга)
			if ((PINB & (1 << PINB4)) == 0) {
				flgPress = true;		// кнопка нажата (устанавливаем флаг в 1)
				butCount++;				// начало отсчета нажатия кнопки
				if (butCount > 100){
					flgLngPress = true;
					flgPress = false;	// сбрасываем флаг нажатия
					butCount = 0;		// обнуляем счетчик времени нажатия
				}// end if
			}// end if
		}// end if
		
		if ((PINB & (1 << PINB4)) && flgLngPress){	// если отпустили после длительного нажатия
			switchLED = false;
			flgLngPress = false;
			flgPress = false;	// сбрасываем флаг нажатия
			flgClick = false;
		}// end if
		
		if (flgPress && (PINB & (1 << PINB4))){	// отпустили кнопку
			flgClick = true;	// устанавливаем флаг клика
			flgPress = false;	// сбрасываем флаг нажатия
			butCount = 0;		// обнуляем счетчик времени нажатия
		}// end if
		
		if (flgLngPress && !switchLED){	// было удержание кнопки
			LedMode++;		// переключаем на другой светодиод
			if (LedMode > 1) LedMode = 0;
			i = 1;
			Set_PWM();	// устанавливаем режим светодиода
			switchLED = true;
		}// end if
		
		if (flgClick){			// был клик
			flgClick = false;	// сбрасываем флаг клика
			i++;				// инкрементируем режим PWM
			if (i > 3) i = 0;	// обнуляем счетчик
			Set_PWM();			// устанавливаем режим светодиода
			if (i == 0){
				sleep_MODE = true;
				// отладка
				DDRB |= (1 << PINB3);	// порт 3 на выход
				PORTB |= (1 << PINB3);	// высокий уровень	
			}// end if
			else{
				// отладка
				sleep_MODE = false;
				PORTB &= (0 << PINB3);	// низкий уровень
				DDRB &= (0 << PINB3);	// порт 3 на вход
			}// end else
		}// end if
		
		/*if (sleep_MODE){
			
			GIMSK=0x20;             // Pin Change Interrupt Enable
			PCMSK=0x10;             // PCINT4 set для возращения в нормальный режим из сна
			DDRB &= (0 << PINB3) | (0 << PINB1) | (0 << PINB0);	// выключаем светодиоды, делитель
			PORTB = 0x00;			// отключаем подтяжку и высокий уровень на всех портах
			sleep_enable(); // разрешаем сон
			sleep_cpu(); // спать!
			
		}// end if*/
			
	}// end while(1)
}// end main

 

inspiritus
Offline
Зарегистрирован: 17.12.2012

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

тинька13 стоит почти ничего. И потому вачдог на ней, что для наны, что для меги (у которых в общем то проблема собаки почтирешена), что для ESP, где оная не решена вообще, достаточно удобен. Можно конечно на 555, но стоит она чуть ли не дороже, плюс обвязка.

зо... рецепт счастия:

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

Простейший код на защищаемом мк , который внутри самого значимого события дергает ногу в GND. 

Ногу тиньки заводим на reset мк.

Ногу мк заводим на reset тиньки.

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

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

спасибо за внимание

тэги- #watchdog #attiny #esp 266 #провереноработает

Morroc
Offline
Зарегистрирован: 24.10.2016

Встроенная собака имеет какой то принципиальный изъян ?