Страница 1 из 1
Помогите с индикатором HT1611
Добавлено: Пт июл 06, 2007 15:09:39
WildCat
Возник почти из воздуха у меня индикатор от стационарного телефона. Думаю, многие с ним знакомы. Алгоритм предельно прост, скачать подробную статью можно тут:
http://avr.easycoding.org/other/ht1611.rar (216 кб)
Дело в том, что я никак толком не могу уговорить его работать. Мне нужно сделать подпрограмму на BascomAVR, которая выводила бы указанную в параметре строку. Сразу говорю, другие языки не нужны, не пройдёт, в т.ч. по независящим от меня причинам
Добавлено: Пт июл 06, 2007 15:41:06
ARV
Этот индикатор имеет несколько особенностей:
1. после подачи питания должно пройти хотя бы секунда, а иногда и 2, прежде чем на него можно подавать какие-то сигналы для вывода информации.
2. если на индикатор долго не приходят сигналы обновления инфлормации, он может переключиться в режим вывода времени, поэтому раз в секунду-две-три надо что-то на него выводить.
3. если обновление информации происходит чаще, чем 2-3 раза в секунду, то индикатор ничего не обновляет, может вообще погаснуть или будет показывать старую информацию.
Я с ним работал очень давно, поэтому всех тонкостей не упомню, но эти три вроде самые главные.
Разумеется, про согласовение уровней сигналов забывать тоже не стоит.
Добавлено: Пт июл 06, 2007 18:24:03
WildCat
согласование всех уровней я учел (статью то все таки читал

). А так он не любит меня что ли. Помогите мне подпрограмму для баскома сделать!
Добавлено: Пт июл 06, 2007 18:51:45
ARV
И рад бы, но понятия не имею, что такое баском, и абсолютно нет желания его осваивать...
Добавлено: Пт июл 06, 2007 21:46:10
WildCat
Ну не знаю. А ни у кого не завалялась прошивка для таймера с этим дисплеем? Нужно просто сделать таймер, типа как для бомбы

Re: Помогите с индикатором HT1611
Добавлено: Вт авг 30, 2011 20:44:27
IOPA4
Написал код на СИ для HT1611 согласно даташита, но почему-то литеры выводятся с ошибкой. Подскажите, пожалуйста, что не так:
Код: Выделить всё
void send_byte (unsigned char data) //Отправка байта по шине
{
unsigned char i;
for (i=0; i<4; i++)
{
if (data&1) {PORTB|= 1;} else {PORTB&= ~1;};//сброс линии данных, если бит=0 и наоборот
data=data>>1; //сдвиг вправо
PORTB|= 2; //установка линии тактирования
delay_1us(); //задержка на установку данных
PORTB&= ~2;//сброс линии тактирования
delay_1us(); //задержка на удержание данных
delay_1us();
};
delay_1us();//межсимвольная задержка
delay_1us();
delay_1us();
delay_1us();
delay_1us();
}
Re: Помогите с индикатором HT1611
Добавлено: Вт авг 30, 2011 20:53:41
WildCat
я б сделал задержку в виде константы в начале кода и попробовал бы потихоньку увеличивать ее, потому что дисплей туповат и медленный.
Хе хе, 4 года прошло уже

Re: Помогите с индикатором HT1611
Добавлено: Ср авг 31, 2011 17:33:23
IOPA4
Задал вопрос из-за чего: в примерен на асме сначала с байтом делают swap (меняют старшую и младшую тетраду битов местами), а затем сдвиг побитно влево. Не пойму для чего, ведь переменная беззнаковая.
Re: Помогите с индикатором HT1611
Добавлено: Пт сен 09, 2011 21:07:41
john1170
Потому что старший бит идет первым
делаем swap и сдвиг влево
Re: Помогите с индикатором HT1611
Добавлено: Сб сен 10, 2011 16:41:10
aleksandr-zh
я писал под этом ЖКИ и на Баском
блин, что-то не могу найти для Баском...
так, вот для компилятора
FastAVR:
Код: Выделить всё
$Device= attiny2313 ' used device
$Stack = 32 ' stack depth
$Clock = 8 ' adjust for used crystal
$Def pinLCDdat = PORTB.0
$Def pinLCDclk = PORTB.1
$Def pinLed = PORTB.2
Declare Sub SendLCD(LCDdataX As Byte)
Declare Sub ScrollLCD(LCDdvigatSinvolov As Byte)
Dim KeyPressed As Byte, tempA As Byte
' ===================
ALLinit: '- Инициализация всей периферии
DDRD=0: PORTD =255 ' INPut
DDRB=255: PORTB =255 ' OUTput
metka: ' Тест ЖКИ: выводим все отображаемые символы
ScrollLCD (10) ' Скроллинг экрана на (X) "пробелов"
For KeyPressed = 0 To 15
SendLCD (KeyPressed) ' Один символ на экран
Toggle pinLed
WaitMs 255
Next KeyPressed
Wait 2
Goto metka
' --------- Скроллинг экрана на X символов --------
Sub ScrollLCD(LCDdvigatSinvolov As Byte)
Local temp2 As Byte, temp As Byte
pinLCDdat =0 ' Data
For temp = 1 To LCDdvigatSinvolov
For temp2 = 0 To 3
pinLCDclk = 0: WaitUs 1 ' CLK
pinLCDclk = 1: WaitUs 1 ' CLK
Next temp2
Next temp
End Sub
'---------- Один символ на экран ---------
Sub SendLCD(LCDdataX As Byte)
Local tiki As Byte, temp2 As Byte, temp As Byte
pinLCDclk =1 ' CLK
tiki= 128
Shift(Left, 4, LCDdataX)
For temp2 = 0 To 3
temp = LCDdataX & tiki
If temp =0 Then
pinLCDdat =0 ' Data
Else
pinLCDdat =1 ' Data
End If
pinLCDclk = 0: WaitUs 1
pinLCDclk = 1: WaitUs 1
Shift(Right, 1, tiki): If tiki =0 Then tiki = 128
Next temp2
End Sub