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

работа с TM1638 (вытащить значения битов из байта)


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

Помогите пожалуйста разобраться с программным моментом - в библиотеке для  TM1638 есть команда считывания байта как состояния 8 кнопок на этой сборке :
 uint8_t buttons = tm.readButtons();
как вытащить из нее отдельные байты, никак не могу понять, поискал в интернетах и ничего, -  и назначить для них переменные (возможно, с переменными о прошлом состоянии?)?

mc419-1.png

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

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

Получить состояние бита можно так

bit b1,b2,b3,b4;
if(buttons & 1) b1=1; else b1=0;
if(buttons & 2) b2=1; else b2=0;
if(buttons & 4) b3=1; else b3=0;
if(buttons & 8) b4=1; else b4=0;

Ну и так далее.

Пока ты жив, надежда есть.

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

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

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

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

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

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

Спасибо!) А то застрял на этом моменте, ни туда, ни сюда
В скобках в двоичной нумерация, правильно?

Видел у AlexGuver о том, что можно расширить возможности Arduino и разрядность АЦП повысить в несколько раз, еще и сделав PWM все цифровые контакты; насколько это надежно, и вообще как реализуется, интересно знать...

 

Цитата

### GyverHacks v2.3
Библиотека с некоторыми удобными хаками для Arduino UNO/NANO/MINI (atmega328):
- Быстрые аналоги стандартных функций чтения/записи
- Изменение частоты ШИМ пинов (3, 5, 6, 9, 10, 11)
- Установка ШИМ на пинах 9 и 10 в режим 10 бит (analogWrite 0-1023)
- Генерация ШИМ на ЛЮБОМ пине (частота ~150 Гц)
- Измерение напряжения питания + калибровка константы
- Перевод напряжения питания в проценты по графику разряда для разных типов АКБ
- Измерение температуры ядра
#### Методы и функции библиотеки
<details>
<summary>РАЗВЕРНУТЬ</summary>
<p>
Смотри примеры в папке examples!

```C
// ********************************************* Хаки с ШИМ *********************************************

void setPWMprescaler(uint8_t pin, uint16_t mode);
// установка частоты ШИМ на пине
// пины 5 и 6     8 bit    mode: 1 (62 500 Гц), 2 (7 812 Гц), 3 (976 Гц), 4 (244 Гц), 5 (61 Гц). ВЛИЯЕТ НА РАБОТУ millis() и delay()
// пины 9 и 10     8 bit     mode: 1 (62 500 Гц), 2 (7 812 Гц), 3 (976 Гц), 4 (244 Гц), 5 (61 Гц). ВЛИЯЕТ НА РАБОТУ servo
// пины 9 и 10     10 bit     mode: 1 (15 625 Гц), 2 (1 953 Гц), 3 (244 Гц), 4 (61 Гц),  5 (15 Гц). ВЛИЯЕТ НА РАБОТУ servo
// пины 3 и 11     8 bit    mode: 1 (31 250 Гц), 2 (3 906 Гц), 3 (976 Гц), 4 (488 Гц), 5 (244 Гц), 6 (122 Гц), 7 (30 Гц). ВЛИЯЕТ НА РАБОТУ tone()

void set8bitPWM();                 // установка ШИМ на пинах 9 и 10 в режим 8 бит (analogWrite 0-255) (по умолчанию)

void set10bitPWM();                // установка ШИМ на пинах 9 и 10 в режим 10 бит (analogWrite 0-1023)

void anyPWMinit(byte prescaler);
// инициализация ШИМ на любом пине
// prescaler: 4 - 311 Гц, 5 - 244 Гц, 6 - 122 Гц, 7 - 30 Гц
// если пинов много - понижайте частоту (20 пинов работают отлично на 6 режиме)                                                    
                                                    
void anyPWMpin(uint8_t pin);       // настроить ЛЮБОЙ пин для генерации ШИМ

void anyPWM(byte pin, byte duty);  // включить ШИМ на ЛЮБОМ пине (настроенном выше)

// ********************************************* Ускоряем функции *********************************************

void setPWM(uint8_t pin, uint8_t duty);      // быстрый аналог analogWrite (в 7 раз быстрее)

void setPin(uint8_t pin, uint8_t x);         // быстрый аналог digitalWrite (в 10 раз быстрее)

boolean readPin(uint8_t pin);                // быстрый аналог digitalRead (в 11 раз быстрее)

void setADCrate(byte mode);
// установка скорости работы АЦП (analogRead)
// mode 1: 3.04 мкс (частота оцифровки 329 000 кГц)
// mode 2: 4.72 мкс (частота оцифровки 210 000 кГц)
// mode 3: 8.04 мкс (частота оцифровки 125 000 кГц)
// mode 4: 15.12 мкс (частота оцифровки 66 100 кГц)
// mode 5: 28.04 мкс (частота оцифровки 35 600 кГц)
// mode 6: 56.04 мкс (частота оцифровки 17 800 кГц)                                                    
// mode 7: 112 мкс (частота оцифровки 8 900 Гц)

// ********************************************* Точный вольтметр *********************************************

int getVCC();                      // возвращает опорное напряжение (напряжение питания)
                                   // константа по умолчанию равна 1100, нужно калибровать!
                                
void constantWizard();             // помошник калибровки константы (смотри пример)

void restoreConstant(int adr);     // восстановить константу из памяти

void setConst(int new_const);      // установить константу вручную (по умолч. 1100)

int getConst();                    // вывести текущую константу

int getVoltage(uint8_t pin);       // измерить напряжение на пине с учётом опорного

// функции получения процента заряда из напряжения, линеаризованы вручную по графикам разряда АКБ
// использовать вот так: lithiumPercent(getVCC()); - ардуина питается от лития

byte lithiumPercent(int volts);    // возвращает процент заряда Li-ion аккумулятора (4,2-2,8 В)

byte alkaline3Percent(int volts);  // возвращает процент заряда 3х алкалиновых батареек (4,6-3,3 В)

byte nickel3Percent(int volts);    // возвращает процент заряда 3х Ni-Cd аккумуляторов (4.2-3.0 В)

byte nickel4Percent(int volts);    // возвращает процент заряда 4х Ni-Cd аккумуляторов (5.6-4.0В)

// функция для расчёта заряда батареи в процентах
// принимает напряжение в милливолльтах (volts), а также напряжения, при которых заряд равен 100, 80... 0%
byte mVtoPercent(int volts, int volt100, int volt80, int volt60, int volt40, int volt20, int volt0);

// ********************************************* Прочее *********************************************
float getTemp();        // получить примерную температуру ядра процессора (температура окружающей среды или температура внутри корпуса)

```
</p>
</details>

 

GyverHacks.zip

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

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

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

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

Это бред. Повысить разрядность АЦП невозможно. Я думаю, что вам нужно изучать реальные, а не вымышленные возможности Ардуино.

Пока ты жив, надежда есть.

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

7 часов назад, mazzi сказал:

Это бред. Повысить разрядность АЦП невозможно. Я думаю, что вам нужно изучать реальные, а не вымышленные возможности Ардуино.

Спасибо, буду знать)

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

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

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

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

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

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

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

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

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

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

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

    • Если бы был ограничитель то он бы ограничивал китайские амперы ))
    • Да это понятно. Вопрос (был) в другом - критичность Low ESR. Ибо есть сложности их добыть. И риски купить (впарят) не те.
    • Или регулятор китайских ампер.
    • Можно было для удобства привести рабочий вариант схемы с номиналами. Что сразу бросается, напряжение на FB не может быть 4 вольта. У вас делитель посчитан так, чтобы при Vout= 400 В получить Vfb= 2.5 В. Верхнее сопротивление желательно выбрать до 1 мегаома, тогда нижнее будет меньше и на него не так сильно будет влиять внутреннее Rfb, которое по даташиту от 2 до 10 МОм, мало ли что они ставят. Только это добавляет дополнительную погрешность в 1.2% и Vout находится в пределах 403-408 В, а еще плюс погрешность делителя. Кстати вы сейчас видите, как влияет на работу шунтирование осциллографом этой точки. Не понял, куда вы ставите термистор. Байпасный диод нужен для снижения вероятности пробоя при бросках напряжения. Под байпасным диодом понимается диод от входа индуктивности на выходной конденсатор. Обратный диод ставят в затвор для более быстрого рассасывания заряда. Тут главное не перегрузить выход контроллера большим током с затвора. Запитайте контроллер от внешнего источника 13 В для отладки схемы. Так вы уберете одну неизвестную. Контроллер должен самостоятельно запуститься без подачи основного питания. Надеюсь, что вы запускаете PFC не от сети, о от DC источника. Вольт 60 обычно хватает для запуска. 
    • Вы искренне верите, что кто-то будет разбираться по дорожкам на обратной стороне платы?!   Заменили одно кривое объяснение другим, только с кривизной в другую сторону. Попробуйте просто нарисовать фрагмент схемы и стрелкой указать, в какой точке снята осциллограмма. Попробуйте также не употреблять объяснения вида "тайминг по моему 10 МС". Я не про мегасименсы. Я про "по-моему". Когда даёте исходные данные с точностью "по-моему", - получите ответы ценностью "мне кажется". Оно вам надо?
    • Ну без тестера то никак, придётся менять всё 
    • Явно перегрузили регулятор у которого нет ограничителя по току.
×
×
  • Создать...