Четверг, 28.03.2024, 16:08
Микроконтроллерная техника AVR
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Микроконтроллеры » Вопросы по статьям » Учимся работать с 7-ми сегм(ч.2). Делаем прост часы на mega8 (слегка переделал часы - не получается)
Учимся работать с 7-ми сегм(ч.2). Делаем прост часы на mega8
belazovДата: Четверг, 02.02.2012, 14:52 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 16
Репутация: 0
Статус: Offline
http://my-avr.at.ua/publ/1-1-0-22 спаял такие часы (в машине сломались). сделал по статье, но индикатор с общим анодом (код переделал под общ анод). Но часы не пошли. Переделал прогу - часы пошли. Но как зажечь точку секундную в разряде единиц часов - пока не въехал. Код пока без учета кнопок управления и интервал секунд составляет 0,1сек для проверки работы чтоб не ждать долго. Не нашел как вставить сюда файлы, а то б выложил схему , печатку и фото.


Сообщение отредактировал belazov - Четверг, 02.02.2012, 18:50
 
HiSERДата: Пятница, 03.02.2012, 22:35 | Сообщение # 2
Продвинутый автор!
Группа: Проверенные
Сообщений: 254
Репутация: 11
Статус: Offline
штудируем:
http://my-avr.at.ua/load/7_i_segmentnik_i_registr_74hc595/1-1-0-22
 
belazovДата: Суббота, 04.02.2012, 00:22 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 16
Репутация: 0
Статус: Offline
Code
void recoding_hour(void)                //функция для перекодировки в десятки +единицы
   {  if (indication_hour<24)             //начинаем преобразование если число < 24 т.к. 2-разрядный LED
      {                          
      digit_out[2]=(indication_hour%10)&0b01111111;    //Делим на 10 остаток в масив 1-разряд десятки часов и обнуляю разряд7 (Dp)
      indication_hour=indication_hour/10; //Оставляем 2 разряда
      digit_out[3]=indication_hour%10;    //Делим на 10 остаток в масив 2-разряд единицы часов
      }                     
   }  

проштудировал.
вроде бы так же? но точка не горит зараза.
И еще, чтобы в обработке прерывания инвертировать бит, так получится?

flagDP=0b01111111;

interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
flagDP=flagDP^0b10000000; //так будет инвертироваться бит 7?
}

Добавлено (04.02.2012, 00:22)
---------------------------------------------
Сделал с подсказки форумчан. Мигает такой вариант

Code
// Timer 0 overflow interrupt service routine
//это прерывание для органицации динамической индикации
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0xBF;       // Reinitialize Timer 0 value, частота прерываний 77Гц
PORTB=0xFF ;       //чтобы предотвратить эффект “тени” на соседних индикаторах
     switch (cur_dig)
     { case 0:{digit3=0; digit2=1;digit1=1;digit0=1; break;};  //подаём питание на разряд 3
       case 1:{digit2=0; digit3=1;digit1=1;digit0=1; break;};  //подаём питание на разряд 2  
       case 2:{digit1=0; digit3=1;digit2=1;digit0=1; break;};  //подаём питание на разряд 1  
       case 3:{digit0=0; digit3=1;digit2=1;digit1=1; break;};  //подаём питание на разряд 0        
        
     }                    //ОА на digit->0, OK->1
PORTD=digits[digit_out[cur_dig]];   //выводим с каждым срабатыванием таймера число из
                    //мaссива digits[] в порт D, но не для всех разрядов сразу
cur_dig++;                          //а с каждым срабатыванием таймера, увеличиваем
                    //переменную cur_dig на 1
if ((cur_dig == 3) && (dot==1)){ // если текущий отображаемый разряд - единицы часов и включено отображение точки
PORTD =PORTD ^ 0b10000000; // то добавляем в вывод запятую
};
if(cur_dig==4) cur_dig=0;           //если cur_dig = 4 обнуляем
}


Я не в том месте проги поджигал точку.


Сообщение отредактировал belazov - Пятница, 03.02.2012, 23:30
 
Форум » Микроконтроллеры » Вопросы по статьям » Учимся работать с 7-ми сегм(ч.2). Делаем прост часы на mega8 (слегка переделал часы - не получается)
  • Страница 1 из 1
  • 1
Поиск:

Хостинг от uCoz