roboforum.ru

Технический форум по робототехнике.
Текущее время: 21 май 2025, 00:08

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 37 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Часы реального времени на Atmega 16
СообщениеДобавлено: 08 ноя 2012, 19:15 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Первая ссылка ведет на завирусованный сайт, вторая на какую-то хрень без теории, третья на капитана очевидность. Злой ты :D
Моя сцылко лучше :roll:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Часы реального времени на Atmega 16
СообщениеДобавлено: 08 ноя 2012, 19:24 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
:D теория в первом, вирусы онлайн сканеры не нашли, такая шняшко
Цитата:
Подозрение на вирус!
На сайте обнаружены iframe-вставки, ссылающиеся на сомнительные сайты либо обфусицированный код.

норма для сайтов с рекламой. и вообще кто-то крисял, что давно на линух перешел, вроде.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Часы реального времени на Atmega 16
СообщениеДобавлено: 08 ноя 2012, 19:29 
Не в сети

Зарегистрирован: 08 ноя 2012, 01:28
Сообщения: 7
хм спасибо за ссылки, ну вот вроде по аналогии с той что выкладывал сделал . кнопки работают индикация тоже , вот только считать не хочет :(


Вложения:
Atmega16.rar [59.54 КиБ]
Скачиваний: 0
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Часы реального времени на Atmega 16
СообщениеДобавлено: 08 ноя 2012, 19:33 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Под линухом я и есть. :D это так хромиум отреагировал. А файрефох открыл нормально. :pardon:
Код:
Внимание! Обнаружена проблема!
arv.radioliga.com cодержит содержимое из www.simple-devices.ru, являющийся распространителем вредоносного ПО. Ваш компьютер может быть заражен вирусом если вы решите посетить этот сайт.
Google обнаружил, что на ваш компьютер могут быть установлены вредоносные программы, если вы продолжите просмотр этого сайта. Если вы посещали его в прошлом или доверяете ему, вполне возможно, что он недавно был взломан хакерами. Рекомендуется прекратить просмотр и посетить сайт завтра либо перейти на другой сайт.
Мы уже сообщили владельцу сайта www.simple-devices.ru о том, что на его сайте найдено вредоносное ПО. Подробнее о проблемах, обнаруженных на www.simple-devices.ru, можно узнать на странице Google Страница диагностики безопасного просмотра.

Если вы понимаете, что этот сайт может причинить вред вашему компьютеру, все равно продолжать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Часы реального времени на Atmega 16
СообщениеДобавлено: 08 ноя 2012, 20:53 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
"эй, ты туда не ходи, ты сюда ходи, а то снег в башка попадет", всё по честному. :crazy: у меня софт не выругался, значит моей машине с той страницы ничего пакостного не грозит. :wink: самое опасное для моей машины эт флеш, ява + менее пакостно новые дрова от амд и торрент (запретил ему всякие рекламные гадости с офсайта качать и бсод больше не наблюдается).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Часы реального времени на Atmega 16
СообщениеДобавлено: 09 ноя 2012, 01:19 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2009, 13:37
Сообщения: 750
Откуда: Porto Franco "Odessa"
Код:
/*****************************************************
This program was produced by the
CodeWizardAVR V1.24.8d Professional
Automatic Program Generator
© Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date    : 08.11.2012
Author  : F4CG                           
Company : F4CG                           
Comments:


Chip type           : ATmega16
Program type        : Application
Clock frequency     : 8,000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256
*****************************************************/

#include <mega16.h>
#include <delay.h> 
#define digit_display_time 1

unsigned char milliseconds, seconds, ten_seconds, minutes, ten_minutes, hours, ten_hours;
bit button_pressed1, button_pressed2;

// Timer 1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)   
{ milliseconds++;
  TCNT1H=0x00;
  TCNT1L=0x00;

  if (milliseconds >= 100 )
  {
  milliseconds = 0;
  seconds++;
  };
   
  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)
{         
unsigned char digits[10] = {18, 159, 56, 28, 149, 84, 80, 31, 16, 20};     

{
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

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

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x03;
DDRD=0x7C;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

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

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

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

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
}
#asm("sei")

while (1)
      {
      PORTD |=1<<5;                               
      PORTB = digits[ten_minutes];                 
      delay_ms(digit_display_time);             
      PORTD &=~(1<<5);                           
      PORTD |=1<<4;
      PORTB = digits[minutes];
      if (milliseconds >= 50) PORTB &=~(1<<4); else PORTB|=1<<4; 
      delay_ms(digit_display_time);
      PORTD &=~(1<<4);
      PORTD |=1<<3;
      //PORTB = digits[ten_minutes];
      PORTB = digits[ten_seconds];
      delay_ms(digit_display_time);
      PORTD &=~(1<<3);
      PORTD |=1<<6;
      //PORTB = digits[minutes];   
      PORTB = digits[seconds];
      delay_ms(digit_display_time);
      PORTD &=~(1<<6);         
       
    //    seconds = 0;
// ten_seconds++;
           
      if ((PIND & 1<<0) == 0 && button_pressed1 == 0)                   
      {
      delay_ms(1);
      hours++;
      button_pressed1 = 1;
      };   
     
      if ((PIND & 1<<0) == 1) button_pressed1=0;                         
     

     
      if ((PIND & 1<<1) == 0 && button_pressed2 == 0)                     
      {
      delay_ms(1);
      minutes++;
      button_pressed2 = 1;
      };   
     
      if (PIND & 1<<1) button_pressed2=0;
     
       
                 
           
      };
}

_________________
die Wahrheit ist irgendwo da draußen


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Часы реального времени на Atmega 16
СообщениеДобавлено: 12 ноя 2012, 11:37 
Не в сети

Зарегистрирован: 08 ноя 2012, 01:28
Сообщения: 7
Romikgy , спасибо!!!)))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Часы реального времени на Atmega 16
СообщениеДобавлено: 13 ноя 2012, 10:52 
Не в сети
Аватара пользователя

Зарегистрирован: 05 июн 2007, 12:20
Сообщения: 196
Откуда: Киев
прог. языки: C/C++, ASSEMBLER
forum2/topic3537.html

_________________
Глюк по-немецки означает "счастье"...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Часы реального времени на Atmega 16
СообщениеДобавлено: 10 дек 2012, 20:50 
Не в сети

Зарегистрирован: 10 дек 2012, 20:37
Сообщения: 6
Всем привет! Задумал я сделать часы, наверное классическая задача для начинающего. Купил индикатор семисегментный, управлять им научился, все казалось бы хорошо, но...

Столкнулся с большущей проблемой точного измерения времени. В качестве МК выбран ATMega8

1) Куда на ней подключить часовой кварц на 32 кГц? Везде пишут что кварц ставится на TOSC1 и TOSC2, но на атмега8 эти выводы совпадают с XTAL1 и XTAL2, что же делать то? А если у меня МК затактирована от внешнего кварца на этих же ногах например на 20 мгц? Фиг с ним, ладно, выключили внешний кварц, 8 мГц от встроенного хватит, но дальше то что делать?

2)
//Запускаем таймер с коэф. делени 1024. При кварце в 16Мгц он будет переполнятся 61Раз (Таймер на 8 Бит).
TCCR0 = 0b00000101;

???

16 мГц = 16 000 000 Гц, что за коэффициент деления? Как на него делить и что на него делить, допустим частота 8 мГц, какой нужно выбрать коэффициент деления? Почему он будет переполняться 61 раз и за какой период времени он переполнится 61 раз??? Где об этом на нормальном языке можно почитать?

Благодарю за ответы, не дайте моему мозгу сломаться! Пишу на CodeVisionAVR. Ну или кому не сложно объясните как для полного дибила :) Изучаю не для учебы и не для работы, просто для себя.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Часы реального времени на Atmega 16
СообщениеДобавлено: 12 дек 2012, 17:49 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
Если я ничего не путаю - есть 2 варианта.

1 - поставить какой-то высокочастотный кварц, например на 1 МГц и fuse-битами выбрать работу от него. В таймере 1 выбрать при инициализации работу от системного такта с прескалером побольше (читать раздел 16-bit Timer/Counter1) и считать время таймером 1. Часовой кварц не использовать.

2 - поставить 32768, а МК настроить fuse-битами на работу от внутреннего RC. Таймер 2 настроить на тактирование от внешнего кварца 32768 (раздел 8-bit Timer/Counter2 with PWM and Asynchronous Operation)

Ну а дальше исходя из имеющихся частот выбирать - какой ставить prescaler и какой период таймера. В результате обычно стараются получить период 1 герц или другое круглое значение (если присутствует динамическая индикация - то явно повыше нужно, например 1024 Гц, а потом программно делить). Таймер поставить в CTC mode (Modes of operation в том же разделе про таймер), режим хорош тем что период задается 1 раз и дальше все само работает.

Пример: для 1 МГц прескалер 64, период 15625 - получаем 1 Гц. Для варианта с 32768 - ну например прескалер 256, период 128. Для 1024 Гц - ну сам пересчитай, прескалеры там наверное вообще 1 брать, а периодом рулить.

В общем коэффициент деления - это число, на которое делится тактовая частота :) Равен произведению прескалера и периода таймера. С этой частотой будет вызываться обработчик прерывания таймера, в котором ты будешь увеличивать на 1 счетчик секунд (для варианта с 1 Гц) или счетчик своих внутренних тиков для варианта с 1024 Гц, тогда там же переключать активное знакоместо на индикаторе и выводить туда цифру.

Прескалер - это по русски предварительный делитель частоты, см. структурные схемы таймеров все там же - в даташите :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Часы реального времени на Atmega 16
СообщениеДобавлено: 14 дек 2012, 08:51 
Не в сети

Зарегистрирован: 10 дек 2012, 20:37
Сообщения: 6
Спасибо за ответ! С делителями частоты и с тем что откуда берется я разобрался. Подключил часовой кварц, атмега 8 успешно начала тактировать таймер Т2 от часового кварца. Теперь проблема следующая:

выкладываю программу: http://sderni.ru/159105

Вот, на атмеге 48 вообще никак не работает, хоть застрелись, погрешность ровно секунда в минуту, на атмеге 8 работала всю ночь точно такая же программа, все идеально, за 8 часов не набежала ни секундная погрешность. Вот где я не прав???

Часовой кварц сажаю на ноги TOSC1 и TOSC2, у атмег8 и 48 эти ноги совпадают с xtal1 и xtal2, МК тактирую от внутреннего генератора на 8 мГц.

Инициализация и включение таймеров и прерываний доверил CodeVisionAVR его визарду по созданию программы. Вроде бы визард нигде не ошибся, все корректно прописал для atmega48.

Если отключить часовой кварц в данной схеме от atmega8, то часы перестают тикать вообще, никак не тикают, ноль на них остается в течение продолжительного времени и не изменяется. Если в аналогичной схеме на атмега48 отключить кварц, то часы продолжают тикать вообще не понятно от чего и не понятно в каком режиме. Ощущение будто часы и не тактировались изначально от кварца, хотя если задеть xtal1 источником повышенной частоты, часы начинают крутиться довольно быстро.

Все прочие условия абсолютно равные, питание от USB программатора от одного и того же USB порта. Разница лишь в замене микросхемы atmega8 dip на atmega48 SMD. Что за пипец собсно? Где я не прав?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Часы реального времени на Atmega 16
СообщениеДобавлено: 14 дек 2012, 11:26 
Не в сети

Зарегистрирован: 03 янв 2012, 12:55
Сообщения: 3298
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...
фюз делителя на 8 проверили?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Часы реального времени на Atmega 16
СообщениеДобавлено: 14 дек 2012, 11:44 
Не в сети

Зарегистрирован: 10 дек 2012, 20:37
Сообщения: 6
Да, я его и снимал и ставил и ни какого результата. Да и впрочем какая разница работает программа на 1 мгц или на 8 мгц, она слишком простая, всего лишь считает секунды и все, и каждую минуту на атмеге 48 она грешит на секунда. А на атмеге 8 эта же схема и эта же программа в порядке. Да и фьюз делителя на 8 он ведь не влияет на прерывание от таймера, которое на атмеге 48 берется с потолка откуда то, нет кварца - нет прерывания. Для 8й это справедливо, а для 48й нет, что такое не ясно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Часы реального времени на Atmega 16
СообщениеДобавлено: 14 дек 2012, 13:26 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
Так а где версия программы для 48, которая не работает? Я вижу только для меги 8.

Добавлено спустя 1 минуту 55 секунд:
Да, и файлы лучше аттачить прямо к сообщениям, а не класть непонятно куда.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Часы реального времени на Atmega 16
СообщениеДобавлено: 14 дек 2012, 13:32 
Не в сети

Зарегистрирован: 10 дек 2012, 20:37
Сообщения: 6
Да программка точно такая же, код процедур не изменен, только инициализация иная. Ввиду слабого понимания процесса доверил сие визарду CodeVisionAVR. Вот что сгенерировал визард для меги 48

Вложение:
Clk.c [2.96 КиБ]
Скачиваний: 433


Спасибо большое за ответы! Очень хочу разобраться, а то спать нормально не смогу :)

Добавлено спустя 1 минуту 21 секунду:
Может визард ошибся? Или это архитектура меги 48 отличается от меги 8 на столько сильно? Но ведь у меня устойчивое ощущение что не тактирует он, зараза, таймер от кварца, а точнее тактирует невесть от чего вообще.

Добавлено спустя 48 секунд:
Простите за файлы, сейчас разберусь как их аттачить сюда
---

Вот, прикрепил прямо к сообщению


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 37 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO