Например TDA7294

Форум РадиоКот • Просмотр темы - Как инвертировать семисегментик с ОК на ОА?
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Сб сен 21, 2024 03:56:51

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 5 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Как инвертировать семисегментик с ОК на ОА?
СообщениеДобавлено: Вс июл 01, 2012 10:52:37 
Родился
Аватар пользователя

Зарегистрирован: Вс июл 01, 2012 10:41:51
Сообщений: 2
Откуда: С планеты Земля
Рейтинг сообщения: 0
Всем доброго времени суток, и к делу, я собираю вольтметр на attiny26, от него есть исходник на Си (написан через кодвижен), но проблема в том что прошивка рассчитана на ОК индикатор, а не на ОА, подскажите как инвертировать в ИСХОДНИКЕ логические уровни у портов МК.

p.s. у меня вышло лишь инвертировать PORTB который переключает цифры для динамической индикации (где оператор case), а PORTA выдаётся крякозябры, при смене таблицы констант для индикатора с ОА, однако я правильно инвертировал константы цифр, не пойму почему так, кому не лень, помогите плиз :(

Спойлер//сам исходник
#include <tiny26.h>
#include <delay.h>
#define digit3 PORTB.4 //3 катод
#define digit2 PORTB.5 //2 катод
#define digit1 PORTB.6 //1 катод
#define ADC_AVERAGE (50)

char digit_out[3], cur_dig;
unsigned long indication;
unsigned int volt;

flash char digits[] = {0xE7, 0x24, 0xAB, 0xAE, 0x6C, 0xCE, 0xCF, 0xA4, 0xEF, 0xEE, 0x00}; //для индикатора с ОК
//flash char digits[] = {0x18, 0xDB, 0x54, 0x51, 0x93, 0x31, 0x30, 0x5B, 0x10, 0x11, 0x00}; //для индикатора с ОА
void recoding(void) { //тут разделение на сотые, десятые и единичные доли, это понятно
digit_out[0]=indication/100%10;
digit_out[1]=indication/10%10;
digit_out[2]=indication%10;
}

#define ADC_VREF_TYPE 0x80
// Read the AD conversion result
//собственно дальше не особо понимаю что происходит и как влияет всё это на индикацию

//тут видать кроется проблема несовместимости с таблицей знаков
unsigned int read_adc(unsigned char adc_input)
{
unsigned char i;
unsigned int result = 0;
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
for(i=0; i<ADC_AVERAGE;i++){
// Start the AD conversion
ADCSR|=0x40;
// Wait for the AD conversion to complete
while ((ADCSR & 0x10)==0);
ADCSR|=0x10;
result += ADCW;
}
return result/ADC_AVERAGE;;
}


// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{

PORTA=0x00; //тут видно попеременное переключение цифр и вывода в порт А
switch (cur_dig){
case 0:{digit3=1;digit1=0;break;};
case 1:{digit1=1;digit2=0;break;};
case 2:{digit2=1;digit3=0;break;};

//сделал для ОА - работает
//case 0:{digit3=0;digit1=1;break;};
//case 1:{digit1=0;digit2=1;break;};
//case 2:{digit2=0;digit3=1;break;};


}
PORTA=digits[digit_out[cur_dig]];
cur_dig++;
if (cur_dig==3) cur_dig=0;
}

void main(void)
{

// Input/Output Ports initialization
// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=In Func3=Out Func2=Out Func1=Out Func0=Out

PORTA=0x00;
DDRA=0xEF;

// Port B initialization
// Func7=In Func6=Out Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In

PORTB=0xFF;
DDRB=0x70;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 4000,000 kHz
TCCR0=0x01;
TCNT0=0x00;
PLLCSR=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1=0x00;
OCR1A=0x00;
OCR1B=0x00;
OCR1C=0x00;
GIMSK=0x00;
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x02;
USICR=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;

// ADC initialization
// ADC Clock frequency: 125,000 kHz
// ADC Voltage Reference: Int., AREF discon.
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSR=0x85;

// Global enable interrupts
#asm("sei")
//volt=read_adc(3);
while (1)
{

volt=read_adc(3)/3;
indication=volt;
recoding();
delay_ms(500); //задержка, это понятно
};
}


Вложения:
Комментарий к файлу: Схемка
Безымянный.jpg [208.37 KiB]
Скачиваний: 739

_________________
Таинственный дымок на плате не есть хорошо
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как инвертировать семисегментик с ОК на ОА?
СообщениеДобавлено: Вс июл 01, 2012 17:15:59 
Вымогатель припоя
Аватар пользователя

Карма: 4
Рейтинг сообщений: 33
Зарегистрирован: Пт июн 04, 2010 17:40:13
Сообщений: 544
Откуда: Непокорный город-герой Севастополь
Рейтинг сообщения: 0
Посмотри как у меня сделано

_________________
Даже у стен есть уши...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как инвертировать семисегментик с ОК на ОА?
СообщениеДобавлено: Вс июл 01, 2012 18:04:08 
Мучитель микросхем

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Ср окт 19, 2011 08:48:27
Сообщений: 443
Откуда: Мать городов русских
Рейтинг сообщения: 0
Попробуй вместо PORTA=0x00; //тут видно попеременное переключение цифр и вывода в порт А

сделать PORTA=0xFF; //тут видно попеременное переключение цифр и вывода в порт А

_________________
Хорошему коту и в декабре - март :)


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Как инвертировать семисегментик с ОК на ОА?
СообщениеДобавлено: Вс июл 01, 2012 19:22:55 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Пт май 21, 2010 01:15:10
Сообщений: 31
Откуда: Латвия
Рейтинг сообщения: 0
Насколько я понял код, тебе надо проинвертировать сигналы на анодах твоих индикаторов (сегменты ты уже проинвертировал). Примерно таким макаром:
Код:
case 0:{digit3=0;digit1=1;break;};
case 1:{digit1=0;digit2=1;break;};
case 2:{digit2=0;digit3=1;break;};

То, что в коде выделено красным - это собственно замер напряжения.


Вернуться наверх
 
Широкий выбор электромеханических реле Hongfa – складская программа в Компэл

КОМПЭЛ продолжает поддерживать и расширять список складских позиций Hongfa, представленных электромеханическими реле. Продукция компании активно применяется в таких областях, как промышленность, энергетика, бытовые приборы, автомобильная отрасль и специальная техника, требующая высокой надежности и на сегодняшний момент может легко заменить электромеханические реле ушедших из РФ брендов.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Как инвертировать семисегментик с ОК на ОА?
СообщениеДобавлено: Ср июл 04, 2012 20:18:09 
Родился
Аватар пользователя

Зарегистрирован: Вс июл 01, 2012 10:41:51
Сообщений: 2
Откуда: С планеты Земля
Рейтинг сообщения: 0
всё разобрался, тут в области case было написано

case 0:{digit3=1;digit1=0;break;};
case 1:{digit1=1;digit2=0;break;};
case 2:{digit2=1;digit3=0;break;};

а, как мне подсказали, надо было написать

case 0:{digit1=1;digit2=0;digit3=0;break;};
case 1:{digit1=0;digit2=1;digit3=0;break;};
case 2:{digit1=0;digit2=0;digit3=1;break;};

получается ровное, попеременное засвечивание цифр, при учёте констант цифр для ОА
так что вопрос решён, всем спасибо за участие :))

_________________
Таинственный дымок на плате не есть хорошо


Вернуться наверх
 
Помехоподавляющие пленочные конденсаторы Hongfa для бытовых и промышленных сетей

Компания Hongfa - один из лидеров азиатского рынка пленочных конденсаторов с полным циклом производства. Она выпускает пять серий помехоподавляющих конденсаторов этого типа как для бытовой, так и для трехфазной промышленной сети, а также для автомобильного применения. Продукция компании по ассортименту, параметрам и количеству серий конденсаторов ЭМП не уступает другим крупным производителям этого сегмента и может легко заменить ассортимент ушедших из РФ брендов.

Подробнее>>
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y