Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 04.02.2011, 12:28  
takker
Частый гость
 
Регистрация: 08.11.2008
Сообщений: 16
Сказал спасибо: 13
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
takker на пути к лучшему
По умолчанию Помогите пожалуйста с подключением семисегментного двухразрядного индикатора

Здравствуйте, я ещё только осваиваю азы программирования микроконтроллеров AVR на Си и Ассемблере, поэтому многое не знаю.
Мне требуется собрать устройство, которое будет выводить количество нажатий на кнопку до 99 на семисегментный двухразрядный индикатор.
Я не знаю, как в программе перевести восьмиразрядный код, в десяти разрядный. Контроллер выбрал ATtiny2313 Скиньте пожалуйста примеры управления такими индикатороми...
Реклама:
__________________
&&&&&&
takker
takker вне форума  
Сказали "Спасибо" takker
warel (27.06.2019)
Непрочитано 04.02.2011, 12:57  
mironov
Вид на жительство
 
Регистрация: 07.03.2005
Сообщений: 300
Сказал спасибо: 13
Сказали Спасибо 117 раз(а) в 62 сообщении(ях)
mironov на пути к лучшему
По умолчанию Re: Помогите пожалуйста с подключением семисегментного двухразрядного индикатора

Программа предназначалась для другой. Нет ограничения меньше 0 и больше 99. Разберетесь, сделаете.
Вложения:
Тип файла: zip indik22tn2313.zip (56.4 Кб, 135 просмотров)
mironov вне форума  
Эти 2 пользователя(ей) сказали Спасибо mironov за это сообщение:
takker (04.02.2011), warel (27.06.2019)
Непрочитано 04.02.2011, 13:01  
aleksey_gregul
Временная регистрация
 
Регистрация: 24.09.2010
Сообщений: 60
Сказал спасибо: 1
Сказали Спасибо 23 раз(а) в 19 сообщении(ях)
aleksey_gregul на пути к лучшему
По умолчанию Re: Помогите пожалуйста с подключением семисегментного двухразрядного индикатора

Попробуйте так

unsigned char code[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x3 9};

void chartostr(unsigned char value)
{
digit0=value%10;
value=(value-digit0)/10;
digit1=value%10;
value=(value-digit1)/10;
digit2=code[value%10];
digit0=code[digit0];
digit1=code[digit1];
}

Или так
void chartostr(unsigned char value)
{
digit0=value%10;
value=(value-digit0)/10;
digit1=value%10;
value=(value-digit1)/10;
digit2=(value%10)+0x30;
digit0=digit0+0x30;
digit1=digit1+0x30;
}
aleksey_gregul вне форума  
Эти 2 пользователя(ей) сказали Спасибо aleksey_gregul за это сообщение:
takker (04.02.2011), warel (27.06.2019)
Непрочитано 04.02.2011, 13:04  
mironov
Вид на жительство
 
Регистрация: 07.03.2005
Сообщений: 300
Сказал спасибо: 13
Сказали Спасибо 117 раз(а) в 62 сообщении(ях)
mironov на пути к лучшему
По умолчанию Re: Помогите пожалуйста с подключением семисегментного двухразрядного индикатора

Вот еще семисегментные с вычитанием
Вложения:
Тип файла: zip freq_mega8_4raz.zip (65.8 Кб, 99 просмотров)
mironov вне форума  
Эти 2 пользователя(ей) сказали Спасибо mironov за это сообщение:
takker (04.02.2011), warel (27.06.2019)
Непрочитано 04.02.2011, 13:15  
takker
Частый гость
 
Регистрация: 08.11.2008
Сообщений: 16
Сказал спасибо: 13
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
takker на пути к лучшему
По умолчанию Re: Помогите пожалуйста с подключением семисегментного двухразрядного индикатора

Спасибо большое, разберусь
__________________
&&&&&&
takker
takker вне форума  
Сказали "Спасибо" takker
warel (27.06.2019)
Непрочитано 07.02.2011, 07:57  
takker
Частый гость
 
Регистрация: 08.11.2008
Сообщений: 16
Сказал спасибо: 13
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
takker на пути к лучшему
По умолчанию Re: Помогите пожалуйста с подключением семисегментного двухразрядного индикатора

Сообщение от mironov Посмотреть сообщение
Программа предназначалась для другой. Нет ограничения меньше 0 и больше 99. Разберетесь, сделаете.
А каким компилятором пользуетесь?
Я пользуюсь WinAVR, но он меня не удовлетворяет, тем что много примеров из интернета не может откомпилировать, когда другие компиляторы в них разбираются... Я компилирую программы через него, и потом .hex файлы зашиваю в контроллер через Uniprof... Посоветуйте пожалуйста какой-небудь другой компилятор...
__________________
&&&&&&
takker

Последний раз редактировалось takker; 07.02.2011 в 08:04.
takker вне форума  
Сказали "Спасибо" takker
warel (27.06.2019)
Непрочитано 07.02.2011, 08:29  
takker
Частый гость
 
Регистрация: 08.11.2008
Сообщений: 16
Сказал спасибо: 13
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
takker на пути к лучшему
По умолчанию Re: Помогите пожалуйста с подключением семисегментного двухразрядного индикатора

Скачал cvavr, не знаю как откомпилировать в файл .hex , там всё на албанском...(
__________________
&&&&&&
takker
takker вне форума  
Сказали "Спасибо" takker
warel (27.06.2019)
Непрочитано 07.02.2011, 09:38  
mironov
Вид на жительство
 
Регистрация: 07.03.2005
Сообщений: 300
Сказал спасибо: 13
Сказали Спасибо 117 раз(а) в 62 сообщении(ях)
mironov на пути к лучшему
По умолчанию Re: Помогите пожалуйста с подключением семисегментного двухразрядного индикатора

Сообщение от takker Посмотреть сообщение
А каким компилятором пользуетесь?
CVAVR 1.25.9 и книгой Лебедева
mironov вне форума  
Эти 2 пользователя(ей) сказали Спасибо mironov за это сообщение:
takker (07.02.2011), warel (27.06.2019)
Непрочитано 07.02.2011, 23:40  
MasterMushi
Вид на жительство
 
Регистрация: 14.10.2009
Сообщений: 338
Сказал спасибо: 35
Сказали Спасибо 92 раз(а) в 73 сообщении(ях)
MasterMushi на пути к лучшему
По умолчанию Re: Помогите пожалуйста с подключением семисегментного двухразрядного индикатора

Вот примерчик кода который считает приходящие на INT0 импульсы в течении 30 секунд и затем 40 секунд показывает эти данные.

Основа от Hardlock-а
PHP код:

/**************************************************  ***
Chip type               : ATtiny2313
AVR Core Clock frequency: 8,000000 MHz
Memory model            : Tiny
External RAM size       : 0
Data Stack size         : 32
**************************************************  ***/
#define    TRUE    (!FALSE)
#define    FALSE   0
#define    BYTE    unsigned char
#define    WORD    unsigned short int
#define    BOOLEAN char   
#define    LED_delay 250 
      

//тут мы выбираем с общим анодом или катодом схема                      
#define Anode
//#define Cathode   

#include ‹tiny2313.h›
#include ‹stdio.h›
#include ‹delay.h›
                             
//unsigned int  Test_Counter = 12; 
unsigned long int  displaydata 0// Digital count number to be displayed   
unsigned long int  TimerDelayer=0;  // Timer delay for generating 1ms

BYTE Display_Buffer[4] = {
                
0xFA,   // digit 1 initial 0
                
0xFA,   // digit 2 initial 
                
0xFA,  // digit 3 initial
                
0xFA
};      

//Сюда вгоняем карту символов
BYTE CharacterMap[14] = {
                
0xFA,     //0
                
0x82,   //1
                 
0xB9,   //2
                
0xAB,        //3 
                
0xC3,     //4 
                
0x6B,     //5 
                
0x7B,     //6
                
0xA2,    //7 
                
0xFB,      //8
                
0xEB,      //9 
                
0x00,      //blank   
                
0x01     //- 
             //   0x53,      //h
             //   0x09      //г
                
}; 



void ShowDisplayData(void)
{
#ifdef Cathode
  
PORTB Display_Buffer[0];
  
PORTD.5 0;
  
delay_us(LED_delay);
  
PORTD.5 1;    
     
  
PORTB Display_Buffer[1];
  
PORTD.1 0;
  
delay_us(LED_delay);
  
PORTD.1 1;
      
  
PORTB Display_Buffer[2];
  
PORTD.0 0;
  
delay_us(LED_delay);
  
PORTD.0 1;
      
  
PORTB Display_Buffer[3];
  
PORTD.4 0;
  
delay_us(LED_delay);
  
PORTD.4 1;
#endif

#ifdef Anode
  
PORTB = ~Display_Buffer[0];
  
PORTD.5 1;
  
delay_us(LED_delay);
  
PORTD.5 0;    
     
  
PORTB = ~Display_Buffer[1];
  
PORTD.1 1;
  
delay_us(LED_delay);
  
PORTD.1 0;
      
  
PORTB = ~Display_Buffer[2];
  
PORTD.0 1;
  
delay_us(LED_delay);
  
PORTD.0 0;
      
  
PORTB = ~Display_Buffer[3];
  
PORTD.4 1;
  
delay_us(LED_delay);
  
PORTD.4 0;
#endif
 

}                         


void RefreshDisplay(void)
{                                
 
unsigned long int lastnumnum;  
BYTE DigitCount 4
                          
num displaydata;

// Если надо в схеме показ ведущих нулей то.... 
      
Display_Buffer[0]=0xFA;   
      
Display_Buffer[1]=0xFA;
      
Display_Buffer[2]=0xFA;
      
Display_Buffer[3]=0xFA;   
                                  
if ((
displaydata › 0)&&(displaydata ‹ 1000000)) 
  {
    while (
num0)   
     { 
      while (
num10000
        { 
// Автоматический выбор предела измерения
         
num=num/10;
        }
      
DigitCount--;
      
lastnum num 10;
      
num = (num lastnum) / 10;
      
Display_Buffer[DigitCount]=CharacterMap[lastnum];
    } 
  }   
else if (
displaydata › 1000000)
   {
     
Display_Buffer[0]=1;   
     
Display_Buffer[1]=1;
     
Display_Buffer[2]=1;
     
Display_Buffer[3]=1;
   }   
   
 
if (
TimerDelayer30000)
    { 
//Снимаем точки на всех разрядах
      
Display_Buffer[0]&=0b11111011;   
      
Display_Buffer[1]&=0b11111011;
      
Display_Buffer[2]&=0b11111011;
      
Display_Buffer[3]&=0b11111011;
      
// Автоматически вычисляем куда поставить точку
      
if (displaydata10000)
       {
Display_Buffer[2]+=0b100;}
      if ((
displaydata10000)&&(displaydata100000))
       {
Display_Buffer[1]+=0b100;}
      if ((
displaydata100000)&&(displaydata1000000))
       {
          
Display_Buffer[0]+=0b100;
       }
    } else 
    { 
//Пока ведется счет - показываем все точки сразу
      
Display_Buffer[0]|=0b00000100;   
      
Display_Buffer[1]|=0b00000100;
      
Display_Buffer[2]|=0b00000100;
      
Display_Buffer[3]|=0b00000100;      
    }
    
 

  
ShowDisplayData();  
}

// External Interrupt 0 service routine
interrupt [EXT_INT0void ext_int0_isr(void)
{
// По прерыванию плюсуем показания
if (TimerDelayer30000)
displaydata++;
}

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

TCNT0=0x7D;
// считаем 1ms 
  
TimerDelayer++; 
if (
TimerDelayer70000)
   { 
//Тут мы в 70000 загнали время Счет+Показания из этого времени счет только 30000
     
displaydata=0;
     
TimerDelayer=0;   
   };  
}


// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

       
PORTA=0b00000011;
       
DDRA0b00000011;           
       
       
PORTB=0b00000000;
       
DDRB0b11111111;
                 
      
#ifdef Cathode  
        
PORTD=0b01111111;
        
DDRD0b00110011;
      
#endif
      
      #ifdef Anode  
       
PORTD=0b01001100;
       
DDRD0b00110011;
      
#endif
      

// Clock value: 125,000 kHz
TCCR0A=0x00;
TCCR0B=0x03;
TCNT0=0x7D;
OCR0A=0x00;
OCR0B=0x00;

// Clock value: 0 kHz
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// External Interrupt(s) initialization
GIMSK=0x40;
MCUCR=0x00;
EIFR=0x40;

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

//Other
USICR=0x00;
ACSR=0x80;

#asm("sei")

while (1)
      {
            
       
//We do not need any regular code here actually ))))  
        
RefreshDisplay();
      };

Какие пины управляют разрядами видно в коде.

В архиве распиновка подключения сегментов.
Вложения:
Тип файла: rar 7seg.rar (7.3 Кб, 99 просмотров)
__________________
Найди путь или проложи сам!
MasterMushi вне форума  
Эти 2 пользователя(ей) сказали Спасибо MasterMushi за это сообщение:
takker (13.02.2011), warel (27.06.2019)
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите, пожалуйста, создать АОН на AVR ArtUrl1986 Микроконтроллеры, АЦП, память и т.д 23 30.04.2016 18:48
Помогите, пожалуйста, с PICом и дисплеем VaL_KX Proteus 4 15.11.2010 22:33
Помогите пожалуйста с программой! Тимик Микроконтроллеры, АЦП, память и т.д 1 11.08.2010 08:08
ATtiny2313 в качестве драйвера семисегментного индикатора Djakovskij Микроконтроллеры, АЦП, память и т.д 173 26.07.2010 12:47
Помогите пожалуйста , очень нужна прога для RS232 pavel ognev Микроконтроллеры, АЦП, память и т.д 23 04.02.2010 09:15


Часовой пояс GMT +4, время: 17:44.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot