Помогите с индикатором HT1611

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
WildCat
Собутыльник Сэра Мурра
Сообщения: 2918
Зарегистрирован: Вт янв 10, 2006 00:26:45
Откуда: Челябинск

Помогите с индикатором HT1611

Сообщение WildCat »

Возник почти из воздуха у меня индикатор от стационарного телефона. Думаю, многие с ним знакомы. Алгоритм предельно прост, скачать подробную статью можно тут:
http://avr.easycoding.org/other/ht1611.rar (216 кб)
Дело в том, что я никак толком не могу уговорить его работать. Мне нужно сделать подпрограмму на BascomAVR, которая выводила бы указанную в параметре строку. Сразу говорю, другие языки не нужны, не пройдёт, в т.ч. по независящим от меня причинам
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18647
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

Этот индикатор имеет несколько особенностей:
1. после подачи питания должно пройти хотя бы секунда, а иногда и 2, прежде чем на него можно подавать какие-то сигналы для вывода информации.
2. если на индикатор долго не приходят сигналы обновления инфлормации, он может переключиться в режим вывода времени, поэтому раз в секунду-две-три надо что-то на него выводить.
3. если обновление информации происходит чаще, чем 2-3 раза в секунду, то индикатор ничего не обновляет, может вообще погаснуть или будет показывать старую информацию.

Я с ним работал очень давно, поэтому всех тонкостей не упомню, но эти три вроде самые главные.

Разумеется, про согласовение уровней сигналов забывать тоже не стоит.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
WildCat
Собутыльник Сэра Мурра
Сообщения: 2918
Зарегистрирован: Вт янв 10, 2006 00:26:45
Откуда: Челябинск

Сообщение WildCat »

согласование всех уровней я учел (статью то все таки читал :) ). А так он не любит меня что ли. Помогите мне подпрограмму для баскома сделать!
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18647
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

И рад бы, но понятия не имею, что такое баском, и абсолютно нет желания его осваивать...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
WildCat
Собутыльник Сэра Мурра
Сообщения: 2918
Зарегистрирован: Вт янв 10, 2006 00:26:45
Откуда: Челябинск

Сообщение WildCat »

Ну не знаю. А ни у кого не завалялась прошивка для таймера с этим дисплеем? Нужно просто сделать таймер, типа как для бомбы :)
Реклама
Аватара пользователя
IOPA4
Встал на лапы
Сообщения: 81
Зарегистрирован: Вс окт 18, 2009 20:47:43
Откуда: Североморск
Контактная информация:

Re: Помогите с индикатором HT1611

Сообщение 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();
}
Глаза боятся - руки делают!
Реклама
Аватара пользователя
WildCat
Собутыльник Сэра Мурра
Сообщения: 2918
Зарегистрирован: Вт янв 10, 2006 00:26:45
Откуда: Челябинск

Re: Помогите с индикатором HT1611

Сообщение WildCat »

я б сделал задержку в виде константы в начале кода и попробовал бы потихоньку увеличивать ее, потому что дисплей туповат и медленный.
Хе хе, 4 года прошло уже :)
Аватара пользователя
IOPA4
Встал на лапы
Сообщения: 81
Зарегистрирован: Вс окт 18, 2009 20:47:43
Откуда: Североморск
Контактная информация:

Re: Помогите с индикатором HT1611

Сообщение IOPA4 »

Задал вопрос из-за чего: в примерен на асме сначала с байтом делают swap (меняют старшую и младшую тетраду битов местами), а затем сдвиг побитно влево. Не пойму для чего, ведь переменная беззнаковая.
Глаза боятся - руки делают!
john1170
Родился
Сообщения: 3
Зарегистрирован: Пн окт 12, 2009 19:27:53

Re: Помогите с индикатором HT1611

Сообщение john1170 »

Потому что старший бит идет первым
делаем swap и сдвиг влево
aleksandr-zh
Сверлит текстолит когтями
Сообщения: 1278
Зарегистрирован: Пн июн 18, 2007 21:51:20

Re: Помогите с индикатором HT1611

Сообщение 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
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»