Страница 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