Заголовок сообщения: Re: Помогите вывести значение на семисегментники через 74HC5
Добавлено: Пт мар 13, 2015 08:45:16
Держит паяльник хвостом
Карма: 19
Рейтинг сообщений: 147
Зарегистрирован: Ср мар 03, 2010 11:48:00 Сообщений: 993 Откуда: Уфа
Рейтинг сообщения:0
Все верно, советы Аlex и ARV совершенно "в точку", добавлю и свои 5 копеек. Вижу схему в протеусе, т.е. модель с аналогичной моей схеме организацией включения сегментов, так вот, тоже пытался долго найти ошибку, почему в модели индикация не хочет работать, пока не спаял плату, в железе все отлично заработало. Потом оказалось все просто, надо изменить свойства моделирования и индикатора, тогда вроде можно получить приемлемый результат. Второе, это использовать для вывода аппаратный SPI, очень сокращает и упрощает процедуру вывода.
Вложения:
Комментарий к файлу: фото, схема. TEST_LCD.rar [132.35 KiB]
Скачиваний: 196
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Чем вас смущает массив с 14 значений? Вот посмотрите, я взял с этого примера http://radioparty.ru/prog-avr/program-c ... on-74hc595 все так же до значения " 0x00 = пусто ", и в конце дописал еще три значения своих, для подачи на катод нуля 0xFB =11111011 , 0xFD = 11111101, 0xFE = 11111110.
То есть в один регистр я загоняю значение анодов (массив от 0 до 10), а во второй значения катодов 0xFB, 0xFD, 0xFE (11-13).
Пауза у меня стоит после защелкивания, то есть загнали значения, засветили сегменты и ждем немного, потот снова загоняем новое значение....
Заголовок сообщения: Re: Помогите вывести значение на семисегментники через 74HC5
Добавлено: Вс мар 15, 2015 23:04:51
Модератор
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Странно, а зачем тогда из массива их выдёргивать ? Пишите в 0-вой байт напрямую эти константы, да и всё. Что касается проблемы. Скорее всего, это протеус глючит. Даже по картинке видно, что цифра 2 должна светиться полностью. Если судить по цветам кубиков на выводах дисплея. На железе всё будет показывать нормально. Просто протеусу нужно гашение. Посылайте сначала нулевые байты, а потом уже с данными. И задержку воткните в главный цикл, после каждой зажжёной цифры. А то как-то нелгично её видеть в функции передачи, т.к. именно к этой функции она никакого отношения не имеет.
Заголовок сообщения: Re: Помогите вывести значение на семисегментники через 74HC5
Добавлено: Вс мар 15, 2015 23:20:33
Модератор
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Можно сделать немного по другому. Измените схему так, чтобы первый регистр шел на аноды (выбор индикатора), а второй на катоды (сегменты). Тогда для гашения достаточно будет послать всего 1 байт с единичками и защёлкнуть его там. А затем ещё 2 байта уже с актуальными данными, для зажигания необходимого индикатора.
Наверное когда сделаю уже в железе попробую свою программу с одиночным выводом, если не будет проблем то оставлю, притом уже переделал на два трехразрядных семисегментника.
////////////////////////// unsigned char char2byte( unsigned char ch ){ switch(ch){ case 0 : return 0x3f; case 1 : return 0x06; case 2 : return 0x5B; case 3 : return 0x4F; case 4 : return 0x66; case 5 : return 0x6D; case 6 : return 0x7D; case 7 : return 0x27; case 8 : return 0x7F; case 9 : return 0x6F;
case 'a' : return 0x77; case 'b' : return 0x7C; case 'c' : return 0x39; case 'd' : return 0x5E; case 'e' : return 0x79; case 'f' : return 0x71; case 'g' : return 0x3D; case 'h' : return 0x74; case 'u' : return 0x3E; case 'o' : return 0x5C; case 'i' : return 0x30; case 't' : return 0x78; case 's' : return 0x6D; case 'r' : return 0x50; case 'П' : return 0x37; case 'p' : return 0x73; case 'Г' : return 0x31; case '_' : return 0x08; case '-' : return 0x40; case '+' : return 0x70; case '=' : return 0x48; case '°' : return 0x63; case '.' : return 0x80; case ' ' : return 0x00; default : return 0x00; } } //////////////////// void clock() { PORTA = PORTA | (1<<1) ; //1 #asm("nop"); PORTA = PORTA & ~(1<<1); //0 } ;
void _dm135(const char *data, unsigned char *dot_) { unsigned char i, j; // PORTA, configure pins 0..2 as outputs // pin0 - data, pin1 - clock, pin2 - latch: DDRA |= (1 << 2) | (1 << 1) | (1 << 0); // reset data, clock and latch pins: PORTA &= ~((1 << 2) | (1 << 1) | (1 << 0)); // send bytes for (i = 0; i < decc; i++) { // 8 bits in each byte j = 8;
while (j-- > 0) { // pin0 (1 << 0) - data if (dot_[i] == 1) { // Кроме if (x & (1 << j)) других сдвигов не нужно! if (( char2byte(data[i]) + 0x80 ) & (1 << j)) { PORTA = PORTA |= 1; } else { PORTA = PORTA &= ~1; }
} else {
if (( char2byte(data[i]) + 0x00 ) & (1 << j)) { PORTA = PORTA |= 1; } else { PORTA = PORTA &= ~1; } } clock(); } } // pulse latch input (0 to 1, then 1 to 0): PORTA |= (1 << 2); #asm("nop"); PORTA &= ~(1 << 2); }
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения