Например TDA7294

Форум РадиоКот • Просмотр темы - Загадочный чарлиплексинг
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн сен 22, 2025 12:52:02

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Загадочный чарлиплексинг
СообщениеДобавлено: Сб авг 24, 2024 15:07:22 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2119
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18406
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
я тут в некоторой прострации... попал на нечто, к чему никак не был готов, и пока не понимаю, куда копать...

итак, в небольшом проекте решил применить чарлиплексинг для управления линейной шкалой из 48 светодиодов, схема ниже.
Изображение
написал программку тестовую, исходник в спойлере.
Спойлер#include <avr/io.h>
#include <stdbool.h>
#include "avr_helper.h"

#define SCALE_LEN 48

#define L1 _BV(PD0)
#define L2 _BV(PD1)
#define L3 _BV(PD2)
#define L4 _BV(PD3)
#define L5 _BV(PD4)
#define L6 _BV(PD5)
#define L7 _BV(PD6)
#define L8 _BV(PD7)

#define CHPX(d,p) {.ddr = (d + p), .port = (d)}, {.ddr = (d + p), .port = (p)}

typedef struct {
uint8_t ddr;
uint8_t port;
} charli_t;

extern bool scale[SCALE_LEN];

extern const __flash charli_t leds[SCALE_LEN];

Спойлер
Код:
#include <avr/interrupt.h>
#include "global.h"

const __flash charli_t leds[SCALE_LEN] = {
   CHPX(L1,L2),  // HL1-2
   CHPX(L1,L3),  // HL3-4
   CHPX(L1,L4),  // HL5-6
   CHPX(L1,L5),  // HL7-8
   CHPX(L1,L6),  // HL9-10
   CHPX(L1,L7),  // HL11-12
   CHPX(L1,L8),  // HL13-14
   CHPX(L2,L3),  // HL15-16
   CHPX(L2,L4),  // HL17-18
   CHPX(L2,L5),  // HL19-20
   CHPX(L2,L6),  // HL21-22
   CHPX(L2,L7),  // HL23-24
   CHPX(L2,L8),  // HL25-26
   CHPX(L3,L4),  // HL27-28
   CHPX(L3,L5),  // HL29-30
   CHPX(L3,L6),  // HL31-32
   CHPX(L3,L7),  // HL33-34
   CHPX(L3,L8),  // HL35-36
   CHPX(L4,L5),  // HL37-38
   CHPX(L4,L6),  // HL39-40
   CHPX(L4,L7),  // HL41-42
   CHPX(L4,L8),  // HL43-44
   CHPX(L5,L6),  // HL45-46
   CHPX(L5,L7)   // HL47-48
};

bool scale[SCALE_LEN];

void led_bar(uint8_t height){
   for(uint8_t i=0; i<SCALE_LEN; i++){
      scale[i] = i < height;
   }
}

#define DELAY 10000
volatile bool next;
volatile bool key;

ISR(TIMER0_COMPA_vect){
   static uint8_t item;
   static uint16_t delay = DELAY;
   PORTD = 0;
   DDRD = 0;
   if(++item >= SCALE_LEN) item = 0;
   if(scale[item]){
      PORTD = leds[item].port;
      DDRD = leds[item].ddr;
   }
   if(!--delay){
      key = !!!(PINC & _BV(PC3));
      next = true;
      delay = DELAY;
   }
}

int main(void){
   uint8_t val = 1;
   int8_t d = 1;
   PORTC = _BV(PC3);
   TCCR0A = _BV(WGM01);
   TCCR0B = TIMER_CLK_DIV_64;
   TCCR0A = 90; // ЗАГАДОЧНОЕ ЧИСЛО!!!
   TIMSK0 = _BV(OCIE0A);
   sei();
   while(1){
      while(key);
      led_bar(val);
      while(!next);
      next = false;
      val += d;
      if(
         ((d > 0) && (val == (SCALE_LEN-1)))
         ||
         ((d < 0) && (val == 0))
        ){
         d = -d;
      }
   }
}

казалось бы, ничего сложного, поведение прогнозируется элементарное: шкала нарастает и спадает с некоторой скоростью, определяемой значением DELAY, а частота обновления шкалы (динамическое обновление) зависит от значения, которое помечено комментарием "ЗАГАДОЧНОЕ ЧИСЛО".

а загадочное оно потому, что при изменении его с шагом в 10 в любую сторону (я другие варианты просто не пробовал, т.к. и без того странно) можно получать следующее поведение:
- шкала не светится вообще
- на шкале мерцает (примерно герц 10-15) только первый светодиод
- шкала работает отлично, как задумано
- на шкале не просвечиваются светодиоды, включенные катодами к линии LED6 (см. схему)
- на шкале не просвечиваются светодиоды, подключенные к LED6.

хотя, как я предполагал, изменение этой константы меняет только частоты динамического чарлиплексинга и может повлиять только на степень мерцания светодиодов...

такая вот загадка. может, я чего-то очевидного не замечаю?


Вложения:
Снимок.PNG [57.72 KiB]
Скачиваний: 533

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

Мой уютный бложик... заходите!
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Загадочный чарлиплексинг
СообщениеДобавлено: Вс авг 25, 2024 08:13:38 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2922
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24114
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Чисто на основе интуиции. Имеет место быть интерференция исполняемого кода и "загадочной" задержки. То есть причина в том, что диапазон изменения задержек находится целиком в зоне интерференции. Его нужно увеличивать минимум на десятичный порядок.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Загадочный чарлиплексинг
СообщениеДобавлено: Вс авг 25, 2024 11:21:00 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2119
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18406
Откуда: Новочеркасск
Рейтинг сообщения: 4
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
вы не поверите, но я наткнулся на баг чипа.

чип - atmega328p, купленный недорого на Алиэкспресе. довольно много раз покупал и на проблемы не наталкивался, если не считать общей для всех проблемой несоответствие фьюзов правильным заводским настройкам.


а теперь, после долгих экспериментов, я выяснил, что регистр TCCR0A не работает, как должен по документации:
биты старшей тетрады этого регистра пишутся и читаются, но на результат (т.е. на момент прерывания) влияет только бит 5 (т.е. маска 0x20), причем влияет как раз так, что не работает линия LED6;
биты 2 и 3 младшей тетрады (маска 0x0C) не пишутся, читаются всегда нулями, соответственно и результат работы таймера странный
остальные 2 бита и пишутся, и читаются, но результат работы таймера странный: если младший бит = 1, то прерывание по совпадению возникает в момент, когда у нормального таймера TCCR0A=255 или близкое к тому, т.е. поздно, а если младший бит =0, то прерывание возникает рано.
такие вот пироги, товарищи...

будьте осторожны с алиэкспрессом.

P.S. в принципе, для моего проекта это не критично, т.к. подобрать значение регистра для минимальной и максимальной яркости шкалы можно, хотя, конечно, хотелось регулировать яркость более-менее плавно... главное, чтобы других багов не нашлось.

P.P.S. чисто теоретически я допускаю, что при пайке феном я чип перегрел... но это представляется маловероятным... хотя кто скажет наверняка?

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

Мой уютный бложик... заходите!


Последний раз редактировалось ARV Вс авг 25, 2024 12:11:24, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Загадочный чарлиплексинг
СообщениеДобавлено: Вс авг 25, 2024 11:44:23 
Друг Кота
Аватар пользователя

Карма: 59
Рейтинг сообщений: 1563
Зарегистрирован: Вт окт 22, 2013 04:37:23
Сообщений: 3381
Откуда: Казань
Рейтинг сообщения: 0
Наверняка скажет только заливка кода в другие 328р, купленные не на Али, и, желательно, гарантированно подлинные.

А то я лет 20 назад неделю просидел с непоняткой в своей программе, будучи уверенным, что нашёл баг в компиляторе Delphi. Уже думал разработчикам писать. Но через неделю пришло просветление, и оказалось, что компиляторы не ошибаются. Единственное, компилятор не китайцы ваяли, конечно.

_________________
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезисты Ordyl Alpha 350 и AM 140.
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльная маска XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Загадочный чарлиплексинг
СообщениеДобавлено: Вс авг 25, 2024 12:10:04 
Мучитель микросхем
Аватар пользователя

Карма: 1
Рейтинг сообщений: 39
Зарегистрирован: Ср янв 11, 2012 18:20:26
Сообщений: 473
Рейтинг сообщения: 0
ARV писал(а):
будьте осторожны с алиэкспрессом.
Макетка.. DIP-ка.. ZIF-ка.. :beer:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Загадочный чарлиплексинг
СообщениеДобавлено: Вс авг 25, 2024 12:14:57 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2119
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18406
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
smacorp писал(а):
А то я лет 20 назад неделю просидел с непоняткой в своей программе, будучи уверенным, что нашёл баг в компиляторе Delphi
ну, как бы если я вывожу два числа (одно то, которое записал в регистр, а другое, которое считал из регистра после записи), и эти два числа разные, грешить на программу было бы странно...
shonty писал(а):
Макетка.. DIP-ка.. ZIF-ка..
во-первых, я уже много лет DIP стараюсь не применять, кроме как именно макетирование на единственном чипе в DIP-корпусе
во-вторых, макетирование на одном чипе а изготовление на другом, как выяснилось, более не гарантирует результат...

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Загадочный чарлиплексинг
СообщениеДобавлено: Вс авг 25, 2024 12:40:23 
Мучитель микросхем
Аватар пользователя

Карма: 1
Рейтинг сообщений: 39
Зарегистрирован: Ср янв 11, 2012 18:20:26
Сообщений: 473
Рейтинг сообщения: 0
shonty писал(а):
во-вторых, макетирование на одном чипе а изготовление на другом, как выяснилось, более не гарантирует результат..

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

и макетирование на неизвестном чипе, может вообще не превести ни к какому результату))


Последний раз редактировалось shonty Вс авг 25, 2024 12:44:46, всего редактировалось 2 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Загадочный чарлиплексинг
СообщениеДобавлено: Вс авг 25, 2024 12:43:18 
Сверлит текстолит когтями

Карма: 12
Рейтинг сообщений: 130
Зарегистрирован: Вт июн 07, 2011 08:03:18
Сообщений: 1249
Рейтинг сообщения: 0
во-первых, я уже много лет DIP стараюсь не применять, кроме как именно макетирование на единственном чипе в DIP-корпусе
во-вторых, макетирование на одном чипе а изготовление на другом, как выяснилось, более не гарантирует результат...

Как то закручено всё. А можно членораздельнее? Ибо не понятно. Для особо одарённых.)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Загадочный чарлиплексинг
СообщениеДобавлено: Вс авг 25, 2024 12:52:46 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2119
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18406
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
ну... у меня есть единственная atmega328p в DIP-корпусе... я её только для макетирования и применяю. а в проектах, для которых разрабатываю платы, применяю TQFP32 корпуса (еще купил на пробу QFN, но пока не применял).

макетировать в TQFP32 смысла нет, т.к. панельки дорогие, да и нету у меня, а для QFN и панелек-то не существует. с учетом этой темы, результат макетирования в DIP-е не гарантия того, что в другом корпусе заработает, т.к. другой корпус может быть с сюрпризом.

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

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Загадочный чарлиплексинг
СообщениеДобавлено: Пн авг 26, 2024 13:42:41 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1480
Рейтинг сообщения: 0
1. Контрафактные МК могут попасться.
2. Есть ревизии разных годов. Нужно смотреть Errata.
3. Разница по корпусам бывает (DIP SOIC). Нужно уточнять в даташитах.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Загадочный чарлиплексинг
СообщениеДобавлено: Сб авг 31, 2024 07:59:20 
Мучитель микросхем
Аватар пользователя

Карма: 1
Рейтинг сообщений: 39
Зарегистрирован: Ср янв 11, 2012 18:20:26
Сообщений: 473
Рейтинг сообщения: 0
Вот и мне посчастливилось столкнуться с подобным viewtopic.php?f=57&t=5931&p=4620636#p4620636
Написано под один чип, а на 2-х других не желает работать.. :facepalm: правда "аналог" - LGT8f328p
Благо что всё на разъёмах, а проект штучный, для домашней лаборатории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Загадочный чарлиплексинг
СообщениеДобавлено: Сб авг 31, 2024 12:01:19 
Друг Кота
Аватар пользователя

Карма: 59
Рейтинг сообщений: 1563
Зарегистрирован: Вт окт 22, 2013 04:37:23
Сообщений: 3381
Откуда: Казань
Рейтинг сообщения: 0
shonty, это просто бракованный чип. С купленным на Али, такое не редкость.

_________________
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезисты Ordyl Alpha 350 и AM 140.
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльная маска XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Загадочный чарлиплексинг
СообщениеДобавлено: Вс сен 01, 2024 18:25:00 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2119
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18406
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
А 16-битный таймер работает. Пришлось всё навесить на него, теперь и яркость регулируется, и прочее работает.

Добавлено after 4 hours 18 minutes 23 seconds:
кстати, вот что вышло в итоге:
Изображение
шкальный термометр :))

измеряет в пределах того, что позволяет DS18B20, отображает на шкале от -10°С до +99°С, 48 точек на шкале, каждая точка - 1°, "деления" шкалы автоматически передвигаются так, чтобы текущее значение уместилось на шкале (т.е. на фото шкала 0 - 40, температура 31 но если бы температура была, например, 46, то шкала стала бы 10 - 50). опционально в нижнем "делении" может отображаться истинное значение температуры. так же опционально можно выводить температуру "нормальным способом", т.е. обычными символами (3 варианта), но в этом случае положение должно быть горизонтальным и шкала не отображается. 15 уровней яркости. управление режимами одной кнопкой.
Изображение
Изображение
Изображение

есть лишних 4 платы, могу укомплектовать индикаторами (дешевле рынка, но все равно они очень дорогие, погуглите HCMS-2915). если кому нужно - пишите в ЛС.

Добавлено after 7 minutes 56 seconds:
чарлиплексинг, скажу я вам, довольно противная штука - частота динамической индикации получается высокая, малейшая задержка прерывания индикации неизбежно ведет к изменению яркости одного или нескольких светодиодов... довольно долго ковырялся с тем, чтобы совместить все в коде - работу по 1-wire, где крайне необходимо в некоторые моменты запрещать прерывания на время до 70 микросекунд (примерно), и различные задачи, связанные с некритичным отсчетом времени - период опроса датчика, дребезг кнопки и т.п.

но все получилось :)))


Вложения:
t4.jpg [44.99 KiB]
Скачиваний: 886
t3.jpg [46.19 KiB]
Скачиваний: 882
t2.jpg [43.85 KiB]
Скачиваний: 884
t1.png [131.32 KiB]
Скачиваний: 861

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

Мой уютный бложик... заходите!
Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 67


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y