Начало |
RE: RDX2012 (1 чел.) (1) Гость
|
|
Сообщения темы: RDX2012
|
RE: RDX2012 12.03.2012 19:59
|
|
Переделал схему, выбросил все лишнее, сделал вот так
Но больному не полегчало. Все так же бессистемно слетает изображение, индикатор стопорится, видимо во время передачи команд проскакивает искаженный байт команды и сбивает настройку индикатора.
Буду думать.
|
|
|
Зарегистрирован
|
|
Александр (RA3RBE)
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться |
|
RE: RDX2012 13.03.2012 10:01
|
|
Вчера просидел весь вечер с индикатором, но принципиально решить проблему пока не смог.
Вылизал все, что касалось индикатора в программе, но все-таки сбой появляется. Не очень часто, но все-таки есть.
В программе изменений нет, изменены только процедуры обращения непосредственно к индикатору, так сказать физический
контакт с ним, а вся логика осталась той же самой.
Изменил процедуру записи байта в индикатор, старта, инициализации, установки курсора. Остальное без изменений.
При исследовании причины сбоя обнаружил, что информация на экране сразу же сбивается, если я касаюсь рукой конденсаторов
2.2 мкф,стоящих на ногах индикатора. Конденсаторы ставил старые советские электролиты (полярность правильная).
Это надежные цельнотянутые с производства конденсаторы, даже кажется танталовые. я когда-то читал, что они ко всему прочему обладают еще и полупроводниковыми свойствами, что зачастую мешает нормальной работе.
Обрадовался, выбросил оба конденсатора, поставил керамику. Большого номинала не было, поставил 0.22 мкф. Все заработало. Думал проблема ушла, но сбои все-таки появляются. Гораздо реже, но есть. Поставил конденсаторы на 1 мкф, показалось, что количество сбоев увеличилось.
Теперь вот такой вопрос, если у кого-то есть собранная конструкция с этим индикатором, померяйте, какое напряжение на этих конденсаторах. У меня на них напряжения примерно одинаковые и равны 1.04 и 1.1 в. Напряжение на 10 ноге индикатора 9.4 в.
Может я неправильно инициализировал индикатор и это не дает ему работать? Хотя делал все по примеру из интернета.
|
|
|
Зарегистрирован
|
|
Александр (RA3RBE)
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться |
|
RE: RDX2012 13.03.2012 14:38
|
|
Посмотрел напряжения на индикаторе в "воронёнке" - с использованием внутреннего преобразовтеля (инициализация там, где я говорил):
10 - 9.8 вольта постоянки.
09..06 - импульсное напряжение (отличается постоянной составляющей) с частотой около 21 кГц. Размах 3..4 вольта.
зы: у меня в исходниках есть кусок программной реализации I2C интерфейса (в файле twi.c) - тоже однонаправленный без чтения подтверждения или ожидания. Он работал в процессе проверки надёжно. Попробуйте применить его. Я начинал с этим куском, потом для ускорения обновления экрана перешёл на аппаратный коньтроллер I2C.
|
|
|
Зарегистрирован
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться |
|
RE: RDX2012 13.03.2012 15:40
|
|
Спасибо Гена. Я сегодня поискал и нашел те исходники, о которых ты говорил. Посмотрел, в принципе у меня то же самое.
Думаю, что проблема аппаратная, а не программная. Процедуры работы все стандартные, сейчас сделана работа с обратной связью, но это не помогло.
Вот как у меня идут обращения к индикатору.
Скрытый текст [открыть/закрыть]
Код: | |
;
;***************************************************************************
;*
;* FUNCTION
;* i2c_stop
;*
;* DESCRIPTION
;* Assert stop condition.
;*
;* USAGE
;* No parameters.
;*
;* RETURN
;* None.
;*
;***************************************************************************
stop:
sbi DDRB,SCL ; force SCL low
sbi DDRB,SDA ; force SDA low
rcall dl2 ; half period delay
cbi DDRB,SCL ; release SCL
rcall dl1 ; quarter period delay
cbi DDRB,SDA ; release SDA
rjmp dl2 ; half period delay
;=============================================
; "Холодная" инициализация индикатора
;-------------------------------------------------------
lcd_init:
rcall startc
ldi acc,0b11100010 ;//сброс
rcall write
rcall stop
rcall dl2
rcall startc
ldi acc,0b11101011 ;BIAS 9
rcall write
ldi acc,0b10000001 ;настройка Vbias
rcall write
ldi acc,110
rcall write
ldi acc,0b11000110 ;настройка типа разветки свеху в низ, и слево на право
rcall write
ldi acc,0b10101111 ;Включить дисплей
rcall write
rcall stop
rcall dl2
;lcd_clear: ; очистка индикатора.
rcall startd
ldi dcnt,8 ;132*8=1056
clr2:
ldi tmp1,132
clr1:
ldi acc,0x00
rcall writed
djnz tmp1,clr1
djnz dcnt,clr2
rjmp stop
;***************************************************************************
;*
;* FUNCTION
;* i2c_start
;*
;***************************************************************************
startd:
ldi acc,0b01110010 ; запись данных
rjmp start1
startc:
ldi acc,0b01110000 ; запись команды
start1:
push acc
clr acc ; clear I2C register (used
; as a temporary register)
out PORTB,acc ; set I2C pins to open colector
out DDRB,acc
rcall dl2
sbi DDRB,SDA ; force SDA low
rcall dl1 ; quarter period delay
pop acc
;***************************************************************************
;*
;* FUNCTION
;* i2c_write
;* Запись команды
;***************************************************************************
write:
sec ; set carry flag
rol acc ; shift in carry and out bit one
rjmp i2c_write_first
i2c_write_bit:
lsl acc ; if transmit register empty
i2c_write_first:
breq i2c_get_ack ; goto get acknowledge
sbi DDRB,SCL ; force SCL low
brcc i2c_write_low ; if bit high
rcall dl1 ; (equalize number of cycles)
cbi DDRB,SDA ; release SDA
rjmp i2c_write_high
i2c_write_low: ; else
sbi DDRB,SDA ; force SDA low
rjmp i2c_write_high ; (equalize number of cycles)
i2c_write_high:
rcall dl2 ; half period delay
cbi DDRB,SCL ; release SCL
rcall dl2 ; half period delay
rjmp i2c_write_bit
dl2:
push acc ;2
pop acc ;2
dl1:
push acc ;2
pop acc ;2
ret ;4
;***************************************************************************
;*
;* FUNCTION
;* i2c_writed
;* Запись данных
;***************************************************************************
writed:
sec ; set carry flag
ror acc ; shift in carry and out bit one
rjmp writed_write_first
writed_write_bit:
lsr acc ; if transmit register empty
writed_write_first:
breq i2c_get_ack ; goto get acknowledge
sbi DDRB,SCL ; force SCL low
brcc writed_write_low ; if bit high
rcall dl1
; (equalize number of cycles)
cbi DDRB,SDA ; release SDA
rjmp writed_write_high
writed_write_low: ; else
sbi DDRB,SDA ; force SDA low
rjmp writed_write_high ; (equalize number of cycles)
writed_write_high:
rcall dl2 ; half period delay
cbi DDRB,SCL ; release SCL
rcall dl2 ; half period delay
rjmp writed_write_bit
;***************************************************************************
;*
;* FUNCTION
;* i2c_get_ack
;*
;***************************************************************************
i2c_get_ack:
sbi DDRB,SCL ; force SCL low
cbi DDRB,SDA ; release SDA
rcall dl2 ; half period delay
cbi DDRB,SCL ; release SCL
i2c_get_ack_wait:
sbis PINB,SCL ; wait SCL high
;(In case wait states are inserted)
rjmp i2c_get_ack_wait
clc ; clear carry flag
sbic PINB,SDA ; if SDA is high
sec ; set carry flag
rcall dl2 ; half period delay
ret
|
Проблема в том, что для того, чтобы бороться с этим, нужно понимать, что происходит, а тут есть вещи которые я объяснить не могу.
Скажем есть проблема сбоя адресации - с-метр выскакивает на чужой строке, пишет нужную полосу, стирает до конца экрана, а потом опять работает на правильной строке. Это как бы понятно - сбой при передаче адреса строки.
Есть проблема с изменением контрастности - опять же при передачи команды, она искажается и индикатор понимает ее как управление контрастностью.
Но есть такая ситуация, которую я не могу объяснить.
У меня в строке с текущей частотой последний символ "А" - это VFO-A, стоит строго в конце экрана и вертикальная палочка буквы А стоит в последней колонке.
Иногда, не редко, вижу, что у этой А нет правой палочки - строка сдвинулась на 1 колонку. Кручу валкодер, частота меняется и переписывается, но у этой "А" колонка так и остается за экраном. А ведь я каждый раз пишу ее вместе с частотой, и каждый раз явно устанавливаю курсор на нужное место, откуда писать. Значит физически сдвинулась адресация индикатора.
И при этом в левом верхнем углу стоит "RX" и ниже опять же в первой позиции стоит "LSB". Если бы адресация физически сдвинулась, эти буквы стояли бы тоже со сдвигом на 1 колонку, а они стоят ровно в первой позиции.
В общем нужно все это осознать и пропустить через кишки. Пока я не пойму, что творится с индикатором, я не знаю как это все исправить.
Индикатор подключен шлейфиком сантиметров 20. Но и ТИК точно так же был подключен и работал без проблем.
Можно попробовать наставить задержек в протокол передачи, может он просто более медленный, а я луплю туда данные со всей дури...
Может конечно индикатор дефектный, но это маловероятно. Какой-то он дерганый и слишком нежный. С ТИКом никаких проблем не было. Запустил его и он стал работать как трактор. Думал и тут так же будет.
Ну да ладно, не первый раз упираться в такие баги. Исправим.
|
|
|
Зарегистрирован
|
|
Александр (RA3RBE)
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться |
|
RE: RDX2012 13.03.2012 20:32
|
|
Боюсь сглазить, но уже час работает индикатор, никаких претензий нет.
А сделал вот что - снизил напряжение на 10 ноге вольта на 2. Сейчас там примерно 7.4, точно не мерял, не скажу.
Т.е. в инициализации сделал BIAS 6 и индикатор как-то сразу стал спокойнее. Вернее я сначала немного снизил напряжение, показалось, что лучше, снизил ещё, а потом вообще до минимума убрал. Контрастность каждый раз падала, и я ее поднимал другим параметром.
В общем пока стоит нормально. Перестройку кручу, с-метр болтается, все работает без сбоев. Раньше слетало через 3-5 минут. Буду сегодня до вечера наблюдать.
|
|
|
Зарегистрирован
|
|
Александр (RA3RBE)
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться |
|
RE: RDX2012 13.03.2012 21:59
|
|
почти на 90 процентов - блокировочный конденсатор у индикатора (на питании 3.3 вольта). И усилить земляной провод. В моём случае bias 1/6 использовался для маленького индикатора - у которого это требование просто в документации прописано (напряжение на стекле 6.3 вольта приблизительно).
При то, что этт контроллер более шустрый чем стоящий в TIC154, я уже писал. Скорее всего, это выражается в том числе к большей чувствительности к просечкам и "звону" на сигнале SCL - что из-за шлейфа вполне может быть. Хотя, у меня тоде есть конструкция, где RDX0154 подключён примерно 20 сантиметрами обычного плоского шлейфа - просто соседние поводники GND, SCL, SDA, VCC.
|
|
|
Зарегистрирован
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться |
|
RE: RDX2012 13.03.2012 22:04
|
|
Может быть. По питанию стоит 0.1 мкф прямо на ногах микросхемы. Земляной провод - ленточный кабель от флопа. Одна жила - земля.
Да собственно теперь это не так важно. Изменений изображения не заметил, а если устойчивость выше, то это не плохо.
просто соседние поводники GND, SCL, SDA, VCC.
так у меня и сделано.
|
|
|
Зарегистрирован
|
|
Александр (RA3RBE)
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться |
|
RE: RDX2012 13.03.2012 22:21
|
|
Ну тут вообще сантиметров тридцать... Есть предложение перед меткой i2c_get_ack_wait вставить задержку на распространение сигнала. не ту, что полтакта I2C, а такую... на десятка три тактов.
Понятно же, что работает во многих изделиях... причём на 400 кГц аппаратной тактовой I2C. Да, пытался поднимать - наинает тормозить (переповторы идут).
|
|
|
Зарегистрирован
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться |
|
|
|
|
|
|
|