Перейти к содержанию

Задержки Attiny13A


Рекомендуемые сообщения

Здравствуйте, я начинающий в данной тематике ...написал код для включения портов на attiny13a, писал в Atmel Studio 7 (простое реле времени - каждые 25 часов включает 5 порт на 5 минут, остальные порты индикация) и конечно глядел в протеус, ну и собрал странную реальную конструкцию (uln2003, настенные часы, светодиоды, резисторы.).

После не хитрых действий выяснил что 1 секунда равна примерно _delay_ms(135) (наверняка из-за фьзов), но суть в другом, а именно - 5-тый порт работает как нужно 5 минут + - 20 секунд ,НО весь цикл проходит за 5 часов - увеличение задержки не приносит результатов _delay_ms(2430000) менял на _delay_ms(222430000) ...но весь цикл проходит за 5 часов....

Хочется все таки узнать - где ошибки или как нужно сделать это правильно?!

код

#define F_CPU 800000

#include <avr/io.h>

#include <util/delay.h>

// #define F_CPU 8000000L

// #include <util/delay.h>

int main(void)

{

DDRB = 0xFF;

PORTB = 0x00;

while (1)

{

_delay_ms(2430000); //5 часов

PORTB |= (1<<0); //1 лампа

_delay_ms(2430000); //5 часов

PORTB |= (1<<1); //2 лампа

_delay_ms(2430000); //5 часов

PORTB |= (1<<2); //3 лампа

_delay_ms(2430000); //5 часов

PORTB |= (1<<3); //4 лампа

_delay_ms(2430000); //5 часов

PORTB |= (1<<4); //нагрузка

_delay_ms(40500); //5мин

PORTB &= ~(1<<4);

PORTB &= ~(1<<3);

PORTB &= ~(1<<2);

PORTB &= ~(1<<1);

PORTB &= ~(1<<0);

// 1 сек = _delay_ms(135)

post-196385-0-18844600-1462115020_thumb.png

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

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

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

Изменено пользователем Viktor26

Не знаеш как? Спроси у Google'а !!!

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Не парьтесь про таймер. Можно несколько раз подряд вызвать _delay_ms(N).

Изменено пользователем солар

Я не раздаю удочки. Я продаю рыбу.

Ссылка на комментарий
Поделиться на другие сайты

Почему сразу убил? Скорее всего прошили на "с кварцем". Припаивайте.

Кварц на attiny13a интересно... А так уже присмотрел интересную схему для восстановления фьюзов attiny13a, но уже как сказал *Жду почту...

Ссылка на комментарий
Поделиться на другие сайты

Упс. На автомате. Имел ввиду, конечно, что не так страшен чёрт, как его малюют.

Изменено пользователем солар

Я не раздаю удочки. Я продаю рыбу.

Ссылка на комментарий
Поделиться на другие сайты

ATtiny13 может тактироваться от внешнего генератора, и этому режиму соотвутствеют как раз CKSEL = 00. Вторая крайность CKSEL = 11 соответствует ненамного менее неудобному режиму - 128 кГц, с которым программаторы обычно не дружат, но попробовать снизить частоту программатора попробовать можно.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

В скобках много мусора, читать не обязательно!!!

{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((

И снова прошу о помоще, про копаясь в своем же.... из за которых пытаюсь делать выводы, как я понял библиотека deley в atmel studio имеет предел по числу ... прописал несколько раз

delay(10000);

delay(10000);

delay(10000);

delay(10000);

он дает мне предел и все равно выполняет код как и раньше (то есть, несколько раз вызвать таймер нет возможности)

но если прописать

delay(10000);

PORTB |= (1<<0);

delay(1); //какое нибудь ненужное действие чтобы просто ткнуть в промежуток

PORTB &= ~(1<<0); //вырубить свое ненужное действие

Так конечно прокатывает, но памяти для такой простой задачи и цикла в 24 часа мне нужно в 20 раз больше чем имеет attiny13.

Почитал про таймеры ...делитель ...положение таймера.. Есть множество всяческих ресурсов чтобы это подтянуть и естественно читаю на досуге, но вот c примерами в atmel studio, да и ещё для attiny13 скудно... так как нахожусь в самом начале пути даже не представляю как это написать в atmel studio ...пытался искать для atmel studio задержку на таймере в несколько минут для attiny13 на всяческих сайтах, форумах: подобных примеров не нашел.

))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}

Буду рад увидеть код для камня attiny13 в atmel studio на языке С, где расписана задержка на таймере больше одной минуты.

Изменено пользователем boogoo
Ссылка на комментарий
Поделиться на другие сайты

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

#include <avr/interrupt.h>
unsigned char s,m,ch;//сек, мин, часы
ISR (WDT_vect)
{
//это прерывание, срабатывает каждую сек.
uint8_t s++;// в s секунды
if (s>59)
{
s=0;
m++;
if(m>59)
{
m=0;
ch++;
}
}
}
void Init_Dog(void)
{
MCUSR &= ~(1<<WDRF);
WDTCR |= (1<<WDCE) | (1<<WDTIE);
WDTCR |= (1<<1) | (1<<2); // 0-2,5 бит предделитель. (1sec)
sei();
}

этот таймер тактируется от дополнительного внутреннего генератора.

Изменено пользователем Mishany
Ссылка на комментарий
Поделиться на другие сайты

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

#include <avr/interrupt.h>
unsigned char s,m,ch;//сек, мин, часы
ISR (WDT_vect)
{
//это прерывание, срабатывает каждую сек.
uint8_t s++;// в s секунды
if (s>59)
{
s=0;
m++;
if(m>59)
{
m=0;
ch++;
}
}
}
void Init_Dog(void)
{
MCUSR &= ~(1<<WDRF);
WDTCR |= (1<<WDCE) | (1<<WDTIE);
WDTCR |= (1<<1) | (1<<2); // 0-2,5 бит предделитель. (1sec)
sei();
}

этот таймер тактируется от дополнительного внутреннего генератора.

На данном этапе дальше функций delay PIN PORT DDR остальные надписи у меня вызывает непонимание ...вот я и хочу увидеть *НАПИСАННЫЙ РАБОЧИЙ КОД* ...вообщем разобраться так сказать на пальцах - что куда и почему.

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

Кстати ваш код тоже не комплитится! (да и про дополнительный внутренний генератор для attiny13 в гугле тоже не нашел)

Ссылка на комментарий
Поделиться на другие сайты

я пример привел, это не есть вся программа, только две функции, которые надо вставить в основную программу.

про доп генератор это есть сабака Watchdog Timer. неужели про него в даташите ничего не написано?

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

Ссылка на комментарий
Поделиться на другие сайты

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

Ну, точность собаки оставляет желать лучшего, так что часы на ней делать не стоит.
думаю надо начать с изучения структуры программы, где что надо писать и в каком порядке....
Надеюсь, boogoo развеет мои опасения. Есть ли опыт в "компьютерном", или хотя бы каком-нибудь, Си и "контроллерном" ассемблере?

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

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

Ну, точность собаки оставляет желать лучшего, так что часы на ней делать не стоит.
думаю надо начать с изучения структуры программы, где что надо писать и в каком порядке....
Надеюсь, boogoo развеет мои опасения. Есть ли опыт в "компьютерном", или хотя бы каком-нибудь, Си и "контроллерном" ассемблере?

Не развею ...я 0 в программировании

Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...

Из первого поста видно что процессор работает на частоте 1,2МГц а компилятору сказано что 8МГц. Поэтому 135 мСек длятся 1 секунду. Чтобы небыло рассогласования нужно указать компилятору реальную частоту работы процессора. В функциях задержки используются значения типа int а это 65535 максимум дальше опять 0(при инкременте). Рекомендую для задержки использовать цикл "for" в теле которого находится delay();

unsigned int t; //Переменная для минут

for(t = 1500; t > 0; t--) //1500 минут = 25 часов

{delay_ms(60000); //Задержка на 1 минуту

}

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

Изменено пользователем Ittido
Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Из первого поста видно что процессор работает на частоте 1,2МГц а компилятору сказано что 8МГц. Поэтому 135 мСек длятся 1 секунду. Чтобы небыло рассогласования нужно указать компилятору реальную частоту работы процессора. В функциях задержки используются значения типа int а это 65535 максимум дальше опять 0(при инкременте). Рекомендую для задержки использовать цикл "for" в теле которого находится delay();

unsigned int t; //Переменная для минут

for(t = 1500; t > 0; t--) //1500 минут = 25 часов

{delay_ms(60000); //Задержка на 1 минуту

}

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

Спасибо, хотел сделать устройство которое включается раз в сутки на пару минут (насос для растений) и уже сделал - вот код (частоту поставил 9600000 для более точного хода attiny13).

При включении через 288 минут (4,8 часа) включается нога (светодиод) через 4.8 ещё одна нога и т.д. спустя 24 часа (+-5%) включается порт соединенный с реле на 2 минуты, после все в ноль и заново.

Просто не знал про for... Читаю досуге....

#define F_CPU 9600000L

#include <avr/io.h>

#include <util/delay.h>

unsigned int i;

#define min (_delay_ms(60000))

int main(void)

{

DDRB = 0xFF;

PORTB = 0x00;

while (1)

{

for(int i = 0; i < 288; i++)

{

min;

}

PORTB |= (1<<0); //1 лампа

for(int i = 0; i < 288; i++)

{

min;

}

PORTB |= (1<<1); //1 лампа

for(int i = 0; i < 288; i++)

{

min;

}

PORTB |= (1<<2); //1 лампа

for(int i = 0; i < 288; i++)

{

min;

}

PORTB |= (1<<3); //1 лампа

for(int i = 0; i < 288; i++)

{

min;

}

PORTB |= (1<<4); //нагрузка

for(int i = 0; i < 2; i++)

{

min;

}

PORTB &= ~(1<<4);

PORTB &= ~(1<<3);

PORTB &= ~(1<<2);

PORTB &= ~(1<<1);

PORTB &= ~(1<<0);

}

}

Изменено пользователем boogoo
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Вот здесь человек описывает похожий метод, только в домашних условиях: https://www.kondratev-v.ru/zaryadnye/zaryadnoe-ustrojstvo-dlya-avtomobilnyx-akkumulyatorov.html
    • Доковырялся с макеткой так, что все перестало работать( И посмотрев внимательнее обнаружил, что в рабочем варианте у меня используется TPL5111 (ZFVX), а на макетке TPL5110 (ZALX). Китайцы видать напутали со сборкой положили и то и то. В одной статейке написано :  TPL5110 — таймер для управления внешним ключом питания, в качестве которого используется МОП-транзистор TPL5111 — таймер для управления внешним ключом питания, в качестве которого используется LDO-стабилизатор с функцией разрешения Что используется в качестве этого "LDO стабилизатора" пока не разобрался( Теперь только после праздников. пысы  Не получается блин просто))))))  
    • Тут я уже писАл, какой ток что на самом деле протекает.  
    • Как к модеру к нему конечно были вопросы. Ну и правила его не касались, когда кидался оскорблениями в адрес Василича. А за ответы на оскорбления Василич баны выхватывал
    • Смотрю, многие в усилителях избегают катодного повторителя. Либо сразу берут токовые лампы с хорошим усилением, либо два каскада последовательно на токовых лампах с низким усилением. Вроде бы на звук не влияет...
    • Имел дело с зарядкой батареек еще с советских времен. Тогда еще в магазине (!) купил специальную зарядку для ртутно-цинковых батареек, очень миниатюрная, зарядка шла от встроенного солнечного элемента (и это еще в советские времена!). Использовал для зарядки батареек для наручных часов, после первой зарядки батарейки хватало примерно на полгода, потом на 3-4 месяца. Потом (когда батарейка служила меньше двух месяцев) батарейка отправлялась на упокой. Спасала студента тогда очень эта вещица. Жалею что тогда не срисовал ее внутренности. А вот с зарядкой щелочных батареек пришлось заниматься уже значительно позже. Мне кто-то подарил такой набор (зарядка с комплектом перезаряжаемых батареек) - вот его обзор https://aphnetworks.com/reviews/pure_energy_xl  Все было нормально, но у всех этих батареек ресурс очень ограничен, примерно 25 циклов максимум. После чего емкость уменьшается и нет смысла их дальше использовать. После каждой зарядки емкость уменьшается, но не сильно. Реально раз десять заряжать можно точно без проблем. После того как выработался ресурс последней батарейки стал вопрос - а можно ли заряжать обычные батарейки тоже? Зарядка-то осталась... И как раз в то время приобрел обычные (т.е. "незаряжаемые") батарейки той же фирмы (PureEnergy). Оказалось что они заряжаются точно также, как и "заряжаемые"! Возможно что у них та же химия... Пробовал батарейки разных фирм, степени разряда. Короче говоря, фирменные всякие Дюраселлы и Энержайзеры не заряжаются вообще, и даже могут потечь во время зарядки. А вот самые дикие и дешевые нонейм чаще всего заряжаются без проблем. Насчет емкости - конечно емкость полностью не восстанавливается, но для работы в беспроводной клаве,, мышке или пульте вполне хватает и достаточно надолго.  Но занимаюсь этим нечасто, просто когда лень ехать в магазин за очередной партией батареек.  А если есть возможность, то предпочитаю переделывать питание под литий. Очень сильно достает саморазряд всяких Ni-Cd, Ni-MH - разряжаются даже те, которые якобы должны долго держать заряд. Схему зарядки еще не срисовывал (лень было разбирать), но схема сложнее чем все что я видел в Интернете. Напряжение заряда примерно 1,7в. xlaa_tds.pdf
    • Я делаю ставку на контакты NC реле запуска и NO реле торможения. Тем более они такие хлипенькие.
  • Похожий контент

×
×
  • Создать...