Одновременная работа трех таймеров в ATMega8. Идет сбой.

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение mr_smit »

Здравствуйте. Итак. На Timer0 висит ДУ. Timer1 используется для диммера. Timer2 хочу использовать для отсчета интервалов времени, в течении которого горит подсветка дисплея.

Т.е. когда нажимается кнопка на пульте, включается подсветка дисплея. Она должна погаснуть, например, через 10 сек.

Код: Выделить всё

volatile unsigned int Light_delay = 0;
...
// Timer 2 output compare interrupt service routine
interrupt [TIM2_COMP] void timer2_comp_isr(void)
{
  Light_delay++;
  if (Light_delay > 10000) {
    TCCR2=0x00;
    Light_delay=0;
    DISPLAY_PIN = 0;
  }
}

void backlight_on (void) {
  TCCR2=0x04;
  Light_delay=0;
  DISPLAY_PIN = 1;
}
...
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 250,000 kHz
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0xFA;
...
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x99;

if (cmd == 10011101) {
  backlight_on ();
  ...
}
Т.е. вызов backlight_on () должен включить подсветку на 10 сек. (DISPLAY_PIN это вывод на котором сидит база транзистора который управляет подсветкой)

Когда работают Timer0 и Timer1 всё прекрасно. На дисплее отображается всё что нужно, диммер работает прекрасно. Но как только добавляю вышеприведенный код, начинается свистопляска. При нажатии какой нибудь кнопки на пульте, подсветка загорается только на время удержания кнопки, т.е. не 10 секунд, и тут же гаснет. На экран (S65) перестает выводится половина строк.

Timer2 настроен на прерывание каждую 1 мс. Т.е. 10000 "прерываний" это 10 секунд.

Почему одновременная работа 3-х таймеров дает такие сбои??? Т.е. таймер неправильно считает что ли??? Или надо все 3 как то синхронизировать между собой??? Timer2 должен же считать сам по себе, независимо. Почему сбои??? Именно при включении 3-го таймера который должен просто отсчитать 10 сек.
Нельзя всё знать, достаточно понимать.
Реклама
Аватара пользователя
adrenocrome
Потрогал лапой паяльник
Сообщения: 365
Зарегистрирован: Вт окт 21, 2008 15:03:06
Откуда: moscow
Контактная информация:

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение adrenocrome »

По остальным таймерам тоже прерывания настроены?
Зачем в прерывании TIM2_COMP что-то делать еще кроме приращения счётчика? В основной цикл нельзя вынести?
День прошёл, а ты всё жив
Реклама
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение mr_smit »

По остальным таймерам тоже прерывания настроены?
Да. Для отсчета времени ДУ и время открытия симистора.

Я в прерывании только инкрементирую переменную! Light_delay++; И только если она больше 10000 останавливаю счетчик и изменяю состояние пина. Но почему то это не работает
Нельзя всё знать, достаточно понимать.
Аватара пользователя
adrenocrome
Потрогал лапой паяльник
Сообщения: 365
Зарегистрирован: Вт окт 21, 2008 15:03:06
Откуда: moscow
Контактная информация:

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение adrenocrome »

mr_smit писал(а): Да. Для отсчета времени ДУ и время открытия симистора.

Я в прерывании только инкрементирую переменную! Light_delay++; И только если она больше 10000 останавливаю счетчик и изменяю состояние пина. Но почему то это не работает
Скорее всего пока ты там что-то в каком-то из прерываний пытаешься делать, срабатывает другое прерывание.
Я всегда стараюсь свести к минимуму действия внутри обработчика прерывания. Поднимаю флаг или счётчик инкрементирую, а потом в основном цикле отрабатываю что нужно.

Таймеры работают верно, в прерываниях каша.
День прошёл, а ты всё жив
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение mr_smit »

2 таймера работают без проблем. С прерываниями там разобрался. Почему то именно при включении 3-го возникает какая то ерунда.

Похоже нашел в чем проблема:

Код: Выделить всё

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
        TCNT0=0xFA;               //переинициировали таймер - отсчитывает 96 мкс
        ....
}
Т.е. у меня нулевой таймер считает так же как и 2-ой. Наверное в этом затык. TCNT0=0xFA; и OCR2=0xFA;

т.е. получается прерывания срабатывают одновременно, а поэтому и проблема, сейчас пересчитаю второй таймер на другой интервал.
Нельзя всё знать, достаточно понимать.
Реклама
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение mr_smit »

Нет, проблема не в этом. Сделал:

Код: Выделить всё

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 15,625 kHz
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x07;
TCNT2=0x00;
OCR2=0x9C;
настроил на прерывание ~ 10 мс

При удержании кнопки увеличения яркости, подсветка быстро быстро моргает :( Отпускаешь - тут же гаснет. Да что ж за хрень то. Зла не хватает. Последний штрих остался в моём проекте. Фффшшшшшфффшшшш...

Я не понимаю, как этот код может сразу выключать подсветку?????

Код: Выделить всё

if (Light_delay > 1000) {
    TCCR2=0x00;
    Light_delay=0;
    DISPLAY_PIN = 0;
  }
Нельзя всё знать, достаточно понимать.
Реклама
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение mr_smit »

Усердно читаю даташит. А что за регистр ASSR у Timer2 ??? Может я просто таймер не правильно настраиваю??? Что за асинхронная операция???
Untitled-2.jpg
(90.63 КБ) 726 скачиваний
Нельзя всё знать, достаточно понимать.
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение clawham »

gj[j;t что ваш таймер просто не работает... не тактуется!
в меге 8 и 8а никогда никаких проблем не встречал с таймерами хоть и всеми сразу + ацп + вачдог+аналог компаратор....всё работает как часы

Дайте полный исходник! и если можно - простенькую схемку в протеусе - поганяю - думаю делов на 1 минуту
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение Goodefine »

mr_smit писал(а): ...
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x99;
....
Непонятно, почему для такой простейшей задачи вы избрали Timer/Counter2 Output Compare Match Interrupt
Не легче ли и понятней применить Timer/Counter2 Overflow Interrupt? Верхним пределом (который 10000 в данном случае) счета любой интервал получить можно. В этом случае
TIMSK=0x59;
А точнее (насколько я помню у вас Timer/Counter1, Output Compare B Match Interrupt не используется):
TIMSK=0x51;
Ну и обработчик переименовать...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение clawham »

Тут я насколько понял человек хочет яркостью управлять а это ШИМ или программный или аппаратный...вот и интересно как да что....исходничек бы....хоть в личку - я б помог - не вопрос :)
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение mr_smit »

Goodefine писал(а): Timer/Counter1, Output Compare B Match Interrupt не используется
Используется. По Compare А симистор открывается, по Compare B закрывается (импульс 25 мкс)
Не легче ли и понятней применить Timer/Counter2 Overflow Interrupt
Не легче. Потому что я с этого и начал. При этом результат тот же.

ШИМ я не использую!!!!!!!! Мне надо выключить подсветку через 10-15 сек "бездействия". И включить при нажатии на любую кнопку (опять же на 10-15 сек). А у меня при нажатии на кнопку подсветка загорается и сразу же гаснет.

Размер кода приличный. Выкладывать всё не имеет смысла. Никто не будет разбираться. Вот основные моменты: int0, int1, timer0, timer1, timer2.

Почему то так же сбоят часы. Например вместо 11 года устанавливается 14. И ещё, при удержании кнопки увеличения яркости, часы продолжают идти!!!!! Секунды перерисовываются. Это вообще фантастика. Как??? Если попав в if (cmd == 0b11111000) { мы крутимся в нем. И к отрисовке секунд не должно переходить. Этого вообще не понимаю. Чудеса какие то

Код: Выделить всё

volatile unsigned int count_RTC = 0;
volatile unsigned int Light_delay = 0;
....

// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
  {
  if (start_triac_timer == 1) {
    OCR1A = nagruzka[status];
    OCR1B = nagruzka[status]+60;
    TCNT1 = 0;                   // сбросили таймер
    TCCR1B=0x02;
    //GICR| = 0x80;              // запретили прерывание INT0 // GIFR = 0x10000000 (или см. строчку ниже)
    GICR&=~(1<<6);               // запретили прерывание INT0 // GIFR = 0x10000000
    }
  else {
    TCCR1B=0x00;
    }
  }
  
// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
        TCNT0=0xFA;                                                             // запускаем таймер на 96 мкс
        TCCR0=0x04;                                                             // частота таймера 62.500 кГц
        
        if (tick >= 90 && tick < 98) 
     ................... 
     // получение команды с пульта
}

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
        TCNT0=0xFA;                                //переинициировали таймер - отсчитывает 96 мкс
        tick++;                                    //увеличили число тиков
        if (tick > 500) {                          //если прошло более 48 мс
          TCCR0=0x00;                              //сбросили все к исходному состоянию
          TCNT0=0x00;
          tick = 0;                                                       
          start_cond = 0;
          cmd = 0;
        }
}

// Timer 1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
  { 
  TRIAC_PIN = 0;    // открыли симистор
  }
  
// Timer 1 output compare B interrupt service routine
interrupt [TIM1_COMPB] void timer1_compb_isr(void)
{
 TRIAC_PIN = 1;    // вернулись в режим ожидания
 GIFR|=(1<<6);     // сбросили флаг прерывания - Флаг сбрасывается ЕДИНИЦЕЙ
 GICR|=(1<<6);     // разрешаем прерывание INT0.
}

// Timer 2 output compare interrupt service routine
interrupt [TIM2_COMP] void timer2_comp_isr(void)
{
  Light_delay++;
  if (Light_delay > 3000) {
    TCCR2=0x00;
    DISPLAY_PIN = 0;
  }
}

void backlight_on (void) { 
  Light_delay=0;
  OCR2=0x9C;
  //TCCR2=0x07;
  TCCR2=0x0F;
  DISPLAY_PIN = 1;
}

....
void main(void) {

...
rtc_init (0,0,0);
DS1307_on ();
rtc_set_time (bin2bcd(20),bin2bcd(52),bin2bcd(19));
rtc_set_date (bin2bcd(5),bin2bcd(4),bin2bcd(11)); 

rtc_get_date(&day,&month,&year); //считать дату
day = bcd2bin(day);
month = bcd2bin(month);
year = bcd2bin(year);
          
bgcolor = 0x95BF;   // дата/время
sprintf(cnt,"%02u.%02u.%02u",day,month,year);        
put_string(0, 120, cnt, 0x001F, 1);

  while (1) {

     count_RTC++;

     if (cmd == 0b11111000) {                           // кнопка "Display" - увеличение яркости
          start_triac_timer = 1;
          backlight_on ();
		  status++;
		  if (status > 97) {
            start_triac_timer = 0;
		    status = 98;   
            TRIAC_PIN = 0;                                // полностью включили
            sprintf(cnt,"%u",status);                     // преобразование "яркости" в строку
            bgcolor = 0xC7EB;  // статус
            put_string(power_x, power_y,cnt, 0x001F, 3);  // выводим на экран
			}
          else {
            sprintf(cnt,"%u",status);                     // преобразование "яркости" в строку
            bgcolor = 0xC7EB;  // статус
            if (status < 10) {
              put_string(power_x+13, power_y,cnt, 0x001F, 3);  // выводим на экран
            }
            else {
              put_string(power_x, power_y,cnt, 0x001F, 3);    // выводим на экран
            };
		    delay_ms(delay_);
            }
		 }

        if (count_RTC > 1000) {          // чтобы не опрашивать DS1307 слишком часто
        count_RTC = 0;
        
        rtc_get_time(&hour,&min,&sec);   //считать время 
        sec = bcd2bin(sec);
        min = bcd2bin(min);
        hour = bcd2bin(hour);
        
        bgcolor = 0x95BF;   // дата/время
        sprintf(cnt,"%02u:%02u:%02u",hour,min,sec);
        put_string(106, 1, cnt, 0x001F, 1);
        
        if (min == 0) {
          rtc_get_date(&day,&month,&year); //считать дату
          //DayOfWeek = bcd2bin(rtc_read(0x03));   // чтение дня недели
          day = bcd2bin(day);
          month = bcd2bin(month);
          year = bcd2bin(year);
          
          bgcolor = 0x95BF;   // дата/время
          sprintf(cnt,"%02u.%02u.%02u",day,month,year);        
          put_string(0, 120, cnt, 0x001F, 1); 
        }          
      }
  }
}
Нельзя всё знать, достаточно понимать.
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение Goodefine »

Вы же понимаете, что чудес не бывает. Похоже, вы пожинаете плоды неправильной организации программы. Прерывания от Т2 могли стать последней каплей для краха. Чтобы проверить, не разрешаете прерывания от Т2, а в основном цикле анализируйте флаг возникновения прерывания:

Код: Выделить всё

if(FLAG)
{
--тот же код что и в обработчике
--сброс этого флага
}
В таком случае, ничего не поменяется в работе (реакция на совпадение или переполнение Т2 некритична), а логика работы будет та же... Многое прояснится...
Ну и на всякий случай, можно в настройках проекта увеличить размер стека..
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение clawham »

не понимаю в чём секретность исходного кода простейшей диммилки регулируемой с рц5 пульта?
я например не понимаю как можно сидеть в обработчике прерывания внешнего и ждать когда же таймер-то отработает своё прерывание :))) прерывать обработку прерывания МК какраз не умеет....

но это всё шаманство с бубном пока не будет полного исходника :)

да и не забывайте что cmd не сбрасывается после успешной обработки - вы будете как бы висеть и постоянно входить в ващу же процедуру которая неоднократно будет запускаться...нужно делать флаг или стек команд и или сбрасывать команду в ноль после отработки или удалять комманду из очереди/стека/массива ну или флажок снять что пришла новая команда
Последний раз редактировалось clawham Ср апр 06, 2011 08:43:36, всего редактировалось 1 раз.
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18670
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение ARV »

Goodefine писал(а):Вы же понимаете, что чудес не бывает. Похоже, вы пожинаете плоды неправильной организации программы.
я пытался об этом автору говорить еще давно, но у него ответ один: "мне не понятен ваш подход, а при моем подходе работает - значит, я прав".

согласен, что для простой задачи диммирования mr_smit огреб слишком много проблем. я в таких случаях переписываю весь проект целиком (точнее, переписывал давным-давно, теперь просто до этого не довожу никогда). почему-то никто не верит, что писать ПРАВИЛЬНО СРАЗУ вовсе не сложно или не трудно...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение Goodefine »

ARV писал(а):...почему-то никто не верит, что писать ПРАВИЛЬНО СРАЗУ вовсе не сложно или не трудно...
Ага, причем аргументы известны :)

В последней проблеме, подумалось, виновато не столько само прерывание, а сохранение контекста при входе в него. Похоже тут то стек и рушиться. Уж больно симптомы похожи, но это только догадки... Во всяком случае, стек увеличить легко, если есть куда :)
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Аватара пользователя
adrenocrome
Потрогал лапой паяльник
Сообщения: 365
Зарегистрирован: Вт окт 21, 2008 15:03:06
Откуда: moscow
Контактная информация:

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение adrenocrome »

Вот крайне интересно, что происходит если при выполнении этого куска кода происходит прерывание?

Код: Выделить всё

        
sprintf(cnt,"%02u:%02u:%02u",hour,min,sec);
put_string(106, 1, cnt, 0x001F, 1);
Началась к примеру передача по SPI каких-то данных в ЖКИ. И тут оп-па, прерывание! :shock:
Я, конечно, не такой уж чтобы спец, поэтому в особо ответственных местах просто прерывания запрещаю. А потом, после выполнения нужных функций, разрешаю. Наступал на грабли несколько раз, решил кардинально проблему :))) Ну и флаговый автомат применяю. Помогает.
День прошёл, а ты всё жив
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18670
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение ARV »

adrenocrome писал(а):Началась к примеру передача по SPI каких-то данных в ЖКИ. И тут оп-па, прерывание! :shock:
да и хрен бы с ним! выведется инфа на ЖКИ на пару микросекунд позже или раньше - какие проблемы?

сами по себе прерывания никогда никому не вредят, и бездумно их запрещать (особенно на время выполнения ФУНКЦИЙ ЦЕЛИКОМ) - это одно из проявлений низкокачественного программирования. напомню тут всем известную эпопею с 1-wire в CVAVR: если запретить прерывание на время функции работы с термодатчиком, то динамическая индикация мигает, если не запрещать - не работает обмен с датчиком :) тупик. а на самом деле прерывания надо было запрещать буквально на 60 микросекунд ВНУТРИ функции работы с датчиком (если бы она была ПРАВИЛЬНО написана) - и никаких проблем!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение Goodefine »

Еще есть один вариант - правда маловероятный - это козни самого CAVR. В одном несложном проекте на тини2313, никак не мог добиться правильной работы программы (использовались большие числа). И места оставалось процента 2. После этого, взял исходник, поправил по минимуму под winavr, чтоб скомпилировался. Итог - заработало сразу и прошивка процентов на 30 уменьшилась. После этого CAVR стоит у меня исключительно ради старых проектов, которые уже не модернизируются, но вдруг... Еще, когда лень в даташите копаться, могу генератор кода использовать... Программы в нем больше не пишу, ибо обжегся...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18670
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение ARV »

козни могут быть всякие... недавно столкнулся с дикими кознями avr-gcc: одна из функций у меня заполняла три регистровые глобальные переменные. если я ее объявлял static - происходило чудо: самое первое обращение к функции компилировалось нормально, а все последующие ПРОСТО ИГНОРИРОВАЛИСЬ компилятором. если функция объявлалась не-static, она работала нормально всегда. если переменные делались не-регистровыми - функция отрабатывала так же в обоих вариантах :(

пришлось переделать функцию в макрос, чтобы добиться того же эффекта, что и для static...

P.S. теперь я связываю козни с тем, что незадолго до этого я установил AVR-toolchain от Atmel - скачал с их сайта (сборка WinAVR и avr32-gcc в комплекте), эта штука прописалась в path раньше WinAVR и... я стал замечать "странности" в работе до сего момента стабильного компилятора. вчера path почистил, но протестировать прогу еще не успел...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение mr_smit »

Ну во-первых это не простой диммер.

1. Картинка для заполнения дисплея лежит в 2-х внешних EEPROM 24LC256
2. Подключен дисплей от S65
3. Подключены часы DS1307
4. Подключен TSOP 1736

И секрета нет. Вот полный исходник:
Dim2.zip
(24.81 КБ) 270 скачиваний
CodeVisionAVR 2.03.4.

I2C (TWI) аппаратный, SPI аппаратный

Это меню:
final_4.jpg
(67.7 КБ) 852 скачивания
Сейчас параллельно с кодом работаю над лицевой панелью:
лицевая панель.jpg
(58.22 КБ) 526 скачиваний
2 таймера нормально работают, но вот отмерить время (10-15 сек) не могу (3-им таймером)
Нельзя всё знать, достаточно понимать.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»