Светодиодные фонари и световые приборы. Всё о светотехнике.
Вернуться   Форум FONAREVKA.RU Лаборатория Разработка и модификация фонарей Разработка и модификация электроники фонарей
Расширенный поиск
Забыли пароль? Регистрация

  • О нашем проекте
  • Светотехника и световые приборы
  • Правила форума
Проект FONAREVKA.RU специализируется на предоставлении всей необходимой информации по светотехнике:

— светодиодные фонари;
— различные источники питания;
— разнообразные зарядные устройства;
— освещение помещений и наружное освещение;
— световые приборы для личного, пассажирского и грузового транспорта;
— специальные световые приборы для медицины, для растений, для аквариумов, для террариумов, а также аварийно-сигнальные световые приборы;
— альтернативные источники света;
— лазеры и лазерная техника.

Если у вас есть вопросы по выбору фонарей, аккумуляторов и зарядных устройств ознакомьтесь с FAQ от наших экспертов:

F.A.Q. по выбору фонарей различных типов;
F.A.Q. по выбору аккумуляторов;
F.A.Q. по выбору зарядных устройств.
Ответ  Создать новую тему
Просмотров в теме 15014   Ответов в теме 71   Подписчиков на тему 5   Добавили в закладки 0
Опции темы Поиск в этой теме
Старый 24.10.2013, 19:06   61
INFERION

 
Аватар для INFERION
 
Регистрация: 07.04.2013
Последняя активность: 13.06.2023 02:24
Адрес: Украина, Полтава
Сообщений: 5774
Сказал(а) спасибо: 340
Поблагодарили: 8154 раз(а) в 2385 сообщениях

По умолчанию Re: Драйвер 2,5А для XM-L, помогите с программой

Mishany, А код где?
INFERION вне форума   Ответить с цитированием Вверх
Старый 24.10.2013, 19:21 Автор темы   62
Mishany
Новичок
 
Регистрация: 30.09.2013
Последняя активность: 13.04.2014 11:40
Адрес: Москва
Сообщений: 30
Сказал(а) спасибо: 6
Поблагодарили: 0 раз(а) в 0 сообщениях

По умолчанию Re: Драйвер 2,5А для XM-L, помогите с программой

Код:
#include <avr/io.h>
#include <avr/interrupt.h>
__attribute__((OS_main))


SIGNAL(SIG_ADC)
{
OCR1A=OCR1A*164/ADCH;
}

int main(void) 
{
    CLKPR=0x80;
    CLKPR=0x00;
    PORTB=0b00000000;
    DDRB=0b00000010;
    PLLCSR=0x02;
    while ((PLLCSR & 1)==0);
    PLLCSR|=0x04;
    TCCR1=0x61; //64
    GTCCR=0x00;
    TCNT1=0x00;
    OCR1A=0x00;
    OCR1B=0x00;
    OCR1C=0xFF;
    ACSR=0x80;
    ADCSRB=0x00;
    OCR1A=10;   
ADMUX=0b10100011;
ADCSRA=0b11111101;
sei();

while (1)
   {
   }
    
}
пробовал и в нижнем цикле, на ноге шима полный штиль))
Mishany вне форума   Ответить с цитированием Вверх
Старый 24.10.2013, 19:25   63
INFERION

 
Аватар для INFERION
 
Регистрация: 07.04.2013
Последняя активность: 13.06.2023 02:24
Адрес: Украина, Полтава
Сообщений: 5774
Сказал(а) спасибо: 340
Поблагодарили: 8154 раз(а) в 2385 сообщениях

По умолчанию Re: Драйвер 2,5А для XM-L, помогите с программой

Я там ничего не вижу. Именно там, где мне интересно было посмотреть как читается, модифицируется и затем записывается обратно значение в OCR1A. Тупая копипаста не обязана работать - это вообще комментарий с ассемблерного полотна, стилизованный под Си. Как я нарисую в арифметической формуле проверку на переполнения через флаги статуса, к которым в Си прямого доступа просто нет? А без этих проверок глючить что угодно будет. Важно как именно объявлены переменные, и какие именно параметры заданны компилятору. Он ведь сам решает что в коде нужно, а что можно выпилить. И часто это делает неправильно. Поэтому можно заглянуть в листинг и посмотреть что он там нафантазировал выполняя Ваши капризы...

OCR1ACR1A*164/ADCH; - а этот код как себя ведёт на жесткой нагрузке? Если драйвер перейдёт в ДД из-за нехватки напряжения питания, какие световые эффекты нас ожидают?

[Исправлено: INFERION, 24.10.2013 в 19:39]
INFERION вне форума   Ответить с цитированием Вверх
Старый 24.10.2013, 22:32 Автор темы   64
Mishany
Новичок
 
Регистрация: 30.09.2013
Последняя активность: 13.04.2014 11:40
Адрес: Москва
Сообщений: 30
Сказал(а) спасибо: 6
Поблагодарили: 0 раз(а) в 0 сообщениях

По умолчанию Re: Драйвер 2,5А для XM-L, помогите с программой

Цитата:
Посмотреть сообщение Сообщение от INFERION :
OCR1ACR1A*164/ADCH; - а этот код как себя ведёт на жесткой нагрузке? Если драйвер перейдёт в ДД из-за нехватки напряжения питания, какие световые эффекты нас ожидают?
в том то и дело что он не хочет работать
Mishany вне форума   Ответить с цитированием Вверх
Старый 24.10.2013, 22:42   65
INFERION

 
Аватар для INFERION
 
Регистрация: 07.04.2013
Последняя активность: 13.06.2023 02:24
Адрес: Украина, Полтава
Сообщений: 5774
Сказал(а) спасибо: 340
Поблагодарили: 8154 раз(а) в 2385 сообщениях

По умолчанию Re: Драйвер 2,5А для XM-L, помогите с программой

Я конечно с Си слабо знаком, но обычно работают с объявленными переменными, которым предварительно присваиваются значения с нужных I/O регистров. Даже ассемблер говорит о том, что невозможно в этой архитектуре работать непосредственно с I/O. Можно максимум бит какой-то поставить или убрать, и то не везде. И доступны только операции чтения и записи. Арифметические операции компилятор может и не осилить. Это ж ему нужно догадаться куда-то временно что-то скопировать, там повозится и затем закинуть обратно. Тем более что переменная то скорее всего uint_8t, тогда как арифметика требует 8*8=16 бит как минимум. Сам компилятор такую переменную не родит, он просто не понимает что от него хотят...

Цитата:
SviMik (22:01:33 24/10/2013)
компилятор имеет свойство брать для вычислений регистры той же разрядности, какой ему подсунули на входе.

SviMik (22:04:05 24/10/2013)
я могу написать как надо в одну строку, но это будет страшно. поэтому я лучше заменю на две
uint16_t xCR1A*164;
OCR1A=x/ADCH;

SviMik (22:04:42 24/10/2013)
тоже самое одной строкой:
OCR1A=(uint8_t)((uint16_t)OCR1A*164/ADCH);

INFERION (22:06:16 24/10/2013)
по-нормальному нужно брать ADCH:ADCL

[Исправлено: INFERION, 24.10.2013 в 23:15]
INFERION вне форума   Ответить с цитированием Вверх
Старый 24.10.2013, 23:05 Автор темы   66
Mishany
Новичок
 
Регистрация: 30.09.2013
Последняя активность: 13.04.2014 11:40
Адрес: Москва
Сообщений: 30
Сказал(а) спасибо: 6
Поблагодарили: 0 раз(а) в 0 сообщениях

По умолчанию Re: Драйвер 2,5А для XM-L, помогите с программой

т.е. надо как то считать значение с OCR1A, в моем случае он походу нули считывает только.
это как в ADCH нельзя записать значение, из OCR1A считать)))
Mishany вне форума   Ответить с цитированием Вверх
Старый 24.10.2013, 23:11   67
INFERION

 
Аватар для INFERION
 
Регистрация: 07.04.2013
Последняя активность: 13.06.2023 02:24
Адрес: Украина, Полтава
Сообщений: 5774
Сказал(а) спасибо: 340
Поблагодарили: 8154 раз(а) в 2385 сообщениях

По умолчанию Re: Драйвер 2,5А для XM-L, помогите с программой

ADCH и читается, и пишется, так же как и OCR1A. Почти все I/O и читаются, и пишутся. Пишутся даже PINB, при этом физическое состояние пина инвертируется.
Просто нужно использовать промежуточные переменные, выше я уже процитировал мнение более опытного (чем я) Сишника.

Та скорость АЦП, которая указана в конфигурации, спокойно может оказаться не по силам МК, ибо эта строчка кода будет выполнятся далеко не одну сотню тактов. Деление оно такое, да...

[Исправлено: INFERION, 24.10.2013 в 23:17]
INFERION вне форума   Ответить с цитированием Вверх
Старый 24.10.2013, 23:59 Автор темы   68
Mishany
Новичок
 
Регистрация: 30.09.2013
Последняя активность: 13.04.2014 11:40
Адрес: Москва
Сообщений: 30
Сказал(а) спасибо: 6
Поблагодарили: 0 раз(а) в 0 сообщениях

По умолчанию Re: Драйвер 2,5А для XM-L, помогите с программой

попробовать:
uint16_t xCR1A*164;
OCR1A=x/ADCH;
// unit16_t -потому что максимально возможное значение 256*256=FFFF
может вообще убрать прерывание и запихнуть в вайл, и максимально понизить частоту ядра и предделитель ацп на 128 и в процессе вычисления выключать ацп?

[Исправлено: Mishany, 25.10.2013 в 00:03]
Mishany вне форума   Ответить с цитированием Вверх
Старый 25.10.2013, 00:51   69
INFERION

 
Аватар для INFERION
 
Регистрация: 07.04.2013
Последняя активность: 13.06.2023 02:24
Адрес: Украина, Полтава
Сообщений: 5774
Сказал(а) спасибо: 340
Поблагодарили: 8154 раз(а) в 2385 сообщениях

По умолчанию Re: Драйвер 2,5А для XM-L, помогите с программой

Зачем выключать АЦП? Наоборот нужно стремится повышать его скорость и количество выборок, а работать он должен синхронно со всем остальным и полностью на автомате. Включение АЦП слишком дорого обходится - ему необходимо время для расчехление. Я его прерывание не использую, считаю это лишним. Мне хватает одного общего прерывания, по которому стартует и сам АЦП, и по которому основной цикл синхронизируется. В самом прерывании только флаг ставится. Обрабатывать там что-то массивное - себе дороже...
INFERION вне форума   Ответить с цитированием Вверх
Старый 25.10.2013, 17:54 Автор темы   70
Mishany
Новичок
 
Регистрация: 30.09.2013
Последняя активность: 13.04.2014 11:40
Адрес: Москва
Сообщений: 30
Сказал(а) спасибо: 6
Поблагодарили: 0 раз(а) в 0 сообщениях

По умолчанию Re: Драйвер 2,5А для XM-L, помогите с программой

Нашел косяк в запусках, т.к. для тестов использую лампочку автомобильную Н3 55ватт на шунте получается напряжение выше питания ОУ и на выходе оу напряжение питания, у лампочки то нету падения напряжения как у диодов)))
откладываю испытания пока не куплю диодную ленту для испытаний ватт на побольше с запасом.
Mishany вне форума   Ответить с цитированием Вверх
Старый 02.11.2013, 21:33 Автор темы   71
Mishany
Новичок
 
Регистрация: 30.09.2013
Последняя активность: 13.04.2014 11:40
Адрес: Москва
Сообщений: 30
Сказал(а) спасибо: 6
Поблагодарили: 0 раз(а) в 0 сообщениях

По умолчанию Re: Драйвер 2,5А для XM-L, помогите с программой

моя формула не хочет работать в связи с низкой инерционностью всей системы в целом. надо выкидывать все конденсаторы и как то синхронизировать ацп с шим.
первоначальный вариант меня в общем то устраивает на 100%.
пробовал убирать откл/вкл ацп при расчетах стабильность свечения сразу кончается, при убирании
Цитата:
Посмотреть сообщение Сообщение от Maksoff :
перечитал код, в этом месте аж передернуло.
(усредненное значение из некоторого числа замеров ацп)
- так же стабильность кончается.
Mishany вне форума   Ответить с цитированием Вверх
Старый 03.11.2013, 03:42   72
INFERION

 
Аватар для INFERION
 
Регистрация: 07.04.2013
Последняя активность: 13.06.2023 02:24
Адрес: Украина, Полтава
Сообщений: 5774
Сказал(а) спасибо: 340
Поблагодарили: 8154 раз(а) в 2385 сообщениях

По умолчанию Re: Драйвер 2,5А для XM-L, помогите с программой

Я ведь выше расчёт привёл - любой регулятор должен уметь подстраиваться под реальные физические процессы, наоборот сделать гораздо сложнее, ибо из аппаратной части с самого начала выжимается максимум. Задержи вносит ёмкость и индуктивность - выкинуть их из импульсного преобразователя, который по определению имеет инерцию? Обрабатывать поток данных тоже нужно с минимальным квантованием по времени. Т.е. не страдать интегрированием семплов, чтоб потом фиг знает через сколько их там обработать - это тоже задержки. Ну и наконец - сам МК не всесильный и деление там, где оно ненужно, будет обрабатывать в десятки-сотни раз дольше, расходуя на это времени раз в 10 больше, чем мог бы обеспечить АЦП. Беззнаковое деление 32/32 жрёт под тысячу тактов (сейчас сходу точно не скажу - нужно в симуляторе погонять), а 16/16 мало, ибо деление дико ошибкогенерирующая операция, и в результате можно потерять очень много младших бит. Отсюда и проблемы с шумами - медленно и грубо...

По возможности деление и умножение нужно заменять на сдвиги, сложения и вычитания. Но это возможно только если умножать и делить приходится на константу. Деления на переменные, если это возможно, нужно заменять на умножения со сдвигами (делениями на константу). Беззнаковое умножение 16*16 кушает немного больше сотни тактов. Формулы приходится здорово уродовать под возможности камня. Это не ПК, который плавающую запятую жуёт быстрее фиксированной, а деление 64/64 выполняет за такт. Ассемблер это прекрасно показывает...

[Исправлено: INFERION, 03.11.2013 в 03:54]
INFERION вне форума   Ответить с цитированием Вверх
Ответ  Создать новую тему
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск





Copyright ©2007 - 2024, FONAREVKA.RU

Powered by vBulletin®
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd. Перевод: zCarot

Правила форума | Отказ от ответственности

Время генерации страницы 0.10391 секунды с 15 запросами