Как подключить данные индикаторы
- Войдите на сайт для отправки комментариев
Ср, 10/12/2014 - 17:17
Прошу помощи , есть индикаторы от старой аппаратуры, гуглил, но нашел только похожее.
Эксперименты не увенчались успехом, перепробовал все.
1.

о весов
2 от старого ДВД


Попробуй второй индикатор как сдвиговый регистр подключить и срать в DAT рандомными байтами.
Пробовал второй подключать по SPI интрефейсу, индикация была, но хаотичная, ничего не смог добиться, никакой логики не увидел.
Примеры пробовал и библиотеки от аналогичных микросхем PT6961 и TM1638 / TM1640, вот тема из которой хоть что то стало понятно
http://arduino.ru/forum/programmirovanie/spi-i-pt6961.
Вопрос, где почитать попонятнее про управление такими индикаторами, возможно ли как то узнать какие коды необходимо посылать для зажигания отдельных символов и цифр? Хотелось бы использовать данный индикатор для погодной станции и таймера.
А по первому нашел только одну тему, но опять же ничего не понял про подключение
http://pro-radio.ru/it-works/12123/
Заранее спасибо.
Я же говорю, что распиновка второго очень похожа на сдвиговый регистр или на MAX7219
5V - питание
GND - земля
DAT - данные
CLK - тактирование
STB - защелка
Попробуй подключить по распиновке в начале скетча:
#include <CyberLib.h> #define LATCH 12 //pin 12 of BBFuino connect to RCK of 8x7segment module #define CLOCK 11 //pin 11 of BBFuino connect to SCK of 8x7segment module #define DATA 10 //pin 10 of BBFuino connect to DIO of 8x7segment module #define LEFT 0 // define the value for left justify #define RIGHT 1 // define the value for right justify #define MultiplexDelay 1 //delay for multiplexing between digit on 8x7segment module byte anode[8] = { 0b10000000, //digit 1 from right 0b01000000, //digit 2 from right 0b00100000, //digit 3 from right 0b00010000, //digit 4 from right 0b00001000, //digit 5 from right 0b00000100, //digit 6 from right 0b00000010, //digit 7 from right 0b00000001 //digit 8 from right }; //array for decimal number, it is the cathode, please refer to the datasheet. //therefore a logic low will activete the particular segment //PGFEDCBA, segment on 7 segment, P is the dot byte cathode[12] = {0b11000000, // 0 0b11111001, // 1 0b10100100, // 2 0b10110000, // 3 0b10011001, // 4 0b10010010, // 5 0b10000010, // 6 0b11111000, // 7 0b10000000, // 8 0b10010000, // 9 0b01111111, //dot 0b11111111 //blank }; void setup() { pinMode(LATCH, OUTPUT); pinMode(CLOCK, OUTPUT); pinMode(DATA, OUTPUT); digitalWrite(LATCH, HIGH); // delay_ms(1000); } // 1 0 01001001 // 6 2 0 12345678 // 7 0 // 5 3 0 // 4 8 0 void loop() { displayNumber8x7segment(RIGHT, millis()); } void display8x7segment(byte datapin, byte clockpin, byte latchpin, byte digit, byte number) { digitalWrite(latchpin, LOW); shiftOut(datapin, clockpin, MSBFIRST, digit); // clears the right display shiftOut(datapin, clockpin, MSBFIRST, number); // clears the left display digitalWrite(latchpin, HIGH); } void displayNumber8x7segment(byte justify, unsigned long value) { byte decimal[8] = {0}; value = value % 100000000; //ensure the value is within 8 digits only decimal[7] = value / 10000000; //extract digit 7 from value value = value % 10000000; //extract the rest of 7 digit value decimal[6] = value / 1000000; value = value % 1000000; decimal[5] = value / 100000; value = value % 100000; decimal[4] = value / 10000; value = value % 10000; decimal[3] = value / 1000; value = value % 1000; decimal[2] = value / 100; value = value % 100; decimal[1] = value / 10; decimal[0] = value % 10; byte zero = 0; if (justify == RIGHT) { for (byte e = 8; e > 0 ; e --) { if (zero == 0) { if (decimal[e - 1] != 0) { display8x7segment(DATA, CLOCK, LATCH, anode[e - 1], cathode[decimal[e - 1]]); zero = 1; } } else display8x7segment(DATA, CLOCK, LATCH, anode[e - 1], cathode[decimal[e - 1]]); delay_ms(MultiplexDelay); } } else //if justify == left { byte d = 0; for (byte e = 8; e > 0; e --) { if (zero == 0) { if (decimal[e - 1] != 0) { display8x7segment(DATA, CLOCK, LATCH, anode[7], cathode[decimal[e - 1]]); zero = 1; d ++; delay_ms(MultiplexDelay); } } else { display8x7segment(DATA, CLOCK, LATCH, anode[7 - d], cathode[decimal[e - 1]]); d ++; delay_ms(MultiplexDelay); } } } }попробовал, не работает, а что в итоге получиться должно было?
а по распиновке она очень похожа на PT6961
По идее должно было появиться что-то похожее на цифры.
PT6961 вроде как по SPI работает, а на втром ничего похожего на SPI не вижу. o_0
Я же писал выше, что по SPI пробовалд, что то даже отображалось, в той теме, получилось даже что все сегменты горели, а второй скетч, где человек спрашивал о похожем индикаторе, у меня получилось отбразить 2 цифры: 11 и все, как не бился, не пойму как же туда цифры то заливать
Ну ясен хрен, что он отображать что-то будет, если хаотично в порт писать.
Ну яснен хрен, теперь то все понятно, помочь можете?
Писал не хаотично, записывал команды , посылал данные по циклу, перебирая все коды, но один хрен никакой закономерности не обнаружил. Никогда не работал со SPI дисплеями, не могу что то вникнуть как с ними работать
C чего ты взял, что там SPI?
SPI - это MOSI, MISO, SCK, CS. Там же я никакой обратной связи не вижу.
вот этот код:
#include <SPI.h> const int SSPin = 10; void setup() { pinMode (SSPin, OUTPUT); SPI.begin(); delay(200); SPI.setBitOrder(LSBFIRST); SPI.setDataMode(SPI_MODE0); } void loop() { digitalWrite(SSPin,LOW); SPI.transfer(0b00000011); //command 1 digitalWrite(SSPin,LOW); digitalWrite(SSPin,LOW); SPI.transfer(0b01001100); //command 2 digitalWrite(SSPin,LOW); digitalWrite(SSPin,LOW); //command 3 SPI.transfer(0xC0); for(int i=0; i<=11; i++){ SPI.transfer(0x00); } digitalWrite(SSPin,HIGH); digitalWrite(SSPin,LOW); //command 4 SPI.transfer(0x8F); digitalWrite(SSPin,HIGH); for(int i=0xc0; i<=0xcd; i++){ for(int j=0x00;j<=0xff; j++){ digitalWrite(SSPin,LOW); SPI.transfer(i); SPI.transfer(j); digitalWrite(SSPin,HIGH); delay(10); } } }по крайней мере перебирая в цикле посылку данных выводит на индикаторы нечто подобное цифрам, и как то странно, т.е если посылаешь 193, 194 то загораются верхние сегменты, но не все, а в хаотичном порядке, а потом начинает эран полностью заполняться зажжеными сегментами, потом они полностью все горят и начинается пляска, полный хаос и так по циклу.
Ну не въеду я никак в это SPI упрвление, что за чем посылать надо и куда
ГДЕ ТЫ НА ПЛАТЕ SPI УЗРЕЛ?!
Я не знаю, что там, SPI или не SPI, есть там MOSI, MISO, SCK, CS или нет, но факт, код который Вы приводили ничем не помог, а вот код из темы которую я писал выше работает, но я не могу понять закономерности.
Если я приведу код, который точно зажигает например цифры 1, 6, 7, 8, 0 и т.д. в некоторых разрядах, Вы сможете помочь понять, что надо записывать или как можно автоматизировать поиск нужного кода??
Я уже МОГЗ сломал себе. Заранее спасибо.