Делимся опытом Наступив на грабли - сообщи другим! Обмен опытом разработки и ремонта электронных устройств. |
19.08.2015, 21:39
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Миниатюрный линейный светодиодный индикатор
Сообщение от alvadep
|
Та отож-бо
|
Ну, у Вас тоже ошибочка
Сообщение от alvadep
|
максимум светодиодов будет 16
|
32 будет - светодиод штука полярная.
|
|
|
|
19.08.2015, 21:50
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
|
Re: Миниатюрный линейный светодиодный индикатор
Что-то я сомневаюсь, что одна 595 сможет управлять 32-мя светиками независимо. Если не затруднит, изобразите.
|
|
|
|
20.08.2015, 00:13
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Миниатюрный линейный светодиодный индикатор
Да что ж мне не везёт-то так сегодня?
С утра лоханулся, сейчас тоже, да ещё и на работу сегодня ходил...
Наверное потому, что отпуск кончиля...
Сообщение от alvadep
|
Что-то я сомневаюсь
|
Абсолютно правильно сомневались...
Но эффект получился интересный.
(между тем с четырьмя светиками на трёх проводах всё прокатило)
|
|
|
|
20.08.2015, 00:58
|
|
Вид на жительство
Регистрация: 09.12.2009
Адрес: Россия, Тула
Сообщений: 377
Сказал спасибо: 192
Сказали Спасибо 156 раз(а) в 99 сообщении(ях)
|
Re: Миниатюрный линейный светодиодный индикатор
Сообщение от omercury
|
Ой
А Z-состояние зачем, если не секрет?
Упс, ступил.
Иначе группами светить будет...
|
Попадались как-то смд-светодиоды, которые слегка светились от микро-токов как раз на Z-состоянии...
Долго парился, пока не дошло навесить на каждый из них по 1 ком.
А может контрольник был бракованный, с утечками.
Флюс отмывал хорошо.
|
|
|
|
29.08.2015, 14:39
|
|
Прописка
Регистрация: 22.05.2009
Адрес: Волгоград
Сообщений: 215
Сказал спасибо: 103
Сказали Спасибо 39 раз(а) в 22 сообщении(ях)
|
Re: Миниатюрный линейный светодиодный индикатор
Уважаемые omercury и alvadep! Прислали мне с Китая микроконтроллеры TINY13A. Помогите до конца довести вариант figure.1 (пост#2).
Основные требования: Отображение нуля посередине шкалы. Любое приемлемое для МК количество светодиодов в каждую сторону от нуля. Отображение одним светодиодом. Любая: линейная или логарифмическая шкала (что легче реализовать).
Как будет выглядеть полная схема устройства и что делать с прошивкой, как её изменить под эту задачу?
|
|
|
|
30.08.2015, 01:31
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
|
Re: Миниатюрный линейный светодиодный индикатор
uepapx, схема из статьи будет без изменений. Единственно к ней нужно добавить входную часть типа как на картинке. ОУ можно взять типа LMV321 (SOT23). Прошивку под линейный вариант в этом случае можно не менять ( ссылка на исходники, на данный момент просто нечем откомпилировать, сорри, может кто-то поможет).
Код:
|
#include‹avr/interrupt.h›
#include‹avr/io.h›
#include‹avr/pgmspace.h›
//Linear Scale Display
volatile uint16_t curadc=0;
//instantaneous adc value
volatile uint8_t displaylevel=0;
// number of leds to be lit up
volatile uint8_t displaycounter=0;
// current lit up led
SIGNAL (SIG_OVERFLOW0)
{
TCNT0 = -5; //1875 Hz
// TCNT0 - Timer/Counter Register
switch (displaycounter)
{
case 0: DDRB=0b00000000;
PORTB=0b00000000;
break;
case 1: DDRB=0b00011000;
PORTB=0b00010000;
break;
case 2: DDRB=0b00010100;
PORTB=0b00010000;
break;
case 3: DDRB=0b00010010;
PORTB=0b00010000;
break;
case 4: DDRB=0b00010001;
PORTB=0b00010000;
break;
case 5: DDRB=0b00011000;
PORTB=0b00001000;
break;
case 6: DDRB=0b00001100;
PORTB=0b00001000;
break;
case 7: DDRB=0b00001010;
PORTB=0b00001000;
break;
case 8: DDRB=0b00001001;
PORTB=0b00001000;
break;
case 9: DDRB=0b00010100;
PORTB=0b00000100;
break;
case 10: DDRB=0b00001100;
PORTB=0b00000100;
break;
case 11: DDRB=0b00000110;
PORTB=0b00000100;
break;
case 12: DDRB=0b00000101;
PORTB=0b00000100;
break;
case 13: DDRB=0b00010010;
PORTB=0b00000010;
break;
case 14: DDRB=0b00001010;
PORTB=0b00000010;
break;
case 15: DDRB=0b00000110;
PORTB=0b00000010;
break;
case 16: DDRB=0b00000011;
PORTB=0b00000010;
break;
case 17: DDRB=0b00010001;
PORTB=0b00000001;
break;
case 18: DDRB=0b00001001;
PORTB=0b00000001;
break;
case 19: DDRB=0b00000101;
PORTB=0b00000001;
break;
case 20: DDRB=0b00000011;
PORTB=0b00000001;
break;
default: DDRB=0b00000000;
PORTB=0b00000000;
break;
}
if(displaycounter == displaylevel)
{
displaycounter=0;
ADCSRA = 0b11001111; // start conversion
}
else
{
displaycounter++;
}
}
SIGNAL (SIG_ADC)
{
curadc=ADC;
displaylevel=curadc/50;
}
int main(void)
{
DDRB = 0b00000000;
PORTB = 0b00000000;
// All pins set to High Z (Pins set as input with pullups disabled)
TIMSK0 = 0b00000010; //Timer/Counter0 Overflow Interrupt Enable is set
// TIMSK0 - Timer/Counter Interrupt Mask Register
// ---------------------------------------------------------
// | - | - | - | - |OCIE0B|OCIE0A| TOIE0| - |
// | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
// ---------------------------------------------------------
TCCR0A = 0b00000000;
// TCCR0A - Timer/Counter Control Register A
// ---------------------------------------------------------
// |COM0A1|COM0A0|COM0B1|COM0B0| – | – | WGM01| WGM00|
// | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
// ---------------------------------------------------------
TCCR0B = 0b00000101; //Fed by System Clock of 9 600 000 divided by 1024 = 9375 Hz
// TCCR0B - Timer/Counter Control Register B
// -------------------------------------------------
// |FOC0A|FOC0B| – | – |WGM02| CS02| CS01| CS00|
// | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
// -------------------------------------------------
TCNT0 = -5; //1875 Hz
// TCNT0 - Timer/Counter Register
ADMUX = 0b00000000; //ADC0 (PB5) is input to ADC
// ADMUX - ADC Multiplexer Selection Register
// -------------------------------------------------
// | - |REFS0|ADLAR| - | - | - | MUX1| MUX0|
// | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
// -------------------------------------------------
ADCSRA = 0b11001111; //Sampling rate is system clock divided by 128
// ADCSRA - ADC Control and Status Register A
// -------------------------------------------------
// |ADEN |ADSC |ADATE| ADIF| ADIE|ADPS2|ADPS1|ADPS0|
// | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
// -------------------------------------------------
DIDR0 = 0b00100000; //Disable Digital input buffer on PB5
// DIDR0 - Digital Input Disable Register 0
// -------------------------------------------------
// | – | – |ADC0D|ADC2D|ADC3D|ADC1D|AIN1D|AIN0D|
// | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
// -------------------------------------------------
sei();
// Global Interrupt Enable - Sets bit I in SREG
while(1){};
} |
При 0 на входе на выходе ОУ должно быть 2,5В. При этом должен гореть светодиод посредине шкалы. Смешение регулируется резистором R3.
Можно еще добавить по выходу ОУ RC фильтр. И на всякий случай защитные диоды на +5В и землю после резистора R1.
В общем как-то так в первом приближении.
|
|
|
Сказали "Спасибо" alvadep
|
|
|
30.08.2015, 10:55
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Миниатюрный линейный светодиодный индикатор
Не привыкайте к полотнищам в switch.
Это делается через таблицы.
PHP код:
|
const uint8_t tab_DDRB[] = { };
const uint8_t tab_PortB[] = { };
SIGNAL (SIG_OVERFLOW0)
{
TCNT0 = -5; //1875 Hz
// TCNT0 - Timer/Counter Register
uint8_t i = displaycounter;
if ( i ›= sizeof( tab_DDRB ) ) i = 0;
DDRB = tab_DDRB[ i ];
PORTB = tab_PortB[ i ];
if(displaycounter == displaylevel)
{
displaycounter=0;
ADCSRA = 0b11001111; // start conversion
}
else
{
displaycounter++;
}
|
|
|
|
Сказали "Спасибо" Boba_spb
|
|
|
31.08.2015, 01:16
|
|
Прописка
Регистрация: 22.05.2009
Адрес: Волгоград
Сообщений: 215
Сказал спасибо: 103
Сказали Спасибо 39 раз(а) в 22 сообщении(ях)
|
Re: Миниатюрный линейный светодиодный индикатор
Сообщение от alvadep
|
uepapx, схема из статьи будет без изменений. Единственно к ней нужно добавить входную часть типа как на картинке.
При 0 на входе на выходе ОУ должно быть 2,5В. При этом должен гореть светодиод посредине шкалы. Смещение регулируется резистором R3.
Можно еще добавить по выходу ОУ RC фильтр. И на всякий случай защитные диоды на +5В и землю после резистора R1.
В общем как-то так в первом приближении.
|
В приборе микроамперметр стоит на выходе каскада на ОУ UA741 в cmd корпусе (см. вложение). Его питание +15 и -15 Вольт. Можно ли использовать этот каскад для смещения нуля на середину шкалы светодиодного индикатора, не применяя дополнительный каскад на ОУ, что предложили Вы, если часть отрицательного напряжения от -15 V подать на нижний конец микроамперметра через резистивный делитель? Или все-таки лучше применить предложенный вариант - дополнительный каскад ОУ с питанием 5V? Не возникнет ли при этом конфликт по питающим напряжениям: двухполярное и однополярное?
Последний раз редактировалось uepapx; 31.08.2015 в 01:21.
|
|
|
|
31.08.2015, 02:15
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.12.2004
Адрес: Bернулся в San Jose,CA,USA,Beach BLVD,свой дом,окна на океан-ничего личного,просто бизнес!
Сообщений: 1,098
Сказал спасибо: 22
Сказали Спасибо 423 раз(а) в 316 сообщении(ях)
|
Re: Миниатюрный линейный светодиодный индикатор
можете так включить ... тогда доп. каскад не нужен , смещение в + выставляйте какое нужно
__________________
"Дворяне и их младые отроки должны всегда меж собою говорить на ВЫ и на иностранных языках, дабы тем навыкнуть могли, и чтобы их можно было от других незнающих болванов распознать."
Уложение о поведении (с) царь Пётр I
|
|
|
|
31.08.2015, 03:00
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Миниатюрный линейный светодиодный индикатор
Сообщение от alvadep
|
на данный момент просто нечем откомпилировать, сорри, может кто-то поможет
|
Во-первых компилировать пока преждевременно - всё равно переделывать.
Во-вторых Boba_spb прав, лучше сделать таблично, да и править потом удобнее. (Кстати-1, это не alvadep написал, он "просто разместил объяву") (Кстати-2, массив наверное лучше сделать двухмерным).
Сообщение от uepapx
|
Можно ли использовать этот каскад для смещения нуля
|
Можно, и я уже говорил как.
Сообщение от uepapx
|
Не возникнет ли при этом конфликт по питающим напряжениям: двухполярное и однополярное?
|
Не, не возникнет.
Сообщение от elon
|
можете так включить
|
Тоже вариант, тогда питание "цифры" однополярное.
uepapx, давайте сначала определимся с несколькими принципиальными вещами:
- хотите ли Вы, чтоб светодиод нуля гас при смещении напряжения?
- если да, то хватит ли вам одиннадцати светодиодов?
(если "ноль" будет гореть постоянно, то хватит ли 13 диодов?)
Второй вопрос не праздный.
Так, как контроллер всего с восемью ножками, то на входы/выходы остаётся только 6 ножек, из них одна будет задействована на вход и одна служебная - активация режима стирания/записи контроллера (её можно использовать как стандартный вход/выход, но в этом случае перепрограммировать контроллер простым программатором уже не получится - нужен специальный. В случае ошибки (а они точно будут, уж поверьте), микроконтроллер отправится в долгий ящик до лучших времён. Поэтому варианта два: либо ограничиться двенадцатью моргающими диодами, либо (гулять, так гулять) ставить все 20. Но с риском.
Кстати, постоянно светящийся "ноль" будет не только ориентиром для отсчётов, но и станет двадцать первым светодиодом в шкале. )))
По поводу платы.
Лучше разделить её на две части - на одной будет микроконтроллер, а на второй только светодиоды. Так как светиков много, а места мало и разводка двадцати диодов на плате 10х30мм дело нетривиальное, то лучше не загромождать эту плату ещё и микросхеминой, да и конструкция жёстче получится - гибкую плату со светодиодами припаять по торцам к жесткой плате и соединить их ещё двумя-тремя проволочными стойками по длинным сторонам.
Готовьте ответы на эти вопросы, а потом займёмся алгоритмом работы показометра.
Программу пока отложим...
Последний раз редактировалось omercury; 31.08.2015 в 03:03.
|
|
|
Сказали "Спасибо" omercury
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:16.
|
|