Помогите придумать формулу по графику

Обсуждаем контроллеры компании Atmel.
Ответить
Друг Кота
Сообщения: 7722
Зарегистрирован: Вс июл 24, 2011 11:38:09

Сообщение 74LS00 »

Делаю регулятор яркости на tiny13.
Фоторезистор с сопротивлением 1-10к или 2-20к, в общем чтото такое. И к нему 10к делитель.
Методом тыка получил примерно это

Код: Выделить всё

u фр	u сд	шим
4.55в	3.026	205
3.71в	2.55в	95
1.8		2.023	30
1.74	1.9в	5
Изображение Изображение

При слабой яркости до 356 ацп, шим будет 5 или вообще пофиг, до 10 можно, лижбы чуть светило.
От 368 ацп, повышать шим примерно от 30.
Ну и дальше получается горбыль, чтото не знаю подходящей формулы графика, а наверняка чтото просто есть.
При 930 ацп шим вообще обрубать и тушить выход, хотя к вопросу не относится.

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

---

Код: Выделить всё

// MicroCore ATtiny13A  https://github.com/MCUdude/MicroCore#how-to-install
// ATtiny13 9.6Mhz int. 
int LDR  = 0;
float LED = 0 ;

void setup() {
  pinMode(0, OUTPUT);
}

void loop() {

LDR  = analogRead(A1)  ; //чтение фоторезистора
LED = ( LDR - 356 ) /2.8   ; 
if (LED <= 1) {  LED = 1 ; }

 if (LED >=  450) {
digitalWrite(2, LOW)  ;
}
else if ( LED <  100 )  {
  analogWrite(0,LED  );
}

LED = 0 ;

  
}
Пытаюсь заставить подсветку потухнуть при большой яркости и толку мало.
При запуске МК с большой яркостью, подсветки нет, но стоит закрыть фоторезистор как она включается и работает обычно
Контактная информация:
Реклама
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1314
Зарегистрирован: Пт ноя 27, 2009 19:47:13
Откуда: Казань

Сообщение НАПАЛМ »

Я думаю кусочно-линейной аппроксимация тут поможет, график разбить на части, для каждой части своя формула прямой и коэффициентами сдвига и угла наклона.
Реклама
Друг Кота
Сообщения: 7722
Зарегистрирован: Вс июл 24, 2011 11:38:09

Сообщение 74LS00 »

Спойлер

Код: Выделить всё

// MicroCore ATtiny13A  https://github.com/MCUdude/MicroCore#how-to-install
// ATtiny13 9.6Mhz int. 
int LDR  = 0;
byte LED = 0 ;
const byte LimitL = 160 ; // test max 190 // limit 160

void setup() {
  pinMode(0, OUTPUT);
}

void loop() {

LDR  = analogRead(A1)  ; //чтение фоторезистора // A1/D2
LED = ( LDR - 356 ) /3  ;  //2.8
if (LED <= 1) {  LED = 1 ; }

if (LED < LimitL) {
analogWrite(0,LED );  
}
else {
  analogWrite(0,1 ); 
  //digitalWrite(0, LOW) ;
  
LED = 0 ;
}

}
Это какойто капец, заставить ардуину работать не сильно то проще чем гору деталей.
Единственный способ загасить экран это подать слабый шим analogWrite(0,1 )
Если просто подать низкий уровень digitalWrite(0, LOW) , то это срабатывает ровно один раз при запуске контролера пока это значение на входе не изменится.
Если же подать шим с 0 analogWrite(0,0 ) , то экран гаснет, причём он гаснет уже совсем и полностью, и по верху и по низу, то есть с низким уровнем на входе он тоже не работает.

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

В общем как костыль работать сгодится, но чую надо запрегать для гашения отдельную ногу. Эти МК настолько сложные что пока ниодин скетч у меня не заработал как только я делаю шаг в сторону от копипасты кода/

Кстати а какое опорное у тиньки? Я так понял изменить его нельзя и оно похоже не 5в как пишут, и главное проверить это тоже нельзя, никакой вывод не приделать.
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

74LS00, если не читать документацию и даташиты - конечно всё "магией" становится и слишком сложным.
Никаких способов отладки я тут не вижу, потому как ардуино не может даже бинарный файл прошивки сделать
Это ерунда полная написана.
analogWrite(0,0 ) , digitalWrite(0, LOW)
А это одно и тоже.

Опорным и тиньки 13а может быть как напряжение питания, так и внутренний ИОН на 1.1В. Но в MicroCore для ардуино, будет также как и в ардуинах обычных - только Vcc.
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 15595
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

IDE делает *.hex файлы (как с бутлоадером, так и без него - "экспорт бинарного файла" - хотя... у micro core только один вариант выскочил... :roll: ).
Однако 13-ю пускать под Си... С моего взгляду... ЗВЕРСТВО...
:cry:
Пользуйтесь ардуинко-про-мини (один Х... цена почти одинакова) или нанкой (отладочная платка с обратной связью через монитор IDE).
А в качестве симулятора вот сие:
https://www.sites.google.com/site/unoardusim/
выставив конфигурацию на UNO V3.
:beer:
Реклама
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

BOB51, прекрасно на Си пишется для любой AVRки. Хотя Ардуино - это вообще-то С++ + ядро. А пользоваться исключительно готовыми платками всегда и везде - тупиковый вариант arduino-style.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15595
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Это свойство адуринки:
или
платка = DIP микросборка "черный ящик"
или
платка с конкретным МК и обработкой в соответствующем компиляторе.
Плюс еще два варианта, когда не готовая платка, а смаоделка применяется.
Все варианты равноценно применимы - то уж кто в чем больше удобства чуствует.
8)
А вот относительно кристаллов с емкостью ПЗУ в 512 команд.... Все ж таки преимущество или за ассемблером или за профессиональным программистом (но никак не для начинающего после адуринки).
8)
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

Кусочно-линейная интерполяция. И ее использование на микроконтроллере (поиск нужного интервала бисекцией довольно-таки неплохо ускоряет вычисления, если узлов много).
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15595
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Там еще нелинейность яркости светодиода от значения ШИМ выползет...
:(
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

BOB51, с чего бы? Если нормально подобрать частоту и не пытаться сделать 10000 градаций яркости, никаких нелинейностей быть не должно! По крайней мере, проверял фотодиодом с RC-интегратором линейность яркости светодиода, если его ШИМить дешевой китайской платкой на нувотоне 003. В районе 1-2% был косяк, но там, скорей всего, проблемы с округлением (даже осциллограф показал, что ширина импульса в этом случае плавает).

Кстати, насчет ШИМ: нет ли у кого на примете управляемой по USB шимилки светодиодных лент (вкл/выкл и восьмибитный ШИМ)? Лень разводить плату ради такой примитивной задачи.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

[uquote="BOB51",url="/forum/viewtopic.php?p=3933514#p3933514"]А вот относительно кристаллов с емкостью ПЗУ в 512 команд.... Все ж таки преимущество или за ассемблером или за профессиональным программистом (но никак не для начинающего после адуринки).
8)[/uquote]
Это всё миф. Вы же "голый Си" хорошо не знаете, сами где-то недавно писали в другой теме емнип, так зачем утверждать? Компилятор avr-gcc нынче куда умнее большинства асм-программистов начинающих. И даже убогий код на Си порой очень неплохо оптимизирует. А уже если знать Си, то возможностей дофига. Ах да, и начинающие после ардуинки далеко не все знают асм в принципе. Они его дольше учить будут куда и вникать после ардуино.
Собутыльник Кота
Сообщения: 2905
Зарегистрирован: Ср ноя 29, 2017 06:58:50

Сообщение BlackKilkennyCat »

Надо знать и то и то, на сегодняшней день. Хотя бы нормально читать ассемблер, ибо оптимизатор иногда выдаёт невесть что, и проконтролировать его - полезно.
А одурино потому и ардуино, что это немного иной класс. Любителю ардуино ассемблер необязателен. Даже знать о его существовании. И это, в какой-то степени хорошо: даёт возможность обычным людям что-то сделать для себя.
Плохо становится, когда они с таким багажом начинают не для себя, а как инженер.
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

BlackKilkennyCat, ассемблеров много знать надо, а Си - один )
Я бы сказал так - знать Си надо. А ассемблер хотя бы в общий чертах понимать. Весь набор инструкций можно и знать даже для одной архитектуры, но со "словарем" в выхлоп компилятора Си поглядеть полезно часто, да. Хотя имхо и не совсем обязательно нынче. Ну а так в общем согласен.
Собутыльник Кота
Сообщения: 2905
Зарегистрирован: Ср ноя 29, 2017 06:58:50

Сообщение BlackKilkennyCat »

NStorm,Не зря же я уточнил - нормально читать ;)
кроме того, искать баги, когда в си всё кажется хорошо, остаётся только там...
Друг Кота
Сообщения: 7722
Зарегистрирован: Вс июл 24, 2011 11:38:09

Сообщение 74LS00 »

[uquote="NStorm",url="/forum/viewtopic.php?p=3933235#p3933235"]analogWrite(0,0 ) , digitalWrite(0, LOW)[/uquote]
Даже если не использовать analogWrite это не одно и тоже, это ардуино.
Опорным и тиньки 13а может быть как напряжение питания, так и внутренний ИОН на 1.1В. Но в MicroCore для ардуино, будет также как и в ардуинах обычных - только Vcc.
А как же analogReference() DEFAULT, INTERNAL, или там пофиг ?

[uquote="BOB51",url="/forum/viewtopic.php?p=3933330#p3933330"]IDE делает *.hex файлы (как с бутлоадером, так и без него - "экспорт бинарного файла"

Пользуйтесь ардуинко-про-мини (один Х... цена почти одинакова)[/uquote]Я её поставлю именно для одной функции, основной контролер ещё одну задачу не вытянет. Даже у тиньки начался стробоскоп когда я выставил задержку 100. Возможно конденсатор решил бы проблему, но ну её нафик лотерею.

"Экспорт бинарного файла" это вот так:
Скетч использует 254 байт (24%) памяти устройства. Всего доступно 1024 байт.

Глобальные переменные используют 2 байт (3%) динамической памяти, оставляя 62 байт для локальных переменных. Максимум: 64 байт.

�� 㤠���� ���� 㪠����� 䠩�.

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

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3933550#p3933550"]BOB51, с чего бы? Если нормально подобрать частоту и не пытаться сделать 10000 градаций яркости, никаких нелинейностей быть не должно![/uquote]Нелинейность такова что при малом освещении, малое увеличение ШИМ или напряжение, сильнее увеличивает яркость светодиода. А после когда надо больше яркости, светодиод очень дубово реагирует на ШИМ, но в какойто момент светит слишком много.
Я не смог найти нужных градаций, у меня тупо нет регулируемой подсветки дома, а с одной лампочки толком не настроить, поэтому яркости там 2, с лампочкой 200вт и коробкой на лампочке. Ну а малые яркости от настольной слабенькой светодиодной ленты.
Не знаю какой спектр у ФР, но думаю на улице он выдаст больше чем от яркой лампы.
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

[uquote="74LS00",url="/forum/viewtopic.php?p=3933601#p3933601"]Нелинейность такова что при малом освещении, малое увеличение ШИМ или напряжение, сильнее увеличивает яркость светодиода. А после когда надо больше яркости, светодиод очень дубово реагирует на ШИМ, но в какойто момент светит слишком много[/uquote]
Тоже нагуглил, что первые и последние ~5% по заполнению почему-то вызывают нелинейность изменения яркости свечения светодиода.
Найти бы объяснение этому непонятному явлению!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

[uquote="74LS00",url="/forum/viewtopic.php?p=3933601#p3933601"]Даже если не использовать analogWrite это не одно и тоже, это ардуино.[/uquote]
И что, что ардуино? С чего вы решили, что не одно и тоже? https://www.arduino.cc/reference/en/lan ... alogwrite/:
value: the duty cycle: between 0 (always off) and 255 (always on). Allowed data types: int.
Перевести, что значит "always off"? )
Ну и в исходники можно заглянуть https://github.com/MCUdude/MicroCore/bl ... ring_pwm.c :

Код: Выделить всё

void analogWrite(uint8_t pin, uint8_t val)
{
...
  // Handle off condition
  if(val == 0)
  {
    turnOffPWM(pin);        // Turn off PWM
    digitalWrite(pin, LOW); // Set pin low
  }
А как же analogReference() DEFAULT, INTERNAL, или там пофиг ?
А вот тут я ошибся. На MicroCore можно выставить ИОН 1.1В:

Код: Выделить всё

void analogReference(uint8_t mode)
{
  if (mode == DEFAULT)
    ADMUX &= ~(1 << REFS0); // Vcc as reference
  else
    ADMUX |= (1 << REFS0); // Internal 1.1V as reference
}
Добавлено after 2 minutes 20 seconds:
ардуино не умеет делать бинарник для тиньки, видимо дело как раз в загрузчике, без него сделать нельзя и отключить его тоже.
Не может оно не уметь. Иначе бы не шилось ничего. Дело видимо в путях. Где-то небось кириллица. Профиль пользователя в винде небось кириллицей написал. Ну или пробелы. И т.п.
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

[uquote="NStorm",url="/forum/viewtopic.php?p=3933623#p3933623"]Ну и в исходники можно заглянуть https://github.com/MCUdude/MicroCore/bl ... ring_pwm.c :

Код: Выделить всё

void analogWrite(uint8_t pin, uint8_t val)
{
...
  // Handle off condition
  if(val == 0)
  {
    turnOffPWM(pin);        // Turn off PWM
    digitalWrite(pin, LOW); // Set pin low
  }
[/uquote]
Жуть-то какая! Абдуринство во всей красе!!! Интересно: сколько тактов занимает эта операция? И зачем вообще абдуринщики вызывают analogWrite с таким жестоким оверхедом вместо непосредственного изменения одного-единственного регистра? Аналогично с digitalWrite!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Друг Кота
Сообщения: 7722
Зарегистрирован: Вс июл 24, 2011 11:38:09

Сообщение 74LS00 »

turnOffPWM(pin);
вот тут похоже и весь секрет, команда отключает ШИМ и без неё digitalWrite(pin, LOW) не работает. Не отключив генератор, подавать чтото на выход безтолку. Наверно поэтому у меня и не заработало.

Но поплясав с этим тоже ничего получается. Или при малой яркости малый ШИМ и минимальная подсветка и также при максимальной. Или оно всё тухнет и в полной темноте подсветки тоже нет. Видимо конфликт генератора с ногой, не могут они быть в двух режимах.
Так что пока оставлю как есть.
Не может оно не уметь. Иначе бы не шилось ничего. Дело видимо в путях. Где-то небось кириллица. Профиль пользователя в винде небось кириллицей написал. Ну или пробелы. И т.п.

Код: Выделить всё

G:\Programs\ProgramsD\0-Devel\arduino-1.8.13p
врятли дело в путях, просто для тиньки он делать неумеет, для своих умеет. Ошибка скорее всего в MicroCore, и попала она туда ещё с Core13

Я чтото пока не нашёл куда она в ардуину установилась.
Кстати ардуино в портативном варианте
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

Изображение
Ответить

Вернуться в «AVR»