Перейти к содержанию

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


Рекомендуемые сообщения

Сделал простые часы на микроконтроллере 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)
     {

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

     }
}

Изменено пользователем Sandor
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

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

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

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

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

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

При использовании внешнего кварцевого резонатора 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/ поставил фьюзы как там было сделано. Теперь микроконтроллер не видится программатором. Завтра пойду покупать новый

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

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

Изменено пользователем akl
Ссылка на комментарий
Поделиться на другие сайты

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

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

fusecalc.zip

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

post-78645-1273227824,37_thumb.png

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

  • 2 месяца спустя...
Sandor, ещё если хочешь чтоб твои часы ходили более точно,

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

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

a2cdf179a86f8737a25e464a9d527b32.png

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

Изменено пользователем cam
Ссылка на комментарий
Поделиться на другие сайты

товарищи, может кто умеет компилировать, программа на сайте http://radioded.ru/projects/c_meter/cmcsrc.zip. Прошивка не должна отличаться для старого и нового типа контроллера? Буду признателен.

Изменено пользователем cam
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Согласен, очень криво объяснил. Это работа трёх вольтовой линии, просто на диод шотки сдвоенный, на один анод приходит сигнал напрямую с трансформатора, а на второй через дроссель. Вольт/деление 5 вольт в клетке, тайминг по моему 10 МС. Третья фотография это сигнал на катодах уровень земли ровно по центру экрана. Но все линии по итогу в порядке 3.3 в, 5, в, 12 в и -12 в. Нагрузить все линии не могу сразу ,так как тут же выгорают транзисторы (имеется нагрузка 250 ватт по 10 ампер на каждую линию за исключением-12в), поэтому нагружаю 3.3 вольтовую линию на 10 ампер,  подключаю переменный резистор 50 ватт на 15 ом на 5 вольтовую линию и постепенно довожу до той той картины с перекосом (это гдето  50 ватт общее). По поводу микросхемы, вверху имеется скрин где между импульсами проскакивает мини импульс, если так можно сказать, он проскакивает и на одной  и на второй ноге (7,8). Микросхема не tl 494, а lw4933/abx942.1/c9421646. Далее они приходят на базы транзисторов 945g  коллекторы этих транзисторов соединены с  выводами трансформатора. Просто схема типовая, легче мне кажется просто привести фото самого блока, для тех кто разбирается будет гораздо информативне.  Диод шотки по 12 вольтовой линии был подгоревший, заменил на донора. Приводить скрины не буду что бы не захламлять тему. В итоге, пока все так же, при достижении определенной нагрузки суммарно где-то 50 ватт, появляется этот "выброс и перекос". По этому имеются мысли на два варианта, это микросхема , этот мини импульс между периодами, на низкой нагрузке особо не влияет, но при достижении определенной приводит с самовозбуждению входной цепи и непроизвольному открытию транзистора нижнего плеча. Либо дело в "горячей части", плавающий дефект в обвязке силовых ключей.  Спасибо за ответ.
    • @Gomerchik а вы контролировали как меняется уровень сигнала на А1 ардуины?
    • Спасибо за совет. Автором данного проекта я не являюсь, мне нужно было воссоздать уличный датчик для метеостанции взамен пропавшего(( Из разного найденного в интернете этот проект работает с моей станцией Орегон (спасибо автору). В понедельник попробую последовать Вашему совету. Но все равно куча непоняток  как блин это работает)) Если дело в неправильной отправки команды, то как на это влияет подключение датчика температуры? Если совсем не подключать таймер, то передача идет один раз (как и прописано в программе), станция принимает и отображает, но минут через сколько-то естественно станция уже ни чего не показывает, но с таймером питание полностью не пропадает с ардуинки, но передача сигнала каким-то образом работает по таймеру.  В моем понимании данная команда подается один раз потому, что таймер должен отключать питание МК после передачи сигнала и каждые 43 сек снова подавать питание (так того требует станция).  Ардуино передает показания температуры отключается полностью и 43 секунды мк не работает.  Сейчас у меня питание пока сделано на подпитке от солнечной батареи, но пару пасмурных дней и аккумулятор съедается до отключения(
    • thickman Так и сделаю. Вытащу из бу БП.  Буду знать, как отличить. Благодарю. Заменил транзисторы на IRFB20N50K. Картина стала, совсем другой.  Похоже трудность не в драйвере, на момент подвозбуда, переходные процессы, в нем, завершены. Увеличил затворные резисторы до 50ом, стало немного лучше.  Не понятно, почему верхний ключ греется несколько сильнее. Возможно, стоит посмотреть ток в коллекторе.  Снабберные емкости временно удалил, изменений не произошло.  Замена ТГР на другой, на кольце MSTN-16A-TH, так же, результата не принесла.   irfb20n50k.pdf
    • А что нить из ассортимента активных щупов производства СССР..))
    • Типа такого: https://aliexpress.ru/item/2044864227.html?sku_id=58855020183
×
×
  • Создать...