Помогите с индикатором HT1611
- WildCat
- Собутыльник Сэра Мурра
- Сообщения: 2918
- Зарегистрирован: Вт янв 10, 2006 00:26:45
- Откуда: Челябинск
Помогите с индикатором HT1611
Возник почти из воздуха у меня индикатор от стационарного телефона. Думаю, многие с ним знакомы. Алгоритм предельно прост, скачать подробную статью можно тут:
http://avr.easycoding.org/other/ht1611.rar (216 кб)
Дело в том, что я никак толком не могу уговорить его работать. Мне нужно сделать подпрограмму на BascomAVR, которая выводила бы указанную в параметре строку. Сразу говорю, другие языки не нужны, не пройдёт, в т.ч. по независящим от меня причинам
http://avr.easycoding.org/other/ht1611.rar (216 кб)
Дело в том, что я никак толком не могу уговорить его работать. Мне нужно сделать подпрограмму на BascomAVR, которая выводила бы указанную в параметре строку. Сразу говорю, другие языки не нужны, не пройдёт, в т.ч. по независящим от меня причинам
- Реклама
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18647
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Этот индикатор имеет несколько особенностей:
1. после подачи питания должно пройти хотя бы секунда, а иногда и 2, прежде чем на него можно подавать какие-то сигналы для вывода информации.
2. если на индикатор долго не приходят сигналы обновления инфлормации, он может переключиться в режим вывода времени, поэтому раз в секунду-две-три надо что-то на него выводить.
3. если обновление информации происходит чаще, чем 2-3 раза в секунду, то индикатор ничего не обновляет, может вообще погаснуть или будет показывать старую информацию.
Я с ним работал очень давно, поэтому всех тонкостей не упомню, но эти три вроде самые главные.
Разумеется, про согласовение уровней сигналов забывать тоже не стоит.
1. после подачи питания должно пройти хотя бы секунда, а иногда и 2, прежде чем на него можно подавать какие-то сигналы для вывода информации.
2. если на индикатор долго не приходят сигналы обновления инфлормации, он может переключиться в режим вывода времени, поэтому раз в секунду-две-три надо что-то на него выводить.
3. если обновление информации происходит чаще, чем 2-3 раза в секунду, то индикатор ничего не обновляет, может вообще погаснуть или будет показывать старую информацию.
Я с ним работал очень давно, поэтому всех тонкостей не упомню, но эти три вроде самые главные.
Разумеется, про согласовение уровней сигналов забывать тоже не стоит.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18647
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
И рад бы, но понятия не имею, что такое баском, и абсолютно нет желания его осваивать...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
- IOPA4
- Встал на лапы
- Сообщения: 81
- Зарегистрирован: Вс окт 18, 2009 20:47:43
- Откуда: Североморск
- Контактная информация:
Re: Помогите с индикатором HT1611
Написал код на СИ для 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();
}Глаза боятся - руки делают!
- WildCat
- Собутыльник Сэра Мурра
- Сообщения: 2918
- Зарегистрирован: Вт янв 10, 2006 00:26:45
- Откуда: Челябинск
Re: Помогите с индикатором HT1611
я б сделал задержку в виде константы в начале кода и попробовал бы потихоньку увеличивать ее, потому что дисплей туповат и медленный.
Хе хе, 4 года прошло уже
Хе хе, 4 года прошло уже
- IOPA4
- Встал на лапы
- Сообщения: 81
- Зарегистрирован: Вс окт 18, 2009 20:47:43
- Откуда: Североморск
- Контактная информация:
Re: Помогите с индикатором HT1611
Задал вопрос из-за чего: в примерен на асме сначала с байтом делают swap (меняют старшую и младшую тетраду битов местами), а затем сдвиг побитно влево. Не пойму для чего, ведь переменная беззнаковая.
Глаза боятся - руки делают!
Re: Помогите с индикатором HT1611
Потому что старший бит идет первым
делаем swap и сдвиг влево
делаем swap и сдвиг влево
-
aleksandr-zh
- Сверлит текстолит когтями
- Сообщения: 1278
- Зарегистрирован: Пн июн 18, 2007 21:51:20
Re: Помогите с индикатором HT1611
я писал под этом ЖКИ и на Баском
блин, что-то не могу найти для Баском...
так, вот для компилятора FastAVR:
блин, что-то не могу найти для Баском...
так, вот для компилятора 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


