roboforum.ru

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

Вопросы новичка.

Re: Вопросы новичка.

Dmitry__ » 22 янв 2017, 04:02

dimamichev писал(а):подозрительно медленно - какое то враньё с частотами переключений, с их уменьшением... Симулятор и есть симулятор.

Ну уж ожидать реалтайм мигание светодиодов от симуляторов - это уже слишком. Тем более эмуляцию изменения яркости. Это все надо достраивать в голове. К твоему методу шимировамия тоже есть вопросы, один digitalWrite (1800мкс) чего стоит. Почитай ускорение ардуины
В симуляторе можно проверить правильность алгоритма, остальное - только в железе.

Re: Вопросы новичка.

dimamichev » 22 янв 2017, 09:19

Цитата: "Подключив микропроцессорную плату к осцилографу, и написав цикл digitalWrite(HIGH), и ниже digitalWrite(LOW), на осцилографе обнаружил довольно унылый меандр с частотой 50Гц. Это кошмар. Это крах, подумал я, на фоне требуемых 1Мгц."

Мне кажется автор промахнулся с 50 Гц. Иначе зачем тогда delay со своими миллисекундами. Я как раз в алгоритме псевдошимирования и исходил грубо из 50 Гц (время цикла включился-выключился для любого светодиода - 5мс). Симулятор, кстати, этот скетч тоже проиграл, но вместо 4 ступеней яркости свечения светодиодов я разглядел только 3 - сработал. Запор именно в недостоверности изменения скоростей взаимного переключения светодиодов... Собрал три куска скетчей в один, теперь светодиодный переключатель работает последовательно по трём программам...
Возникла ещё одна мысль про псевдошимирование (и автор статьи её укрепил): digitalWrite(HIGH)запускать в одном цикле, скажем N раз, а digitalWrite(LOW), скажем К раз следом в другом цикле. Соотношение коэффициентов будет регулировать яркость свечения светодиода... :crazy:

Добавлено спустя 10 минут 35 секунд:
Код: Выделить всёРазвернуть
////////////////////////
//
// Arduino UNO
//
////////////////////////
//
// Программа 3х режимного переключателя на 4 светодиода /
// с переменной частотой переключения (задействованы выводы 1-4)/

unsigned int n;
unsigned int k;
unsigned int i;

void setup()
{
   
    for ( n = 1; n <= 4; n++)
    {
        pinMode(n, OUTPUT);
        digitalWrite(n, LOW);
    }
}

void loop()
{
         for ( k = 200; k <= 2000; k=k+200)
    {
            for (n = 1; n <= 4; n++)
         {
            digitalWrite(n, HIGH);
            delay(k);
            digitalWrite(n, LOW);

         }
    }
         for ( k = 100; k <= 1000; k=k+100)
    {
            for (n = 1; n <= 4; n++)
         {
               for (i = 1; i <= k; i=i+1)
            {
                 digitalWrite(1, HIGH);
                 digitalWrite(2, HIGH);
                 digitalWrite(3, HIGH);
                 digitalWrite(4, HIGH);
                   delay(n);
                 digitalWrite(1, LOW);
                 
                 digitalWrite(2, LOW);
                 digitalWrite(3, LOW);
                 digitalWrite(4, LOW);
                   delay(5-n);
            }
         }
    }
     for ( k = 200; k <= 2000; k=k+200)
    {
            for (n = 0; n <= 1; n=n+1)
         {
               for (i = 0; i <= 1; i=i+1)
            {
               if (i==1)
                {
                  digitalWrite(1, HIGH);
                  digitalWrite(3, LOW);
                }
               else
                {
                   digitalWrite(1, LOW);
                   digitalWrite(3, HIGH);
                }   

               if (n==1)
                {
                  digitalWrite(2, HIGH);
                  digitalWrite(4, LOW);
                }
               else
                {
                   digitalWrite(2, LOW);
                   digitalWrite(4, HIGH);
                }   
              delay(k);
             }
         }
    }

}
//
// Конец /
//
////////////////////////

Во какая абра-кадабра получилась...Интересно, что на реальной схеме получится..?

Добавлено спустя 28 минут 28 секунд:
Скачал свежий январский журнал радио. В разделе для начинающих я один со "своей свечой на палке-моталке".. остальные конструкции на микроконтроллерах.., да и большинство в журнале... Блин, как я отстал от остальных...Скоро вообще паять, клепать, резать, клеить перестану...

Re: Вопросы новичка.

Dmitry__ » 22 янв 2017, 15:26

dimamichev писал(а):Мне кажется автор промахнулся с 50 Гц. Иначе зачем тогда delay со своими миллисекундами.

Ну если один digitalWrite() занимает 1800мкс, х2 = 3.6ms = 277 Гц. Это все что можно выжать из digitalWrite. Я тебе дал ссылку на "как правильно делать". Забудь уже про digitalWrite, используй прямое обращение к портам, такая команда компилируется в одну ассемблеровскую команду микроконтроллера. Подсмотри тут как дергать быстро пины:
https://github.com/DmitLil/RF3Sens/blob/master/RF3Sens/Config.h
#define pin_nCS_Mode_OUTPUT pin_nCS_DDR |= (1<<pin_nCS_bit)
#define pin_nCS_LOW pin_nCS_PORT &=~(1<<pin_nCS_bit)
#define pin_nCS_HIGH pin_nCS_PORT |= (1<<pin_nCS_bit)


Добавлено спустя 5 минут 13 секунд:
dimamichev писал(а):Скачал свежий январский журнал радио. В разделе для начинающих я один со "своей свечой на палке-моталке".. остальные конструкции на микроконтроллерах..,

Ко мне вчера так знакомый зашел (инженер). Ему надо было сформировать одиночный импульс из входной серии импульсов. Говорит: "я и так попробовал одновибратор спаять и эдак". В результате я ему показал как это делается на дуине - 10 минут кодинга, потом насыпал ему уну для самообучения и про мини для конечных устройств. Он счастливый ушел домой :)
Все умерло, остались только контроллеры, я это понял еще в 1995 году.

Re: Вопросы новичка.

dimamichev » 22 янв 2017, 15:40

Код: Выделить всёРазвернуть
////////////////////////
//
// Arduino UNO
//
////////////////////////
//
// Программа мигания светодиода /
//

unsigned int n = 0;

void setup()
{
        pinMode(1, OUTPUT);
        digitalWrite(1, LOW);
}

void loop()
{
    for (n = 0; n <= 500; n++)
      {
        digitalWrite(1, HIGH);
      }
    for (n = 0; n <= 500; n++)
      {
         digitalWrite(1, LOW);
      }
}

//
// Конец /
//
////////////////////////


Я всё таки ради интереса насчёт таких долгих выполнений команд...написал и загрузил скетчик. Чисто теоретически светодиод должен мигать раз в пару секунд. В симуляторе просто светит. Добавил вместо 500 раз - 5000, тогда замигал... Может автор преувеличивает долготу реализации команды? С иными способами управления пинов, попробую разобраться, но от обилия информации лёгкое головокружение...

Re: Вопросы новичка.

Dmitry__ » 22 янв 2017, 16:30

Ну я, шутки ради, сейчас попробовал стандартный blink из примеров без delay, получил 140кгц на digitalWrite и 2мгц на прямой записи в порт, все делал на нане. В 13 раз быстрее, Карл!
Да, это значительно быстрее чем 270гц с ссылки на хабр, но значительно медленнее чем правильно.
Да, на меге код будет исполнятся еще медленнее.
Картинко раз:

1.JPG


Картинко дваз:

2.JPG


Код: Выделить всёРазвернуть
void setup() {
  // initialize digital pin 13 as an output.
  pinMode(13, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  //digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
  PORTB |= (1<<5);
  //delay(1000);              // wait for a second

  //digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
  PORTB &= ~(1<<5);
  //delay(1000);              // wait for a second
}


Добавлено спустя 8 минут 18 секунд:
Кста, если считать по клеточкам, первый пример 3.5мкс, второй 125нс. В 28 раз! Безусловный переход на начало цикла скрал весь ужОс digitalWrite.

Добавлено спустя 10 минут 17 секунд:
А еще прикол в том, что на digitalWrite программа занимает 734 байта, а на прямой записи в порт 562 байта :)
Т.к. прямая запись в порт - это одна ассемблерная команда, а digitalWrite - вызов подпрограммы с передачей параметров. Вот така она полиморфизная инкапсуляция в действии :D
Последний раз редактировалось Dmitry__ 22 янв 2017, 16:32, всего редактировалось 1 раз.

Re: Вопросы новичка.

dimamichev » 22 янв 2017, 16:31

Ясно, ясно, согласен.., но понимание порты - пины пока меня не посетило (кипит разум возмущённый). Для светиков частоты запредельные, им для постоянного свечения (с моими глазками) 100 Гц хватит...Вообщем учиться, учиться и ....

Re: Вопросы новичка.

dimamichev » 23 янв 2017, 14:34

Dmitry__ писал(а): Вот така она полиморфизная инкапсуляция в действии :D


Уж очень мне мудрёно... Просто за взаимопонимание расплачиваются скоростью исполнения и объёмом ресурсов ?

Re: Вопросы новичка.

Dmitry__ » 25 янв 2017, 02:13

dimamichev писал(а):Просто за взаимопонимание расплачиваются скоростью исполнения и объёмом ресурсов ?

Да, если простейшую blink-алку в 700 байт для мини про откомпилить для платы мега, то код станет уже 1200 байт и соотв. еще медленнее.

Re: Вопросы новичка.

Madf » 25 янв 2017, 13:38

dimamichev, выкиньте вы все эти Дуни направления и используйте просто: Bascom + программатор (через ISP).
Вначале на несколько граблей наступите, зато дальше легко будет.
Будите уметь разбираться в железе и иметь полный контроль над ситуацией, а не ждать, когда кто-то для дуни напишет очередную библиотеку.

ps: Bascom где-то в сети есть левак, а так он денег стоит. :roll:

зы2:
еще медленнее

Ну это как оптимизировать, если уж так важно и нужно дергать ногой, то проще таймер на это задействовать (ШИМом). :D

Re: Вопросы новичка.

dimamichev » 25 янв 2017, 14:38

Как же я так просто брошу?.. Только я заказал плату и сопутствующие.., только я написал несколько скетчей для кубика, игры красный-зелёный?,переключателя гирлянд,светодиодных "песочных часов".., только отсимулировал... и бац!пробовать ещё!(надо хоть платку дождаться и в железе глянуть...). А хотя, если одно другому не мешает можно окончательно в голове кашу заварить.

Re: Вопросы новичка.

Dmitry__ » 25 янв 2017, 15:04

Не слушай Madf, это вредные советы :)
Бейсик - путь в никуда :P . Тем более Bascom такая же обертка как и arduino ide, только надо ее воровать. Замечательная альтернатива.
С arduino ide потом легко перейти на чистый си и make. Лично я чаще дуины использую как готовые платы, программы пишу на чистом си или асм.

Re: Вопросы новичка.

Madf » 25 янв 2017, 15:46

dimamichev писал(а):... и бац!пробовать ещё!

Железки все теже, только работать с ними напрямую, без всяких там дуня-загрузчиков.

Dmitry__ писал(а):Бейсик - путь в никуда :P.

Ошибаешься, вечный спор про "яйца..".

Dmitry__ писал(а):Тем более Bascom такая же обертка как и arduino ide, только надо ее воровать. Замечательная альтернатива.

Нет, тут бэйсик упрощает и убыстряет процесс программирования в разы. Кстати код генериться весьма неплохо, если недостаточно, то можно без проблем, там же начать писать ASM вставки (что в разы круче любого Си).
Про воровать, очень много народа как-то живут, если задалбываются в чем-то с фиксами/версиями, то просто задумываются о покупке (я лично сразу купил и не жалею).

Dmitry__ писал(а):С arduino ide потом легко перейти на чистый си и make. Лично я чаще дуины использую как готовые платы, программы пишу на чистом си или асм.

Ну тут главное не мешать мух с котлетами, дуня Си ничего общего не имеет с тем, о чем ты говоришь. Если цель изцчить Си - да, дуня проект ближе всего, но всё равно он далек от действительности (окружение), всё равно переходя на обычную среду разработки, придется дальше обучаться...обучаться и обучаться. :oops: И от покупки программатора или его клона с коленок - не освобождает.

зы: Дим, ты кстати где-то тут на форуме хвастал, что много времени убил с разбирательством про супер экономичный MSP430...вот может темку/обучалку откроешь? Светиком помигать, IDE настроить...) А то у меня желание/интерес потихоньку просыпается, но с открытием их док, каждый раз возникает :bad: А то часы лежат, программатор от них, думал купить какой0нить простенький наборчик (или собрать) и приступить к изучению.

Re: Вопросы новичка.

Dmitry__ » 25 янв 2017, 16:23

Madf писал(а):Нет, тут бэйсик упрощает и убыстряет процесс программирования в разы.

Да ты просто не пробовал arduino ide.
Madf писал(а):Про воровать, очень много народа как-то живут, если задалбываются в чем-то с фиксами/версиями, то просто задумываются о покупке

Хорошо, как быть линух юзерам? Wine не предлагать.

Madf писал(а):Ну тут главное не мешать мух с котлетами, дуня Си ничего общего не имеет с тем, о чем ты говоришь.

Код ардуины элементарно компилится чистым gcc. Просто добавляешь это
Madf писал(а):зы: Дим, ты кстати где-то тут на форуме хвастал, что много времени убил с разбирательством про супер экономичный MSP430...вот может темку/обучалку откроешь?

Ну создай тему, всегда тебе помогу. Создавать самому обучалки - дело неблагодарное, Шапокляк в курсе... :)
А, была тема, гуглить по cc430f5137
http://roboforum.ru/forum2/topic14361.html

Re: Вопросы новичка.

Madf » 25 янв 2017, 16:44

Dmitry__ писал(а):Хорошо, как быть линух юзерам? Wine не предлагать.

Честно? Я вообще не понимаю как люди на ней живут, ладно там Маковцы...но при всех хвалениях, как не подойдешь к НиксЮзерам, спросишь их, а они только ноют. Система без такого развития, да надежна, да под конкретные задачи...в общем опять тема "яиц", ну нафиг... :P


Dmitry__ писал(а):Ну создай тему, всегда тебе помогу. Создавать самому обучалки - дело неблагодарное, Шапокляк в курсе... :)
А, была тема, гуглить по cc430f5137
http://roboforum.ru/forum2/topic14361.html

Окей, понял, просто думал совета спросить про, что подешевле купить/поискать, чтобы было с RF. А то тут начал думать как для разминки часы сделать в ванную (IP 99), оказалось МК с 0.8мА (в спячке) - не крута, а брать другие не захотелось, ибо надо встроенное RTC отдельным кварцем на 1Гц, а дальше просыпаться, что-то быстро выполнять и опять в спячку. В общем грусть - печаль.

Re: Вопросы новичка.

Dmitry__ » 25 янв 2017, 17:16

Madf писал(а):Честно? Я вообще не понимаю как люди на ней живут

Честно? Я не понимаю как люди сидят на вендах. Это ведь даже из-за грязи противно :D

Madf писал(а):Окей, понял, просто думал совета спросить про, что подешевле купить/поискать, чтобы было с RF.

Я везде тыкаю это. Обходятся по 600р. Написал для них загрузчик по эфиру. Смена программы делается включением питания устройства при включенной рядом точке доступа с прошивкой для загрузки.
Если бы я вкурил ардуины раньше, то так бы сейчас (на msp430) не делал. Тебе советую ардуины мини и зоопарк rf модулей типа rfm12, rfm23, nrf24. Потребление библиотеки jeelib более чем достаточно:
http://jeelabs.org/tag/lowpower/

Madf писал(а):В общем грусть - печаль.

Да ну, брось грустить, пробуй дуины...

Добавлено спустя 3 минуты 50 секунд:
Бери часы реального времени, ардуину мини за 100р., и rfm12, или любой другой модуль.
Часы прикручиваются за 5 минут кодом из примера. Все остальное тоже займет мало времени.


Rambler\'s Top100 Mail.ru counter