Перейти к содержанию

Подсвечивается индикация!


M@T_F@Q

Рекомендуемые сообщения

Народ помогите, делал следующие: Есть 8 разрядный индикатор, на эмуляторе все работает нормально, но на макетке появляется подсветка причем очень яркая. Делал на бейсике, на сях и на асме тоже самое!

Схема на MEGA8535 порты: выбор разряда PORTA, вывод самой цифры: PORTC, индикатор подключен через сопротивления.

Вот листинг на асме, т.к. он мне больше понравился в смысле кода:

.include "m8535def.inc" ; подключим файл с описаниями регистров

.org 0x000

rjmp RESET ; вектор перехода при сбросе

.org OVF0addr

rjmp TIMER0_OVF ; вектор перехода при переполнении таймера 0

.def temp =r16

.equ TMR0ST = 246 ; значение таймера для загрузки

.equ PTR_START =$60 ; начальный адрес буфера индикатора в SRAM

; (YH,YL) - содержит адрес буфера для сканирования

RESET:

; инициализируем указатель стека

ldi temp,high(RAMEND) ; Старший байт

out SPH,temp

ldi temp,low(RAMEND) ; Младший байт

out SPL,temp

; настройка таймера

ldi temp,0b00000100 ;тактовая частота CK/256 ;1024

out TCCR0,temp

ldi temp,TMR0ST ; загрузим начальное значение таймера

out TCNT0,temp

; настройка прерываний

ldi temp,0b00000001 ; разрешим прерывания по переполнению таймера 0

out TIMSK, temp

sei ; разрешим прерывания глобально

; настройка портов

ldi temp,0b11111111 ; определим PC<0> - PC<7> как выходы

out DDRC,temp

ldi temp,0b11111111 ; определим PD<4> - PD<7> как выходы

out DDRA,temp

ldi temp,$0

out PORTA,temp

; инициализация индикатора

rcall indikator_init

; выведем цифры 1 ... 8 в первые разряды индикатора

; инициализируем регистр Z - указатель на таблицу

ldi ZH,high(CODE_TABLE*2) ; Старший байт

ldi ZL,low(CODE_TABLE*2) ; Младший байт

ldi temp, 8 ; используем temp как счетчик выводимых чисел, начальное число 9

; цикл вывода

cycle:

adiw ZL, 1 ; добавим к указателю (Z) код цифры (т.о. получим указатель на код соответствующего числа для индикации)

lpm ; загрузим из таблицы в r0

st Y+,r0 ; выводим в буфер индикатора

dec temp ; уменьшаем счетчик выводимых чисел

cpi temp, 0 ; сравниваем с 0 (проверка на окончание вывода)

brne cycle ; если вывод не закончен, продолжить

loop: ; основной цикл программы

rjmp loop

TIMER0_OVF:

; сохранение в стэке

push temp ; сохраняем temp

in temp, SREG ; сохраняем SREG

push temp

; вывод очередного символа

ldi temp, $0 ; гасим предыдущий символ

out PORTC, temp

; переключаем дешифратор на следующее знакоместо

in temp, PORTA ; считываем текущее состояние

ror temp ; выберем следующую цифру

out porta,temp

cpi temp,0b00000000 ; проверяем, не последнее ли знакоместо индикатора

brne not_last

; если отображается последний символ на индикаторе, то начнем с начала после

rcall indikator_init

ldi temp,0b10000000

out porta,temp

not_last:

ld temp, Y+ ; получаем код символа из буфера

out PORTC, temp ; выводим его на индикатор

ldi temp,TMR0ST ; загрузим начальное значение таймера

out TCNT0,temp

; восстанавливаем из стэка

pop temp ; восстанавливаем SREG

out SREG, temp

pop temp ; восстанавливаем temp

reti

; подпрограмма инициализации индикатора

indikator_init:

push temp ; сохраним в стэке

ldi YH, high(PTR_START) ; настройка буфера индикатора

ldi YL, low(PTR_START)

ldi temp,0b00000001 ; выберем последний разряд индикатора для отображения

out PORTA,temp

pop temp ; восстановим из стэка

ret

; подпрограмма-таблица знакогенератора

CODE_TABLE:

.DB 0b00111111,0b00000110

.DB 0b01011011,0b01001111

.DB 0b01100110,0b01101101

.DB 0b01111101,0b00000111

.DB 0b01111111,0b01101111

Сегодня сделаю схемку и фото как подсвечмвается.

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

  • Ответов 55
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Народ помогите, делал следующие: Есть 8 разрядный индикатор, на эмуляторе все работает нормально, но на макетке появляется подсветка причем очень яркая. Делал на бейсике, на сях и на асме тоже самое!

У меня есть вопросы по тексту. Много неясного. Сразу бросается в глаза вот что:

brne not_last
; если отображается последний символ на индикаторе, то начнем с начала после

rcall indikator_init 
ldi temp,0b10000000
out porta,temp
not_last:

хотя indikator_init выполняет следующее:

ldi temp,0b00000001; выберем последний разряд индикатора для отображения
out PORTA,temp

Зачем в temp загружаются такие значения? От предыдущего исправления осталось?

Вы разрешаете прерывания еще до того как инициализируете указатель на тадлицу образов цифр. Зачем?

И вот этот:

ldi temp, 8; используем temp как счетчик выводимых чисел, начальное число 9 
; цикл вывода
cycle:
adiw ZL, 1; добавим к указателю (Z) код цифры (т.о. получим указатель на код соответствующего числа для индикации)
lpm; загрузим из таблицы в r0
st Y+,r0; выводим в буфер индикатора
dec temp; уменьшаем счетчик выводимых чисел
cpi temp, 0; сравниваем с 0 (проверка на окончание вывода)
brne cycle; если вывод не закончен, продолжить

кусок что делает?

Изменено пользователем Speccy
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Скажу честно я эту програмку просто переделал, а вот эти моменты которые вы выделили я сам не понял:

ldi temp, 8; используем temp как счетчик выводимых чисел, начальное число 9

; цикл вывода

cycle:

adiw ZL, 1; добавим к указателю (Z) код цифры (т.о. получим указатель на код соответствующего числа для индикации)

lpm; загрузим из таблицы в r0

st Y+,r0; выводим в буфер индикатора

dec temp; уменьшаем счетчик выводимых чисел

cpi temp, 0; сравниваем с 0 (проверка на окончание вывода)

brne cycle; если вывод не закончен, продолжить

А остальные это из-за моей неграмотности были написаны. А в чём дело с подсветкой так и не понял.

Ссылка на комментарий
Поделиться на другие сайты

Я никак не могу понять, почему когда управляю с порта непосредственно индикатором - все отлично, для разгрузки порта ставлю ключ - подсвечиваются все разряды... Мне кажется включены подтягивающие резисторы, при нуле на пине порта не 0, а чуть больше... Логический сигнал выходит как нулевой, но для "приоткрытия" транзистора его хватает, вследствие чего транзистор чуть-чуть приоткрывается, и пускает через себя часть тока, которой недостаточно для нормального включения диода... Наверное никто не понял что я имел в виду... Короче, транзистор не до конца зыкрывается, поэтому подсвечивается индикатор...

Вопрос... Как отключить подтягивающие резисторы в ATmega16 (если такоевые имеются... Полез шиты читать...) через С... Заранее спасибо!

"Все что нас не убивает, то нас делает сильней!", Егор Летов

Ссылка на комментарий
Поделиться на другие сайты

Вопрос... Как отключить подтягивающие резисторы в ATmega16 (если такоевые имеются... Полез шиты читать...) через С... Заранее спасибо!

Дак на си все просто PORTx=0xFF подтягивающие резисторы подключены... PORTx=0x00 отключенны...

Ссылка на комментарий
Поделиться на другие сайты

IGRISE, спасибо! Но не помогло... Продолжает подсвечивать... Не подтягивающие резисторы...

"Все что нас не убивает, то нас делает сильней!", Егор Летов

Ссылка на комментарий
Поделиться на другие сайты

Выкладываю схему и программу на С... Программа считает до 60 (типа секунд) по кругу... Подсвечивает индикация... То что в первом канале слегка видно и во втором, и наоборот... То есть на одном индикаторе сразу оба канала видно, основной полностью, второй чуть-чуть... ЧТО ДЕЛАТЬ?????

____________________

#include <mega16.h>

#include <delay.h>

static int es;

static int ds;

static int i;

void main(void)

{

PORTA = 0xff;

DDRA = 0xff;

PORTC = 0xff;

DDRC = 0xff;

while (1)

{

ds=0;

while (ds<6)

{

es=0;

while (es<10)

{

sum=0;

while (i<500)

{

PORTC.1=1;

PORTC.0=0;

PORTA=ds;

delay_ms(1);

PORTC.1=0;

PORTC.0=1;

PORTA=es;

delay_ms(1);

sum++;

} // i

es++;

} // es

ds++;

} // ds

} // (1)

}

post-19225-1170710383_thumb.jpg

Изменено пользователем Лорд

"Все что нас не убивает, то нас делает сильней!", Егор Летов

Ссылка на комментарий
Поделиться на другие сайты

Креплю конкретные изображения этих глюков :)

На первом рисунке число 32, на втором - 42 ;)

post-19225-1170722841_thumb.jpg

post-19225-1170722860_thumb.jpg

"Все что нас не убивает, то нас делает сильней!", Егор Летов

Ссылка на комментарий
Поделиться на другие сайты

Из личного опыта: когда-то делал электронную цифровую панель приборов для ВАЗ2105, индикаторов было много - около 15, все работало в динамике, для того, чтобы не было видно мерцания (в дороге раздрожает) пришлось поднять частоту динамической индикации и сразу столкнулся с вашей проблемой. Причиной оказалось затягивание фронтов ключами. Пришлось совершенствовать ключи.

1) Использовать быстрые транзисторы

2) Не перенасыщать их (правильно выбрать базовые делители с использованием кондеров для укручения фронтов).

3) Увеличить ток через ключи в открытом состоянии, дополнительно нагрузив резистором для быстрого рассасывания заряда (если система не критична к потребл. мощи)

Мне этих мер оказалось достаточно, подсветка осталась только при сильном морозе (пока не прогреется).

Частота динамики получилась около 1 КГц!!! Зато ни какого намека на мерцание. Успехов.

Ссылка на комментарий
Поделиться на другие сайты

Если к частоте особых требований нет, ее можно понизить, а в проге между переключениями индикаторов можно ввести краткие "мертвые" такты, чтобы сегментная информация успела установиться на индикаторах. Тоже хорошо помогает.

Ссылка на комментарий
Поделиться на другие сайты

Из личного опыта: когда-то делал электронную цифровую панель приборов для ВАЗ2105, индикаторов было много - около 15, все работало в динамике, для того, чтобы не было видно мерцания (в дороге раздрожает) пришлось поднять частоту динамической индикации и сразу столкнулся с вашей проблемой. Причиной оказалось затягивание фронтов ключами. Пришлось совершенствовать ключи.

Токо у меня схема без ключей, на индикаторы, на них тоже видна подсветка. Пробова и на Бейсике и на С и на Асме таже фигня.

Ссылка на комментарий
Поделиться на другие сайты

Я делал кое что похожее на Атмега8. На 4 индикатора у меня была частота где-то 150 кГц... И всё нормально.. Незабывайте на инерционность индикаторов...

Ссылка на комментарий
Поделиться на другие сайты

Мысли:

1) Посмотреть осцилом (если есть) - насколько по времени данные залезают в "чужой" инд.(осцил. двухканалный или с внешней синхр.)

2) Снизить общую частоту (задающую) до 0,5 - 1 Гц чтобы все глюки стали медленными.

ЧУДЕС НЕ БЫВАЕТ

Изменено пользователем ВВЛ
Ссылка на комментарий
Поделиться на другие сайты

Я делал кое что похожее на Атмега8. На 4 индикатора у меня была частота где-то 150 кГц... И всё нормально.. Незабывайте на инерционность индикаторов...

А можно поподробнее про инерционность как это. И еще расчет частоты, а то я не сильно понимаю 150 кГц или 1 кГц.

Ссылка на комментарий
Поделиться на другие сайты

ВВЛ, что значит "залезает"? Как он может залезать? За счет растянутых фронтов? Кстати, вариант... Надо попробовать...

"Все что нас не убивает, то нас делает сильней!", Егор Летов

Ссылка на комментарий
Поделиться на другие сайты

Я делал кое что похожее на Атмега8. На 4 индикатора у меня была частота где-то 150 кГц... И всё нормально.. Незабывайте на инерционность индикаторов...

А можно поподробнее про инерционность как это. И еще расчет частоты, а то я не сильно понимаю 150 кГц или 1 кГц.

Катался с ВВЛ на его "пятере" цифровой спид., время, температура, кол. бензина в баке,

класс, работает как в кино.

Никаких подсветок я вообще не заметил.

Он просто скромничает.

Ссылка на комментарий
Поделиться на другие сайты

У меня нормально работает так:

1.Загрузил сегменты

2 Вкючил разряд

3 Пауза 1мс

4 Погасил разряд

5 Пауза 1мс

6 Загр. сегменты след. разряда

7 Вкл разряд и т д

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...