roboforum.ru

Технический форум по робототехнике.


Циклический таймер с большими длительностями на AVR

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Re: Циклический таймер с большими длительностями на AVR

Сообщение Vovan » 13 мар 2013, 15:03

Чё-то надоело мне велик изобретать, стока времени потратил, а всё фигня какая-то с ентими AVR, видимо руки не очень ровные :oops: ... Заказал таймер программируемый полностью готовый к эксплуатации (plug&play) с дисплеем, с аккумулятором встроенным и ваще много наворотов и всего за 9 евро. Таким образом поступившись своими принципами, высвободил время, мождь оно и стОит того...
Главное конечно то, что я убедился: на АВР МОЖНО построить таймер, но НЕ НУЖНО :D
Тему можно закрыть, толку в ней ИМХО нет...
_________
Sincerely,
Vovan
Аватара пользователя
Vovan
 
Сообщения: 3340
Зарегистрирован: 05 окт 2005, 12:03
Откуда: Литва
прог. языки: asm

Re: Циклический таймер с большими длительностями на AVR

Сообщение Angel71 » 13 мар 2013, 16:57

помоему ничего сложного. в одном из вариантов просто подсчитаваются переполнения таймера. знаем, сколько раз переполнялся таймер, значит знаем сколько примерно времени прошло. а если нужно более точно уже вычисляется исходя из натикавших чисел в счётчике. а вот высчитывать всякие дни недели, сколько дней в месяце, ... эт муторно.
п.с. кстати кто-то ооооочень сильно хотел начать изучать си.
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

Re: Циклический таймер с большими длительностями на AVR

Сообщение Vovan » 13 мар 2013, 17:37

Да не проблема, всё написал, всё запустил всё работает, но хреного... Мне б точность поиметь хорошую - вот сама цель. А таймер +\- 1 мин в 3-е суток намано получился, даже на тини2313. Только не устраивает меня такое. RTC мастырить влом, как влом и калибровать прогу...
ЗЫ: си, да... никак чё-то... Тока сяду - и сразу встаю - а зачем думаю? кароче если прямо сказать - ищу причины, а не возможности...
_________
Sincerely,
Vovan
Аватара пользователя
Vovan
 
Сообщения: 3340
Зарегистрирован: 05 окт 2005, 12:03
Откуда: Литва
прог. языки: asm

Re: Циклический таймер с большими длительностями на AVR

Сообщение Angel71 » 13 мар 2013, 18:04

как зачем? код намного быстрей и проще писать, громадное количество готового кода, сам код намного наглядней,...
простенький примерчик:
http://reshi-ka.ru/c009napisat-funkciyu-sortirovki-massiva-chisel-po-vozrastaniyu/
Код: Выделить всёРазвернуть
#include "stdafx.h"

void ArrPrint(double *, int);
void Sort(double *, int);
void main()
{
     double mas[10] = {4, 54, 5, -4, 87, 31, 6, 12, 1, 7};  // инициализируем массив
     printf("Vvedenniy massiv \n");
     ArrPrint(mas, 10);
     printf("\nOtsortirovanniy massiv  \n");
     Sort(mas, 10);
     ArrPrint(mas, 10);
     printf("\n");
}

void ArrPrint(double *mas, int size)
{
     for (int i = 0; i < size; i++)
         printf("%.2lf ", mas[i]);
}

void Sort(double *mas, int size) // Функция сортировки массива
{
     double temp;
     for (int i = 0; i < size - 1; i++)
         for (int k = 0; k < size - 1; k++)
             if (mas[k] > mas[k + 1])
             {
                 temp = mas[k];
                 mas[k] = mas[k + 1];
                 mas[k + 1] = temp;
             }
}

сколько времени потратите на написание примерно такого кода (без printf и ArrPrint)? за несколько секунд бегло просмотрев код, очень легко понять, что он делает. это тут "пару" строчек, а будет какой-нибудь проектик побольше? а если вы захотите скопипастить кусочек, допустим только ф-ю Sort? а если вы нашли нужный алгорит, а там работают с другим типом данных? на си несколько секунд и в коде вместо double будет byte или ещё что. очень лёгкая задачка для асма? а если код был для другого процессора и тем более с другой архитектурой? а если вы завтра поймёте, что вам для какого-то проекта будет лучше взять не авр, а допустим стм32? а если появится желание написать для вашего устройства, допустим терминал? с асмом всё гарантированно начнётся с 0.
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

Re: Циклический таймер с большими длительностями на AVR

Сообщение AndreiSk » 13 мар 2013, 18:58

Vovan писал(а):... Заказал таймер программируемый полностью готовый к эксплуатации (plug&play) с дисплеем, с аккумулятором встроенным и ваще много наворотов и всего за 9 евро. ...


Что за таймер то? :)
Аватара пользователя
AndreiSk
 
Сообщения: 2639
Зарегистрирован: 23 апр 2009, 17:03
Откуда: Москва, Самара
прог. языки: C#

Re: Циклический таймер с большими длительностями на AVR

Сообщение Vovan » 13 мар 2013, 19:51

AndreiSk: вот этот http://lemona.lt/index.php?page=item&i_id=93792
Angel71: мне так удобнее :wink:
Ну реально, беру другой проц. открываю д\ш и пофик! всё известно и понятно.
С си ну неудобно мне! как рыба об лёд нервничаю. А с асмом пусть дольше, но как рыба в воде.
Я ж говорю - ищу причины.
Умом прекрасно понимаю: си не только не повредит, но и реально поможет. А сердце - против! Правда справедливости ради нужно сказать, что я пока ни разу не затосковал\не загрустил за асм.компиляторами. Всё что хотелось мне - всегда удавалось (ну не без "танцев" порой).
Бывают проблемы связанные с алгоритмами или архитектурой, но язык тут явно не причём...
_________
Sincerely,
Vovan
Аватара пользователя
Vovan
 
Сообщения: 3340
Зарегистрирован: 05 окт 2005, 12:03
Откуда: Литва
прог. языки: asm

Re: Циклический таймер с большими длительностями на AVR

Сообщение Angel71 » 13 мар 2013, 20:33

что не удобно это понятно, не один день пересиливать себя придётся. на асме же не один день программируете, уже очень привыкли к нему. ещё пример с высокоуровневыми языками и наличием кучи готового кода. всего-то платка на стм32 с прикрученой микрой enc28 и немного кода на шарпе:
Код: Выделить всёРазвернуть
using System;
using System.Collections;
using System.Threading;
using Microsoft.SPOT;
using System.Text;
using Networking;
using Microsoft.SPOT.Hardware;
using System.IO;

namespace NetworkingExample
{
    public class WebServerProgram
    {
        private static string rootDirectory = null;

        public static void Main()
        {
            #region Static IP example
            //Networking.Adapter.IPAddress = new byte[] { 0xc0, 0xa8, 0x01, 0x5f };  //192.168.1.95
            //Networking.Adapter.DnsServer = new byte[] { 0xc0, 0xa8, 0x01, 0xfe };  // 192.168.1.254
            //Networking.Adapter.Gateway = new byte[] { 0xc0, 0xa8, 0x01, 0xfe };  // 192.168.1.254
            //Networking.Adapter.DhcpDisabled = true;
            #endregion

            // http://forums.netduino.com/index.php?/topic/322-experimental-drivers-for-wiznet-based-ethernet-shields/page__view__findpost__p__3170
            // 5C-86-4A-00-00-DD   This is a test MAC address from Secret Labs
            // Note: This MAC address should be Unique, but it should work fine on a local network (as long as there is only one instance running with this MAC)
            Networking.Adapter.Start(new byte[] { 0x5c, 0x86, 0x4a, 0x00, 0x00, 0xde }, "mip", InterfaceProfile.Cerb40_ENC28J60);
           
            Networking.Adapter.OnHttpReceivedPacketEvent += new Adapter.HttpPacketReceivedEventHandler(Adapter_OnHttpReceivedPacketEvent);
            Networking.Adapter.ListenToPort(80);  // Listen on Port 80, the default web server port
           
            // Loop to keep program alive
            while (true) Thread.Sleep(100);
        }

        static void Adapter_OnHttpReceivedPacketEvent(HttpRequest request)
        {
           byte[] webPage = Encoding.UTF8.GetBytes(
             "<html><head><meta http-equiv=\"refresh\" content=\"5\"></head><body><font face=\"verdana\">" +
             "<p>DateTime: " + dt.ToString() + "</p>" +
             "<p>Utc DateTime: " + dtu.ToString() + "</p>" +
             "<p>DayOfWeek: " + dt.DayOfWeek.ToString() + "</p>" +
             "<p>DayOfYear: " + dt.DayOfYear.ToString() + "</p>" +
             "</font></body></html>");
            var s = new System.IO.MemoryStream(webPage);  // substitute a FileStream here when reading from MicroSD
            request.SendResponse(new HttpResponse(s));
        }
    }
}

всё! простенький веб-сервер готов. заходите в браузере на нужный адрес и на страничке появится примерно такой текст
DateTime: 03/13/2013 19:01:00

Utc DateTime: 03/13/2013 17:01:00

DayOfWeek: 3

DayOfYear: 72

на асме же что-то примерно такого уровня будет не танцем с будном, а сплошным кошмаром.
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

Re: Циклический таймер с большими длительностями на AVR

Сообщение Vovan » 14 мар 2013, 00:34

Это надо уже в другую тему _c vs asm_. :wink:
Да тут дело то, собсно роботов косвенно касается. Из-за бесконечных командировок занялся себе замену по дому строить. Пока я дома - сам слежу за всем, а уехал - начинаются звонки "это как? как мне сделать чтобы...? как включить\выключить\переключить? и т.д..." Ну кое что состроил быстренько, а кое что (как например с таймером) стормозил. А пока дома живу охота любимыми делами заняться, а не необходимыми, поэтому махнул рукой - и купил...
_________
Sincerely,
Vovan
Аватара пользователя
Vovan
 
Сообщения: 3340
Зарегистрирован: 05 окт 2005, 12:03
Откуда: Литва
прог. языки: asm

Пред.

Вернуться в Микроконтроллеры

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

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