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

ошибка в коде или компилятор?


stells47

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

Здравствуйте.

Неправильно работает простейший код,светодиод на PB4 должен гаснуть с задержкой,а загораться без задержки,от напряжение на PB2.

Но включается и выключается с одинаковой задержкой.Почему так?GccApplication1.c

ATTINY13

 

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

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

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

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

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

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

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

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

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

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

Может так?


#define F_CPU 4800000
#include <avr/io.h>
#include <util/delay.h>
#define PWR_ON PORTB|=(1<<4)
#define PWR_OFF PORTB&=(~(1<<4))
#define PAUSE 10000 // пауза на выключение в миллисекундах, максимум 32000
int delayOff = 0;

ADC_init()
{
	ADMUX=1;
	ADCSRA =134;
	ACSR=128;
}

int main(void)
{
	DDRB|=(1<<4);
	ADC_init();
	
    while(1)
    {
       ADCSRA|=(1<<ADSC);
	   while (! (ADCSRA & (1<<4))) 
	    if(ADCW > 450)
		{
			_delay_ms(1);
			if (delayOff < PAUSE) delayOff++;
			if (delayOff >= PAUSE)
			{
				PWR_OFF;
			}
		} else 
		{
			if (ADCW < 400) 
			{
				PWR_ON;
				delayOff = 0;
			}
		}
    }
}

 

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

13 часа назад, Павел Бачурин сказал:

ADCSRA =134;

ACSR=128;

while (! (ADCSRA & (1<<4)))

за такое - по рукам бить. Для кого придумали именованные биты

13 часа назад, Павел Бачурин сказал:

#define PAUSE 10000 // пауза на выключение в миллисекундах, максимум 32000

Почему именно 32000? На первый взгляд логичнее выглядит ограничение 65535 или 32767 или INT_MAX

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

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

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

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

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

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

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

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

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

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

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

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

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

    • Слабо себе представляю как можно спалить осциллограф пробником, если у самого осцилла уже должна быть защита от перегрузки. Если есть сомнения, мануал всегда в открытом доступе
    • Выходное сопротивление усилителя не меняется от добавления резистора впослед с нагрузкой.
    • Страшно. Наверно правильней сказать - боязно. И в первую очередь Dyd переживает за осциллограф. И это понятно инструмент все таки. Главное переступить через этот страх и сделать все с умом. Dӧppelganger_857, согласен с вами. Наиболее удачная конструкция будет на ОУ с питанием от батареек(АКБ). На том же 6022 (от квазара) можно сделать усилитель с коэф 10:1 в полосе практически до 8 МГц (точнее нужно считать). Большое входное сопротивление ему не нужно.
    • Вы спутали выходное сопротивление усилителя и сопротивление нагрузки. ЗЫ. Ща "Остапа понесет".
    • Да скорее всего. Если учесть что в двухполупериодном выпрямителе к закрытому диоду прикладывается удвоенное напряжение, то таких диодов на 900...1000в. было не много. Если вообще были.
    • А чего там разбираться, если вы хоть раз ремонтировали блоки питания АТХ то просто взгляните на топологию и сразу все поймёте. Я же спрашиваю совета не у студентов второго курса, а спрашиваю у опытных людей.   По теме, подключил 15 омный резистор к 12 вольтовой линии и снова сгорело верхнее плечо). Получается насколько понимаю следующая ситуация, при определенной нагрузке условно в 1 ампер по 12 вольтовой линии образуется момент при переключении верхнего ключа, когда оба транзистора становятся открыты кратковременно, верхний ещё не успевает закрыться а нижний открывается. Этот сквозной ток и выносит транзисторы. От чего так происходит непонятно, но по моему повышено общее потребление, потребление на входе при включении чисто дежурки 2.5 ватта, потребление при подключении "пробника включалки "по каждой линии нагрузки 47 Ом -15 ватт, а если ещё подключить дополнительно 15 Ом на 12Вольт  (условно 1 ампер или 12 ватт) то взлетает больше 50 Ти ватт ну и соответственно перегорает. 
×
×
  • Создать...