Jump to content

Помогите Разобраться С Таймером На Atiny2313


 Share

Recommended Posts

Сделал простые часы на микроконтроллере Atiny2313, а они не правильно идут. Спешат приблизительно за 1 минуту на 1 секунду. Не могу разобраться или Таймер/Счетчик настроил не правильно или в коде какая то ошибка. Фьюзы ни какие не трогал. Помогите разобраться.

Микроконтроллер: Atiny2313

Кварц: 8МГц.

Делител частоты: 1024

Переполнение происходит: 7813 раз/сек. в hex: 1E85

#include <tiny2313.h>
#include <delay.h>

unsigned char seconds, ten_seconds, minutes, ten_minutes, hours, ten_hours, b;


// Timer 1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)    
{ 

seconds++;

 TCNT1H=0x00;
 TCNT1L=0x00;



   if (seconds >= 10)
   {
   seconds = 0;
   ten_seconds++;
   };

     if (ten_seconds >= 6)
     {
     ten_seconds = 0;
     minutes++;
     };

       if (minutes >= 10)
       {
       minutes = 0;
       ten_minutes++;
       };

         if (ten_minutes >= 6)
         {
         ten_minutes = 0;
         hours++;
         };

           if (hours >= 10)
           {
           hours = 0;
           ten_hours++;
           };

             if (ten_hours >= 2 && hours >= 4)
             {
             ten_hours = 0;
             hours=0;
             };



}



void main(void)
{
// Crystal Oscillator division factor: 1

CLKPR=0x80;
CLKPR=0x00;


// Input/Output Ports initialization
// Port A initialization
// Func2=In Func1=In Func0=In 
// State2=P State1=P State0=P 
PORTA=0x07;
DDRA=0x00;

// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
PORTB=0x00;
DDRB=0xFF;

// Port D initialization
// Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
PORTD=0x00;
DDRD=0x7F;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 7,813 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x05;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x1E;
OCR1AL=0x85;
OCR1BH=0x00;
OCR1BL=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// Interrupt on any change on pins PCINT0-7: Off
GIMSK=0x00;
MCUCR=0x00;

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

// Universal Serial Interface initialization
// Mode: Disabled
// Clock source: Register & Counter=no clk.
// USI Counter Overflow Interrupt: Off
USICR=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;

// Global enable interrupts
#asm("sei")

while (1)
     {

     //Вывод на симисегментники

     }
}

Edited by Sandor
Link to comment
Share on other sites

 Фьюзы по умолчанию стоят так, что микроконтроллер работает от внутреннего генератора БЕЗ КВАРЦА!

Проверить можно выпаяв кварц.

Стабильность без кварца низкая, вот ошибка и набегает.

Пока ты жив, надежда есть.

Link to comment
Share on other sites

Очередное изобретение велосипеда :))) использование микросхемы PCF8583 совместно с контроллером позволит тебе заиметь сразу часы с секундами и сотыми долями, календарь и 1 аппаратный будильник + память на 128байт. Если её подпереть литиевой батарейкой, часы не будут сбиваться при отключении питания.

Контроллер только должен будет считать значение и показать его на индикаторе. Даже если не считывать значение, микросхему можно использовать в качестве источника секундных импульсов.

Учение - изучение правил. Опыт - изучение исключений.

Link to comment
Share on other sites

Химические элементы FANSO EVE Energy для питания беспроводных датчиков
Литиевые батарейки различного химического состава и разных типоразмеров широко используются в беспроводных датчиках систем сбора данных, промышленной автоматики и систем умного дома. И в любом из многочисленных вариантов использования беспроводных датчиков основными требованиями к их работе являются автономность и бесперебойность функционирования.
Главным условием, гарантирующим такую работу, является правильный выбор элемента питания для датчика.

Подробнее >>

Очередное изобретение велосипеда :)))

Ну учиться человек. Зачем критиковать.

>>Не могу разобраться или Таймер/Счетчик настроил не правильно или в коде какая то ошибка. Фьюзы ни какие не трогал. Помогите разобраться.

Ради посмотреть на самый популярный компилятор для AVR на данном сайте(CodeVision) загрузил в него Ваш код и запустил симулятор. Погрешность значительно меньше чем Вы пишете. Поэтому смотрите, как тактируете контроллер. Mazzi думаю прав.

Это сообщение поставляется "как есть", без каких либо гарантий. Автор сообщения не несёт какой либо ответственности

за материальный, либо моральный ущерб причиненный данным сообщением напрямую или косвенно.

Link to comment
Share on other sites

Сравнительное тестирование алкалиновых батареек POWER FLASH 

В потребительском и промышленном сегментах российского рынка химических источников тока имеется множество щелочных (алкалиновых) батареек различных производителей и ценовых категорий. Но велика ли разница в их качестве?

Провели небольшой сравнительный тест, чтобы понять, могут ли источники тока POWER FLASH эффективно заменить продукцию таких известных производителей, как Duracell и GP, вычислить, чему равна стоимость одного часа работы батареек, а также сравнить полученные данные со значениями, указанными в технической документации.  Подробнее>>

Делал вот так.

При использовании внешнего кварцевого резонатора 4 мГц меняем следующие поля:Поле Было Действие Стало

CKDIV8 "0" сбрасываем "1"

SUT1 "1" устанавливаем "0"

SUT0 "0" сбрасываем "1"

CKSEL3 "0" сбрасываем "1"

CKSEL2 "0" сбрасываем "1"

CKSEL1 "1" устанавливаем "0"

"minutes" и "hours" на семисигментниках стали показывать "1" (получилось так 01:01) секунды меняются, минуты не добавляются, и перестали работать кнопки.

Нашел еще один забавный сайтик http://www.engbedded.com/fusecalc/ поставил фьюзы как там было сделано. Теперь микроконтроллер не видится программатором. Завтра пойду покупать новый

Link to comment
Share on other sites

Новые источники питания на DIN-рейку класса High End от MORNSUN
Компания MORNSUN разработала новую линейку ИП с креплением на DIN-рейку класса High End. Линейка состоит из двух семейств однофазных ИП, различающихся функционалом (LIMF и LIHF) и одного семейства на трехфазное напряжение (LITF). У всех этих ИП печатная плата с компонентами имеет лаковое покрытие. Продукция работоспособна в температурном диапазоне -40...85ºС (для однофазных) и -30...70ºС (для трехфазных). Кроме того, однофазные ИП соответствуют требованиям ATEX и могут использоваться во взрывоопасных зонах. Семейство LIMF имеет стандартный функционал (ККМ, сухой контакт реле, 150% перегрузочная способность), а семейство LIHF – максимальный функционал с доп. функциями селективной защиты (SFB) и возможностью дистанционного управления (может заменить серию QUINT от Phoenix Contact).

Подробнее >>

А поставил ты их где? Просто особенность может быть, лог.1 для контроллера это незапрограммированный фьюз, многие программы учитывают сей факт и инвертируют галочку. Отсюда очень часто возникает путаница ставить галку или очистить в программаторе для активации фьюза... Чтобы этого избежать если не уверен точно - надо смотреть в документации какие биты что значат и записать в программаторе сразу слово конфигурации. Контроллер может и рабочий, но переключен на тактирование от внешнего сигнала, и если его подать то будет все нормально.

Учение - изучение правил. Опыт - изучение исключений.

Link to comment
Share on other sites

Очередное изобретение велосипеда smile.gif)) использование микросхемы PCF8583 совместно с контроллером позволит...........

Предложение, Алексей, совершенно не в кассу. Часы реального времени в отдельный чип есть смысл выделять в энергоемких системах, где затраты на коммутацию питания превысят цену этого чипа.

Для мелких и дешевых контроллеров проще и совершенно равноценно по функциональности применение часового кварца и слипа.

Это так, в качестве оффтопа...

Link to comment
Share on other sites

Купил новый микроконтроллер, скажите где какие поставить фьюзы, что-бы он работал от внешнего кварца. Я ставил в прошлый раз галочки в CVAVR напротив SUT1, CKSEL1 микроконтроллер работал не правильно.

Link to comment
Share on other sites

Здравствуйте. Если программатор имеет возможность чтения FUSE-бит, то для начала считайте исходное состояние их. По состоянию бита SPIEN определите логическое соглашение, принятое программатором. И, только потом, выполнить осознанные действия по установке бит в нужное состояние. Для примера приведен рисунок из DS в принятом логическом соглашении.

Edited by akl
Link to comment
Share on other sites

Купил новый микроконтроллер, скажите где какие поставить фьюзы, что-бы он работал от внешнего кварца. Я ставил в прошлый раз галочки в CVAVR напротив SUT1, CKSEL1 микроконтроллер работал не правильно.

вот Вам калькулятор. Я на нем теперь смотрю. Так что 100% рабочий:D

fusecalc.zip

Это сообщение поставляется "как есть", без каких либо гарантий. Автор сообщения не несёт какой либо ответственности

за материальный, либо моральный ущерб причиненный данным сообщением напрямую или косвенно.

Link to comment
Share on other sites

Програматор у меня STK200/300 И пользуюсь я Code Vision AVR. Судя по картинке я поставил галочки напротив CKOUT, SUT1, CKSEL2. Микроконтроллер опять на читаеется и не стирается и не пишется.

Link to comment
Share on other sites

 У одних программаторов установленная галочка обозначает 1, а у других 0.

Посмотри как у меня. И сравни с тем, что у тебя.

post-78645-1273227824,37_thumb.png

Пока ты жив, надежда есть.

Link to comment
Share on other sites

Походу врубил низкую частоту.Или тактирование хрен знат от чего.Если есть ещё чип,посмотри какие у него фузы по умолчание,на твоём прогере.Или через AVR Studio залезть и посмотреть от чего тактируется.Но это если он свяжется и покажет фузы.

У меня была подобная проблема.Через студию не связывался,потом через код вижн связался ничего не программил,кроме фузов.Вот так я и восстановил их.Даже не помню на какой частоте.Программатор аналог STK500.

Link to comment
Share on other sites

Sandor, ещё если хочешь чтоб твои часы ходили более точно,

то используй "правильные" для таких устройств кварцы,

например ближайший к 8МГц будет номинал 8.192МГц или 7.3728МГц,

соответственно нужно будет изменить коэффициент пересчёта таймера...

Электроника это целый океан творчества...

Link to comment
Share on other sites

Програмкой UniProF и програматором "Громова" микроконтроллер определился сбросил фьюзы и микроконтроллер заработал. Попробовал такое проделать с первым микроконтроллером, но ни чего не получилось.

Поставил фьюзы CKDIV8, SUT0, CKSEL0 микроконтроллер заработал от внешнего кварца, но время на часах показывает 01:01 не могу разобраться что за беда

Link to comment
Share on other sites

  • 2 months later...
Sandor, ещё если хочешь чтоб твои часы ходили более точно,

то используй "правильные" для таких устройств кварцы,

например ближайший к 8МГц будет номинал 8.192МГц или 7.3728МГц,

соответственно нужно будет изменить коэффициент пересчёта таймера...

А каким образом подсчитана частота кварца

Link to comment
Share on other sites

Таким, чтобы деление этой частоты на целое число степени двойки дало удобный для часов результат - а именно частоту в 1000гц для подсчета милисекунд, и последующего деления до секунд.

Учение - изучение правил. Опыт - изучение исключений.

Link to comment
Share on other sites

Каким образом были получены эти цифры 8.192МГц или 7.3728МГц, не подбирались же они путем перебора

Поэкспериментировав с числами 32768, 8192000, 7372800 получил:

a2cdf179a86f8737a25e464a9d527b32.png

Я так понял, что-бы часы шли правильно нужен кварц у которого получается такая прогрессия 1, 2, 4, 8, 16, 32, 64, 128....

Link to comment
Share on other sites

Часы будут идти правильно при любой частоте кварца. Просто некоторые частоты легче делить АППАРАТНО, т.е. на степень двойки, используя не программный счетчик а например предделитель таймера!

Учение - изучение правил. Опыт - изучение исключений.

Link to comment
Share on other sites

еще может быть проблема в том, что обработка прерывания длится дольше чем время между ними, вот и получается билибурда :)

чем шире кругозор, тем тупее угол обозрения

Link to comment
Share on other sites

Решил спросить здесь. Подскажите пожалуйста, программирую ATtiny 2313, в описании написано, бит конфиг. SPIEN. Программирую Понипрогом, но в нём нет такого бита. Может он называется ещё по другому? такой контроллер шью впервые.

Link to comment
Share on other sites

Ты что-то путаешь, есть AT90S2313, а есть ATTiny13 более современный его аналог. У старого контроллера могло и не быть такого бита!

Учение - изучение правил. Опыт - изучение исключений.

Link to comment
Share on other sites

у меня нового типа, указано установить BOTLEVEL1 и SPIEN. А в понипроге нету SPIEN

теперь и не читает, что записал до этого. Наверное переключил на кварц, а кварца в проге нету. Обратно никак?

Сделал вот это - Прошивка для микроконтроллера ATtiny2313.

Схема: Цифровой измеритель ёмкости.

http://radioded.ru/content/view/77/49/ , а с прошивкой тупик, как шитиь не знаю пока.

Edited by cam
Link to comment
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Сообщения

    • Впринципеможноеслиписатьправильноиначеневозможноразобратьчтоименнонужно
    • ...давно бы исправила на своём сайте грамматические ошибки:   А по "экспертному мнению с точки зрения электроники" ... вопросы возникают с первых же слов "описания". Как уже замечено, КПД реальных систем не бывает больше 100%. Если эта супертехнологичная начинка получает питание при изгибе лыжи, то сколько энергии останется, чтобы гнуть лыжу для "стабилизации"? Навскидку, чтобы хоть как-то влияло на изгиб лыжи, требуется энергия как минимум порядка единиц джоулей (1 Дж = 1 Н·м=1 кг·м²/с²). Электрически 1 Дж - это ток в 1 ампер, текущий 1 секунду при напряжении в 1 вольт. Ничего даже близко подобной мощности в данной "начинке" не наблюдается. Как только в этой распиленной лыже найдут эти кондесаторы, по их ёмкости можно будет говорить о мощности, имеющейся для "стабилизации".
    • Осталось только этот провод присоединить к корпусу котла. И проверить результат. Даже плохое заземление в данном случае лучше, чем никакое. 
    • @Dr. West , да, очередная чушь собачья. @tolyan_8 , любая система регулирования подразумевает в себе датчик процесса, схему обработки сигнала от датчика и сравнение его показаний с неким заданным значением, систему воздействия на элементы, регулирующие процесс. Датчик кое-как описан в приведенном Вами описании. Других устройств из системы регулирования я не обнаружил. Предположения о способах регулирования. 1. Лыжи за счет пьезоэлектриков накапливают заряд, который через электрод, вторкнутый в зад, при неправильном использовании лыж жжёт задницу катающегося. 2. Купив такие инновационные лыжи по инновационной цене, лыжник никак не сможет себе позволить неправильное их использование. Здесь работает правило "Жаба душит". Вот моё Вам, @tolyan_8 , "экспертное" мнение.
    • Странно. Я понимаю, если бы просто связка неких пьезоэлементов+мозги, которые передают инфу скажем на смарт-браслет. Мощности много тут не надо.  Делать жёстче, и это с учётом массы человека, это ж какая должна быть мощность ?  скорее про аудиофильские провода, которые передают сигнал аж со скоростью 96% от скорости света)
×
×
  • Create New...