Нужна помощь с attiny13
#31
Или Ozon.
Arduino Nano V 3.0 Type-C ATMEGA328P CH340 (запаяна гребенка) ардуино
https://ozon.ru/t/OLMjW44
#32
(10-02-2026, 16:29)-vlad- : Проц там уже впаян. Мега328.
Там паяльник и толком то и не
нужен. Все уже для фантазии кода готово.
Разве что объвязка.
Ну видишь ли я всё по старинке , микросхему впаял, проводами опутал, и мозги компостируй.
Нужно выписать и себе парочку. Нано. А пока буду Тиньку мучать, их тоже девать куда то нужно.
#33
Aleks, Да вы в какие то дерби сразу залезли для меня,так если вы профи....смотрю по коду.
Не блок схемы, не принципиальной схемы....

(10-02-2026, 16:41)Aleks : микросхему впаял, проводами опутал
Тут так же, модуль nano впаять и опутывать.
Только микросхему впаивать 8 ножек, а тут 30 штырей в плату.
#34
Принципиальная схема есть в первом посту. Профи, хех тоже скажешь, на МК первую программу пишу, ну это кроме моргалок всяких .
А вы функции еще не учили?
#35
Учу потихоньку.
Вот мд себе сделал.
Правда делал его с нуля код(за основу пирата взял) и сам допетривал, местами подсказывали ребята с форума где я косячу. Делал с ноября прошлого года наверное.
Неделю назад только научился железо отличать...от не железа.
Но работы ещё много предстоит.
https://disk.yandex.ru/i/u6wO0x-vtGAYeg
#36
Прикольненько, нужно посмотреть как отличать одно от другого. Ну, а я с функциями слегка разобрался, пользуйся ими удобно ведь.
#37
Я вот смотрю исходник и не пойму-почему PB0,PB1,а не просто 0,1?
#38
(10-02-2026, 20:53)bulat : Я вот смотрю исходник и не пойму-почему PB0,PB1,а не просто 0,1?
Это что б код легче читать можно было. Кроме того у меня пины цифровые и аналоговые используются один и тот же пин по разному обозначен. Цифровой PB2 можно обозначить как 2 а этот же пин аналоговым A1.
можно и так писать: Это таже моргалка. Но читать ещё трудней, с не привычки так точно.
void setup() {
DDRB |= (1 << 1);
DDRB |= (1 << 0);
}
void loop() {
PORTB |= (1 << PB0);
delay(200);
PORTB &= ~(1 << PB0);
delay(100);
}
#39
(09-02-2026, 18:05)Aleks : pinMode(PB4, OUTPUT); // без этой строчки светодиоды вообще не светятся
// на 0 и 1 пине на других не пробовал.
Эта проблема решена?
Вот что пишет ИИ по этому поводу.


Если PB4 настроен как вход (по умолчанию) и к нему ничего не подключено (он «висит в воздухе»), он может ловить высокочастотные помехи.

Почему это влияет на PB0/PB1: В ATtiny13 линии порта физически близки. Высокочастотный шум на PB4 может вызывать сбои в работе внутренней логики или таймеров, которые управляют PB0 и PB1 (OCR0A/B).
Решение: Настройте PB4 как вход с подтяжкой (pinMode(4, INPUT_PULLUP) или PORTB |= (1 << PB4)), если не планируете использовать его как выход. Это застабилизирует потенциал на ножке.

2. Ошибка прямой записи в регистр (Masking)
Если вы настраиваете пины через регистры DDRB или PORTB, вы могли случайно затереть настройки других пинов.

Ошибка: DDRB = (1 << PB0) | (1 << PB1); — эта команда сбрасывает настройки всех остальных пинов (включая PB4) в 0.
Правильно: Используйте логическое ИЛИ, чтобы изменять только нужные биты:
cpp

DDRB |= (1 << PB0) | (1 << PB1); // Включает PB0 и PB1, не трогая PB4

PB4 — это также вход ADC2. Если в коде инициализируется АЦП или используется analogRead, мультиплексор может переключаться некорректно, если какой-то пин не инициализирован.

Убедитесь, что вы не используете PB4 как аналоговый вход (ADC2) одновременно с попыткой работы PB0/PB1 в режиме ШИМ, если ваше ядро (например, старые версии MicroCore) имеет ошибки в таблице векторов.

4. Особенности программирования (ISP)
Если вы тестируете устройство, не отключая программатор (USBasp или Arduino как ISP):

PB0 и PB1 — это линии MOSI и MISO.
Если PB4 (физическая ножка 3) в вашей схеме как-то связана с линией RESET (ножка 1) или SCK (PB2, ножка 7) через внешние компоненты, работа программатора будет блокировать выходы, пока PB4 не «притянет» схему в стабильное состояние.

Что проверить в первую очередь:
Попробуйте добавить в setup() строку pinMode(4, INPUT_PULLUP);. Если после этого PB0 и PB1 заработают без настройки PB4 на выход, значит проблема была в электромагнитных наводках на незадействованный пин.

(09-02-2026, 18:05)Aleks : // если эти строки убрать (PB0 и PB1)то светодиоды светят тускло.
Это происходит потому что если пин сконфигурирован как вход и в порт записать единицу, например так - digitalWrite(PB0, HIGH); то к пину PB0 подключается резистор подтяжки 10...100к, через него и питался светодиод.
#40
(11-02-2026, 00:28)KEN : Эта проблема решена?
Как не странно проблема сама как то рассосалась, сегодня начал именно с PB4 объявил analog_pin_t AnChasPin = A2; Что б с него считать данные. А я подумал, что комп перегрузил +
Ардуино иде 2.3.7 свежий поставил или просто выспался.
Спасибо за инфу. Я схему собрал и прямо на ней и кодю, периодически прошиваю проц, что б результат видеть ну и программатор не отсоединяю само собой. Да и резисторы на этот пин уменьшил до 10к как рекомендовано. Щас залью старую прошивку гляну, помогло или нет.

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

Пока вот, что получилось:

// int sensePin = 4; // Пин к которому подключен фоторезистор
int ledPin = 0; // Пин к которому подключен светодиод
analog_pin_t AnChasPin = A2; //Аналог пин время
analog_pin_t AnFotoPin = A3; // Аналог пин свет

int LedMorg( int pauz, int ledPin) // функция моргания светодиодами. экономим место
{
digitalWrite(ledPin, HIGH);
delay(pauz);
digitalWrite(ledPin, LOW);
delay(pauz);
}
int ReadChas() // функция перевода напряжения на аналоговом пину A2 в задержку выключения
{
Povtor:
delay(100);
int val = analogRead(AnChasPin);
delay(100);
int val2 = analogRead(AnChasPin);
if (val2 == val)
{
val2 = val / 150;
if (val2 <= 0) int val2 = 1;
if (val2 >= 7) int val2 = 6;
val = val2;
do {
--val2;
LedMorg(200,0); // идём моргать 200-пауза 0-пин
} while(val2 > 0);
}
delay(1500);
if (val >= 7) goto Povtor; // ловим ошибку датчика или хрен его знает чего если ошибка опросить датчики заново
return val;
}
int ReadFoto(){ // Подпрограмма определения освещения
delay(100);
int val = analogRead(AnFotoPin); // читаем что на а3 пине
if (val > 400) digitalWrite(1, HIGH); //вкл светодиод если значение меньше 400 НОЧЬ
else digitalWrite(1, LOW); // выключаем если день
return val;
}
void setup() {
pinMode(ledPin, OUTPUT); // назначаем пин ledPin выходом
pinMode(1, OUTPUT);
pinMode(AnChasPin, INPUT); // назначаем пин AnChasPin аналоговым входом
pinMode(AnFotoPin, INPUT); // назначаем пин AnChasPin аналоговым входом
}




void loop() { // тело программы
int a = ReadChas(); // вызов функции из тела программы а=сколько часов работать
int b = ReadFoto(); // b = день или ночь , но пока там то что на входе A3
// do { //
// --a; // это код для проверки что нам функция возвращает
// LedMorg(200,1); // время работы \ включения
// } while(a > 0); //
}