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

Простые вопросы новичка.


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

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

ну перевернуть наверное не сложно:

for(i=16;i>=0;i--)

в целом ясно.Есть еще мысль в загажнике  -),но надо ее сформулировать ,я поработаю над другим вариантом.

спс

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

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

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

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

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

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

3 часа назад, Wawchuk сказал:

for(i=16;i>=0;i--)

Аккуратнее с такой конструкцией. У неё есть вариант, при котором она превратится в бесконечный цикл.

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

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

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

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

 

 вопрос по Вашему варианту функции, с поста выше:

//****************************************** //* запись в регистры 74HC595 //******************************************

void read_74HC595 (unsigned char reg8,unsigned char reg7, unsigned char reg6,

                                 unsigned char reg5, unsigned char reg4,unsigned char reg3,

                                 unsigned char reg2,unsigned char reg1, unsigned char reg0)

 

с таким количеством аргументов можно управляться следующим образом ?

 

int out_595 [8] = {0,0,0,0,0,0,0,1};  

int i; 

while(1)  
{

        for (i=0; i<8; i++)  
        {
        read_74HC595 (0,0,0,0.0.0,0,1) = out_595 ;  
        }

 в ней же перебирать надо не биты ,а байты? или ткните где в языке есть применение(использование) таких функций

Изменено пользователем Wawchuk
ошибсяread_74HC595 (0,0,0,0.0.0,0,1) = out_595 [i];  
Ссылка на комментарий
Поделиться на другие сайты

Зачем учить новичка тому, что считается ужасным стилем программирования?! Ведь проблем это породит больше, чем пользы.

Вот и первые ласточки:

10 часов назад, Wawchuk сказал:

с таким количеством аргументов можно управляться следующим образом ?

 

10 часов назад, Wawchuk сказал:

ткните где в языке есть применение(использование) таких функций

Я бы ткнул в эту функцию носом и сказал бы "не делай так, не делай так, не делай!" - как котенка в лужу.

Любую задачу надо решать постепенно, от общего к частному. Я не уследил за всей темой с 595-ыми регистрами, но догадываюсь, что проблема примерно такая.

У нас есть несколько регистров, которые надо заполнять данными. Значит, надо иметь функцию, которая выводит в ОДИН регистр данные, и повторять вызов этой функции столько раз, сколько регистров. Так как данных несколько, это массив, сколько регистров, столько и элементов массива. Значит, надо в цикле перебирать элементы массива и передавать их в ту самую функцию вывода в регистр. Ну а после этого надо дать строб на обновление выходных защелок регистров - вот и все решение задачи.

#define REG_CNT	8 /* количество регистров */
void write_reg595(unsigned char d); // функция вывода байта в регистр
void strobe(void); // функция выдачи строба для обновления защелок (может быть макросом)

unsigned char reg_data[REG_CNT]; // массив с данными для вывода

// функция обновления содержимого всех регистров
// data - указатель на данные
void update_all_regs(unsigned char *data){
  unsigned char i;
  for(i=0; i<REG_CNT; i++)
    write_reg595(data[i]);
  strobe(); // выдача импульса обновления защелок
}

// там, где надо обновить содержимое регистров, всего-навсего вызываем эту функцию так:
update_all_regs(reg_data);

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

 

З.Ы. Прошу пардону: не заметил, что тут все ЧИТАЮТ регистры, а не ЗАПИСЫВАЮТ. Но подход тот же самый: функция чтения одного, цикл перебора массива, куда заносятся считанные данные. Строб только надо делать ДО начала цикла, а не после, т.к. защелки в регистрах (кстати, они 597-е!) "с другой стороны" :) 

10 часов назад, Wawchuk сказал:

ошибся read_74HC595 (0,0,0,0.0.0,0,1) = out_595 

Да тут ошибок едва ли не столько  же, сколько символов!

1. Если read_74HC595 это функция, то присваивать ей значение недопустимо.

2. В перечислении параметров тоже ошибочка: часть запятых замменена на точки

3. 595-е регистры читать нет смысла, т.к. они предназначены для ВЫВОДА данных. Читать можно 597-е регистры, которые предназначены для ВВОДА данных.

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

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

13 часа назад, ARV сказал:

Зачем учить новичка тому, что считается ужасным стилем программирования?!

@ARV  встречный вопрос (в свете того что ТС пользует эту функцию в 16пыхе в прерывании ) какой код выполнится быстрей с ужасным стилем  или  ваш причесанный по учебнику?

ЗЫ представляю что будет, если показать конечный вариант на асм-вставках :)

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

9 часов назад, IMXO сказал:

встречный вопрос (в свете того что ТС пользует эту функцию в 16пыхе в прерывании ) какой код выполнится быстрей

Еще ни разу не встречал любительского проекта, где эта проблема на самом деле имела бы высокую важность. 207 микросекунд будет выполняться код или 307 - совершенно никакой разницы не будет. И еще боооооольшой вопрос, действительно ли будет какой-то заметный выигрыш в скорости при ужасном стиле, а вот что проигрыш в стиле УЖЕ ЕСТЬ - доказывать не надо. И этот проигрыш обязательно аукнется попозже.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

  • 2 месяца спустя...

Расскажите в двух словах в чем будет отличие 8 и 16 битного таймеров. Как скажется на качестве сигнала в фазкорректоре шим?

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

1 час назад, Дмитрий Мамедиев сказал:

в чем будет отличие 8 и 16 битного таймеров

Главное отличие в том, что 16-битный может быть настроен на работу в 256 раз медленнее, чем 8-битный.

Следущее отличие в том, что 8-битный обычно имеет меньше возможностей (режимов ШИМ, например), чем 16-битный.

В итоге 16-битный всегда может заменить 8-битный, а наоборот - значительно реже.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

Странные какие-то вопросы. Лучше, не лучше, ... Каждой задаче - своё решение.
8 бит от 16-ти отличается размером бит. Нужен 8-мибитный таймер - пользуйтесь. Понадобилось шире - берём 16-тибитный.

PS: Причём тут вообще скорость ? :wacko:

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

В контексте генерации ШИМ 8-битный имеет предпочтение именно по компромиссу "частота сигнала/разрядность ШИМ" - обычный среднестатистический AVR обеспечит на 8-битном генерацию 8-битного ШИМ с частотой до 32 КГц - практически достаточно для любых целей, хоть "силовых", хоть "звуковых". 

Не смотря на все достоинства 16-битного с его помощью 16-битный шим на такой частоте никогда не получить.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

У 16-битного таймера можно задавать модуль счета (ICR1 или OCR1A). Кстати, без этого полные 16 бит не получить, что забавно. А так - берете и настраиваете хоть 16 бит, хоть 12, хоть 8, хоть 2 бита. С соответствующей частотой.

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

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

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

Хочу генерироват шим для импульсного блока питания. По сути это два бита с определенной частотой, примерно 40к. А как реализовать двубитный шим? Да еще с коректором фазы.

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

PhaseCorrect PWM на двух каналах не устроит?

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Сообщения

    • Согласен, очень криво объяснил. Это работа трёх вольтовой линии, просто на диод шотки сдвоенный, на один анод приходит сигнал напрямую с трансформатора, а на второй через дроссель. Вольт/деление 5 вольт в клетке, тайминг по моему 10 МС. Третья фотография это сигнал на катодах уровень земли ровно по центру экрана. Но все линии по итогу в порядке 3.3 в, 5, в, 12 в и -12 в. Нагрузить все линии не могу сразу ,так как тут же выгорают транзисторы (имеется нагрузка 250 ватт по 10 ампер на каждую линию за исключением-12в), поэтому нагружаю 3.3 вольтовую линию на 10 ампер,  подключаю переменный резистор 50 ватт на 15 ом на 5 вольтовую линию и постепенно довожу до той той картины с перекосом (это гдето  50 ватт общее). По поводу микросхемы, вверху имеется скрин где между импульсами проскакивает мини импульс, если так можно сказать, он проскакивает и на одной  и на второй ноге (7,8). Микросхема не tl 494, а lw4933/abx942.1/c9421646. Далее они приходят на базы транзисторов 945g  коллекторы этих транзисторов соединены с  выводами трансформатора. Просто схема типовая, легче мне кажется просто привести фото самого блока, для тех кто разбирается будет гораздо информативне.  Диод шотки по 12 вольтовой линии был подгоревший, заменил на донора. Приводить скрины не буду что бы не захламлять тему. В итоге, пока все так же, при достижении определенной нагрузки суммарно где-то 50 ватт, появляется этот "выброс и перекос". По этому имеются мысли на два варианта, это микросхема , этот мини импульс между периодами, на низкой нагрузке особо не влияет, но при достижении определенной приводит с самовозбуждению входной цепи и непроизвольному открытию транзистора нижнего плеча. Либо дело в "горячей части", плавающий дефект в обвязке силовых ключей.  Спасибо за ответ.
    • @Gomerchik а вы контролировали как меняется уровень сигнала на А1 ардуины?
    • Спасибо за совет. Автором данного проекта я не являюсь, мне нужно было воссоздать уличный датчик для метеостанции взамен пропавшего(( Из разного найденного в интернете этот проект работает с моей станцией Орегон (спасибо автору). В понедельник попробую последовать Вашему совету. Но все равно куча непоняток  как блин это работает)) Если дело в неправильной отправки команды, то как на это влияет подключение датчика температуры? Если совсем не подключать таймер, то передача идет один раз (как и прописано в программе), станция принимает и отображает, но минут через сколько-то естественно станция уже ни чего не показывает, но с таймером питание полностью не пропадает с ардуинки, но передача сигнала каким-то образом работает по таймеру.  В моем понимании данная команда подается один раз потому, что таймер должен отключать питание МК после передачи сигнала и каждые 43 сек снова подавать питание (так того требует станция).  Ардуино передает показания температуры отключается полностью и 43 секунды мк не работает.  Сейчас у меня питание пока сделано на подпитке от солнечной батареи, но пару пасмурных дней и аккумулятор съедается до отключения(
    • thickman Так и сделаю. Вытащу из бу БП.  Буду знать, как отличить. Благодарю. Заменил транзисторы на IRFB20N50K. Картина стала, совсем другой.  Похоже трудность не в драйвере, на момент подвозбуда, переходные процессы, в нем, завершены. Увеличил затворные резисторы до 50ом, стало немного лучше.  Не понятно, почему верхний ключ греется несколько сильнее. Возможно, стоит посмотреть ток в коллекторе.  Снабберные емкости временно удалил, изменений не произошло.  Замена ТГР на другой, на кольце MSTN-16A-TH, так же, результата не принесла.   irfb20n50k.pdf
    • А что нить из ассортимента активных щупов производства СССР..))
    • Типа такого: https://aliexpress.ru/item/2044864227.html?sku_id=58855020183
×
×
  • Создать...