Суббота, 20.04.2024, 11:56
Микроконтроллерная техника AVR
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Микроконтроллеры » Вопросы по статьям » 7-и сегментник и регистр 74HC595 (Увеличить число знаков....)
7-и сегментник и регистр 74HC595
Co@ateДата: Суббота, 22.09.2012, 22:05 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 3
Репутация: 0
Статус: Offline
Что то пробую, пробую (код 2-й способ через SPI, скачал в файлах для статей), а больше чем 8 индикаторов подключить не могу.
(Но это конечно не удивительно совсем малый стаж тренировок с программным кодом)))))
Подскажите, как увеличить число знаков на индикаторе до 12?

Добавлено (22.09.2012, 22:05)
---------------------------------------------
Моя проба изменить код, так

Code

/*****************************************************
CodeWizardAVR V2.04.4a Advanced
Chip type               : ATmega8
AVR Core Clock frequency: 4,000000 MHz
*****************************************************/
#include <mega8.h>
#include <spi.h>

#define LED_DOT_MASK 127 //0b01111111    Точка

typedef unsigned char byte;
flash byte led_table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

byte led_dig=0;
byte led_buff[16];
interrupt [TIM0_OVF] void tmr0_ovf() {
spi(1<<led_dig);
spi(led_buff[led_dig]);
PORTB.2=1;
PORTB.2=0;
led_dig++;
if (led_dig>15) led_dig=0;
}

void main() {
PORTB=0;
DDRB=0x2c;   
ACSR=0x80;
SPCR=0x50;
SPSR=0;
#asm("sei")
TIMSK=1;
TCNT0=0xfd;
TCCR0=2;
while (1)
       {    
                    led_buff[0]=led_table[0]&LED_DOT_MASK;
                    led_buff[1]=led_table[1];
                    led_buff[2]=led_table[2];
                    led_buff[3]=led_table[3];
                    led_buff[4]=led_table[4];   //   
                    led_buff[5]=led_table[5];   //  
                    led_buff[6]=led_table[6];  //
                    led_buff[7]=led_table[7];  //
                    led_buff[8]=led_table[8];
                    led_buff[9]=led_table[9];
                    led_buff[10]=led_table[0]&LED_DOT_MASK;  
                    led_buff[11]=led_table[1]&LED_DOT_MASK;  
                    led_buff[12]=led_table[2] &LED_DOT_MASK;      //     
                    led_buff[13]=led_table[3]&LED_DOT_MASK;  
                    led_buff[14]=led_table[4]&LED_DOT_MASK;  
                    led_buff[15]=led_table[5]&LED_DOT_MASK;  

       };
}


Протеус http://www.fayloobmennik.net/2217244
 
HiSERДата: Понедельник, 24.09.2012, 21:41 | Сообщение # 2
Продвинутый автор!
Группа: Проверенные
Сообщений: 254
Репутация: 11
Статус: Offline
говоришь увеличить до 12, сам увеличил до 16...

Code


interrupt [TIM0_OVF] void tmr0_ovf() {
spi(1<<led_dig); //Регистр общих анодов  
spi(led_buff[led_dig]); //Регистр катодов второго сигментника
spi(led_buff[led_dig+8]); //Регистр катодов первого сигментника
PORTB.2=1;
PORTB.2=0;
led_dig++;
if (led_dig>7) led_dig=0;
}  

 
Co@ateДата: Среда, 26.09.2012, 13:57 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 3
Репутация: 0
Статус: Offline
Спасибо! Заработало ,
теперь можно пробовать и в железе попробовать воплотить.

Добавлено (26.09.2012, 13:57)
---------------------------------------------
Начал планировать печатную плату, перемычек получается немеряно )))
Решил сделать вот таким вариантом , для четырех разрядных индикаторов

Code
/*****************************************************  
  CodeWizardAVR V2.04.4a Advanced  
  Chip type               : ATmega8  
  AVR Core Clock frequency: 4,000000 MHz  
  *****************************************************/  
  #include <mega8.h>  
  #include <spi.h>  
//#define LED_DOT_MASK 0b01111111//  ОА
#define LED_DOT_MASK 0b10000000 //  ОК
typedef unsigned char byte;

//flash byte led_table[10]={
//0b11000000,
//0b11111001,
//0b10100100,
//0b10110000,
//0b10011001,
//0b10010010,
//0b10000010,
//0b11111000,
//0b10000000,
//0b10010000 };    //ОА
flash byte led_table[10]={
0b00111111,
0b00000110,
0b01011011,
0b01001111,
0b01100110,
0b01101101,
0b01111101,
0b00000111,
0b01111111,
0b01101111 };  //  ОК
  byte led_dig=0;  
  byte led_buff[16];  
interrupt [TIM0_OVF] void tmr0_ovf() {  
  spi(1<<led_dig); //Регистр общих анодов ????
  spi(led_buff[led_dig]); //Регистр катодов первого сигментника  
  spi(led_buff[led_dig+4]); //Регистр катодов второго сигментника  
  spi(led_buff[led_dig+8]);  
  spi(led_buff[led_dig+12]);  
  PORTB.2=1;  
  PORTB.2=0;  
  led_dig++;  
  if (led_dig>3) led_dig=0;  
  }   

  void main() {  
  PORTB=0;  
  DDRB=0x2c;    
  ACSR=0x80;  
  SPCR=0x50;  
  SPSR=0;  
  #asm("sei")  
  TIMSK=1;  
  TCNT0=0xfd;  
  TCCR0=2;  
  while (1)  
        {     
                     led_buff[0]=led_table[0]&LED_DOT_MASK;  
                     led_buff[1]=led_table[1];  
                     led_buff[2]=led_table[2];  
                     led_buff[3]=led_table[3];  
                     led_buff[4]=led_table[4];   //    
                     led_buff[5]=led_table[5];   //   
                     led_buff[6]=led_table[6];  //  
                     led_buff[7]=led_table[7];  //  
                     led_buff[8]=led_table[8];  
                     led_buff[9]=led_table[9];  
                     led_buff[10]=led_table[0]&LED_DOT_MASK;   
                     led_buff[11]=led_table[1]&LED_DOT_MASK;   
                     led_buff[12]=led_table[2] &LED_DOT_MASK;      //      
                     led_buff[13]=led_table[3]&LED_DOT_MASK;   
                     led_buff[14]=led_table[4]&LED_DOT_MASK;   
                     led_buff[15]=led_table[5]&LED_DOT_MASK;   

        };  
  }

И тут по ходу возник еще вопрос, который мне не получается решить самостоятельно.
Как управлять регистрами, сейчас там устанавливается 0 для индикаторов ОК нужно 1.
А так же, если буду ставить транзисторные ключи наверняка тоже потребуется инвертировать эти состояния.
Вы уж извините что злоупотребляю вашей добротой , но сам я никак...(((
 
Форум » Микроконтроллеры » Вопросы по статьям » 7-и сегментник и регистр 74HC595 (Увеличить число знаков....)
  • Страница 1 из 1
  • 1
Поиск:

Хостинг от uCoz