Индикатор от кассового аппарата
Jul. 3rd, 2017 11:02 pm
с контроллером SN75518N

решил подключить к Ардуино, долго читал интернет - мало информации. Похоже никто не делал ранее. На индикатор даже даташита нет, а я взял и подключил :-))) и циферки сразу засветились. Преобразователь с 5 на 24 вольта заказал из Китая.

Я написал маленькую программку, отправляющую в сдвиговый регистр цифры, последовательно от 0 до 65535.
В среде "Ардуино" для этого имеется встроенная команда - shiftOut(data, clock, LSBFIRST, value);
выглядит это забавно, как "таймер на инопланетной бомбе" :-))))
Когда в индикатор отправлено FFFF, то он показывает 6.6.6.6.6.6.6.6.6.6.
Видимо, переключением разрядов и сегментов (динамической индикацией) занимается контроллер SN75518N самостоятельно. Мерцание неравномерное при съёмке с приоритетом выдержки.
UPD: если хочется отображать что-то осмысленное, то динамическую индикацию придётся делать самостоятельно.
Проталкиваем в регистр 32 бита, в которых определены сегменты и одно знакоместо для их отображения, дёргаем защёлку, пока символ отображается, забиваем регистр новой информацией для следующего знакоместа и снова дергаем защёлку. Иного не дано :-(
Может быть попробую написать библиотечку с непосредственным управлением ногами :-))) или буду делать через SPI, там велосипед уже изобретён :-)))
схема подключения индюкатора к контроллеру
Date: 2017-07-04 12:00 am (UTC)a - 18 - Q17 нога контроллера
b - 23 - Q16
c - 24 - Q15
d - 25 - Q14
e - 36 - Q3
f - 38 - Q1
g - 37 - Q2
dp- 35 - Q4
h - 17 - Q18
разряды
10- 16 - Q19
9 - 34 - Q5
8 - 33 - Q6
7 - 32 - Q7
6 - 31 - Q8
5 - 30 - Q9
4 - 29 - Q10
3 - 28 - Q11
2 - 27 - Q12
1 - 26 - Q13
спрашивается, какого хера было так некрасиво рвать "адресное пространство" ?
UPD: чуток разобрался :-)) Чтобы, например, зажечь в 8-7-6 разрядах число "710" надо вот такой кодик:
void loop() {
digitalWrite(latch, LOW);
for (unsigned int x=0; x<4; x++) {
sendbyte(0b00000000);
sendbyte(0b00000001);
sendbyte(0b11000000);
sendbyte(0b00100000);
}
digitalWrite(latch, HIGH);
digitalWrite(latch, LOW);
for (unsigned int x=0; x<4; x++) {
sendbyte(0b00000000);
sendbyte(0b00000000);
sendbyte(0b11000000);
sendbyte(0b01000000);
}
digitalWrite(latch, HIGH);
digitalWrite(latch, LOW);
for (unsigned int x=0; x<4; x++) {
sendbyte(0b00000000);
sendbyte(0b00000001);
sendbyte(0b11100000);
sendbyte(0b10000101);
}
digitalWrite(latch, HIGH);
}
void sendbyte(byte value){
shiftOut(data, clock, MSBFIRST, value);
}