Этюды для начинающих: blink и без delay, и без millis

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Загляните в пост #87

Иначе в даташите

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

alexbmd пишет:

TCCR1A = 0x40; 
    TCCR1B = 0x09;  

подскажите плиз где почитать про все эти команды/значения, что означают все эти буквы/цифры ?

Если Вас интересует UNO/Nano, то вот здесь. Если Мега, то вот здесь.

alexbmd
Offline
Зарегистрирован: 15.01.2016

ua6em

"На мониторе видим
TCCR1A = b1"

----

смотрю на первую строчку на картинке (TCCR1А) и ни как не могу понять как b1 (из монитора) у нас трансформировалось в PWM to 255(на картинкке). там же нету (на картинке) никаких b1. как читать эти картинки ?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

alexbmd пишет:

ни как не могу понять

Читайте то, что я Вам сказал.

alexbmd
Offline
Зарегистрирован: 15.01.2016

ЕвгенийП

читаю и методом угадайки я понимаю что TCCR1A = b1 равно mode1 для WGM13/12/11/10 причем 13/12 уже не относятся к 1А, но где логика ? почему b1 не равно например COM1A0=1 ?

далее, TCCR1B=b11 опять же подбором добиваемся что CS12/11/10 =011 и это делитель 64. но почему b11 это не mode11 для WGM13/12 ?

alexbmd
Offline
Зарегистрирован: 15.01.2016

0x40 нашел что это EEPROM register и не совпадает с переключением как вы написали

0x09 нашел что это toggle pin у вас же это CTC режим

белеберда какаято :(

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Значит так, про всякие bxxx - не ко мне, Вы взяли их с какой-то картинки, которую постил не я и пусть их автор и комментирует.

Вот это же,

alexbmd пишет:

0x40 нашел что это EEPROM register и не совпадает с переключением как вы написали

0x09 нашел что это toggle pin у вас же это CTC режим

белеберда какаято :(

как я понимаю Вы роетесь в моём примере

TCCR1A = 0x40; 
TCCR1B = 0x09;  

Правильно?

Значит, перестаньте придумывать сложности. В данном случае 0x40 и 0x09 - просто числа. Числа и ничего другого. Я присваиваю их соответсвующим регистрам. Какие биты при этом 1, а какие 0 - так распишете эти числа в двоичной системе и увидите.

0x40 - 0100 0000
0x09 - 0000 1001

Вот и смотрите теперь какие биты регистров я взвожу.

alexbmd
Offline
Зарегистрирован: 15.01.2016

у вас опечатка 0x40 - 0010 1000

получается D9 мы ничего не делаем а D10 Clear OC1B on Compare Match when upcounting. Set OC1B on Compare Match when downcounting. как мы тогда переключаем D9 ?

uint8_t prescaler = PRESCALER_1024;

у нас определен только enum Prescaler. что означает prescaler и uint8_t ?

TCCR1B = 0x08 | prescaler; 

b08 = 0000 1000 а что означает  | prescaler ? сам прескалер при этом 5

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

p19cc05lj01btoo91lj75i0qg8e.gif

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

alexbmd пишет:

у вас опечатка 0x40 - 0010 1000

получается D9 мы ничего не делаем а D10 Clear OC1B on Compare Match when upcounting. Set OC1B on Compare Match when downcounting. как мы тогда переключаем D9 ?

uint8_t prescaler = PRESCALER_1024;

у нас определен только enum Prescaler. что означает prescaler и uint8_t ?

TCCR1B = 0x08 | prescaler; 

b08 = 0000 1000 а что означает  | prescaler ? сам прескалер при этом 5

alexbmd пишет:

у вас опечатка 0x40 - 0010 1000

Не придумывайте 8-4-2-1 8-4-2-1 то-есть 0x40 = 0-1-0-0 0-0-0-0

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

alexbmd пишет:

у вас опечатка 0x40 - 0010 1000

Да, нет, скорее у Вас

0x40 - 0100 0000

alexbmd пишет:

у нас определен только enum Prescaler. что означает prescaler и uint8_t ?

TCCR1B = 0x08 | prescaler; 

b08 = 0000 1000 а что означает  | prescaler ? сам прескалер при этом 5

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

enum Prescalers {
	PRESCALER_1 = 1, PRESCALER_8 = 2, PRESCALER_64 = 3, PRESCALER_256 = 4, PRESCALER_1024 = 5
};

void setup() {
	uint8_t prescaler = PRESCALER_1024;
	uint16_t topValue = 65535;
	pinMode(9, OUTPUT);
	TCCR1A = 0x40;			// Инвертирование пина 9 по сравнению
	TCCR1B = 0x08 | prescaler;	// Установить СТС режим и делитель частоты
	OCR1A = topValue;		// установить TOP равным topValue
}

void loop() {}

то переменная определена в строке 6 и проинициализирована значением PRESCALER_1024.

 

 

alexbmd
Offline
Зарегистрирован: 15.01.2016

calc от винды и http://www.rapidtables.com/convert/number/decimal-to-binary.htm

говорят что 40 в двоичной будет 101000. в чем загадка ?

 

да сори я говорю про этот пример, мы определяем enum, вроде как массив, потом uint8_t что это ? мы не инициализировали что это переменная или клас  ?

prescaler это очевидно новая переменая в которую пишем 5 ?

 

 

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

40 и 0x40 - это разное, вы, наверное, в десятичной системе вводили.

alexbmd
Offline
Зарегистрирован: 15.01.2016

Yarik.Yar да точно сори там хексы. спасибо. с этим ясно осталось с перемеными разобраться

Pyotr
Offline
Зарегистрирован: 12.03.2014

alexbmd пишет:

ЕвгенийП

читаю и методом угадайки я понимаю что TCCR1A = b1 равно mode1 для WGM13/12/11/10 причем 13/12 уже не относятся к 1А, но где логика ? почему b1 не равно например COM1A0=1 ?

далее, TCCR1B=b11 опять же подбором добиваемся что CS12/11/10 =011 и это делитель 64. но почему b11 это не mode11 для WGM13/12 ?

Дополнил  пост #87

alexbmd
Offline
Зарегистрирован: 15.01.2016

ЕвгенийП пишет:

OCR1A = 0;  // установить TOP равным 0

 

вроде все понял только не вижу где мы указали что у нас будет именно TOP а не MAX или BOTTOM ? 

foxsto
Offline
Зарегистрирован: 28.03.2017

Привет, подскажи, таймер на 9 ноге я запустил 124 Гц

теперь как мне сделать чтобы дисплей остальная приблуда в этом такте работала, какую штуку почитать или в какую сторону копать у меня 2 дисплея

но красных ног 3

мне получается теперь другие ноги с девятой сравнивать через выражение?

JasKo
Offline
Зарегистрирован: 21.11.2015

foxsto пишет:

Привет, подскажи, таймер на 9 ноге я запустил 124 Гц

теперь как мне сделать чтобы дисплей остальная приблуда в этом такте работала, какую штуку почитать или в какую сторону копать у меня 2 дисплея

 

 

 

Еща раз даю ссылку к прочтению и копанию http://arduino.ru/forum/programmirovanie/dva-8-mi-segmentnykh-indikatorov?page=2

16th1985@gmail.com
Offline
Зарегистрирован: 19.08.2014

Спасибо большое за потраченное время на написание подобного,ваше время прошло не зря (несколько десятков байт я загнал в свою  память). читал несколько ваших статей,интересно очень (а жена уже спать гонит),но понял, что если это для начинающих то мне надо в группу еще ниже хотя из названия можно понять,что ниже мне некуда.Ну что поделать будем вникать.Спасибо

ilyash550
Offline
Зарегистрирован: 26.06.2017

Добрый вечер. Не знаю какая у вас информация касательно новичков, но либо я дурак либо лыжи не едут. Я - новичек, на ардуино пишу пару дней и считаю, что как для новичка я знаю больше чем меньше и тем не менее не понял ничего из ниженаписанного. Я дилетант в програмировании (у меня нет спец образования) и все что я знаю о програмировании это первая часть самоучителя по java. Теперь больше конкретики.

void setup() { // "()" подсказывают мне что это функция, void - ничего не возвращает, точно функция.

pinMode(9, OUTPUT); // в аргументах функции написано что-то капсом, значит константа. Вот примерно так я мыслю, если грубо. Я прочитал на оффсайте описание всех функций и некоторых функций из некоторых библиотек, так что я более менее в теме.

TCCR1A = 0x40; // а это еще что за херня? TCCR1A - это константа? Но их же вроде нельзя переопределять, на то они и константы. 0x40 а это как понимать? Это точно для ардуинки? Откуда я вообще должен знать что это? Похоже на шестнадцатеричную запись, но это не точно.

TCCR1B = 0x09; // зе сейм

OCR1A = 0; // зе сейм

}

Погуглив 2 для я написал игру, с блэкджеком и анимациями. Код на столько говеный но писал я его сам. После прочтения этой статьи у меня началась дипрессия.
Приму помощь в виде объяснений или рецептов на расширяющие сознание препараты. А теберь без шуток. Я действительно ОЧЕНЬ хочу понять как это работает и что значит написанное. Посоветуйте материал специализированный для ардуинки.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ilyash550

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

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

ilyash550 пишет:
TCCR1A - это константа? Но их же вроде нельзя переопределять, на то они и константы.

Вы путаете константу с макроподстановкой. Костанта, - это элемент данных, описанный с использованием модификатора const

const int velocity = 120; // скорость каретки

здесь описана константа velocity типа int со значением 120. У константы всегда есть тип, и она используется как единый элемент данных. Например:

const int velocity = 120 + 10; // скорость каретки

Всегда и везде будет использоваться именно как целое число 130, а не что-то другое.

То же. что Вы называете константой (то, что вводится директивой #define) на самом деле является макроподстановкой. Она подставляется в код как есть. У неё нет типа, просто подставляется как есть.

#define  KAKA 8 // комментарий
#define  MUMU 321;
#define KUKU  KAKA + 4
#define KIS_KIS (KAKA + KUKU)

Здесь очень важный момент, который Вы должны чётко уяснить - лексема после слова define является именем постановки, а всё, что справа от лексемы, до начала комментария или (если его нет, то до конца строки). подставляется в код как есть без обработки (если не считать обработкой такие же подстановки). Стало быть использовать подстановку можно везде, где можно использовать её правую часть. Например:

#define  KAKA 8 // комментарий

// KAKA допустимо везде, где можно использовать число 8
int a = KAKA;
a += KAKA;
a = KAKA / 2;
a = 128 / KAKA;

//////////////////////////////////////////////

#define  MUMU 321;

// MUMU допустимо везде, где допустимо 321;
int z = MUMU   // Всё равно, что int z = 321;
z += MUMU // Всё равно, что z += 321;
z = MUMU * 2; // ФИГВАМ! получается z = 321; * 2; - синтаксическая ошибка

//////////////////////////////////////////////

// а вот теперь грабли, которых не понимают даже некоторые из местных форумных "гуру"
// Разберитесь с приколом в последних двух строках

#define KAKA 8+4
int b = KAKA; // Всё равно, что int b = 8+4; --- b станет равно 12
int c = KAKA * 2; // Всё равно, что int c = 8+4 * 2; --- b станет равно 16
int d = 2 * KAKA; // Всё равно, что int d = 2 * 8+4; --- d станет равно 20

// Ну и наконец про "изменения", которые Вас смутили, смотрите
int n;
#define KAKA n
KAKA = 23; // Всё равно, что написать n = 23; - совершенно законная конструкция

Понятно теперь, что TCCR1A вовсе не константа?

Там есть ещё тонкости, типа макроподстановок с параметрами, но для начала чётко поймите то, что описано. 

ilyash550
Offline
Зарегистрирован: 26.06.2017

Во-первых, спасибо за оперативность.
Во-вторых, странно, на java все константы пишутся капсом, если не ошибаюсь, но видимо java это java.
Про макрододстановки слышал. То, что TCCR1A это не константа, вы меня убедили. То есть TCCR1A это макрододстановка? Тогда вы меня еще больше запутали)

TCCR1A = 0x40; // если TCCR1A это макроподстановка, то есть это даже не переменая, а число, как ей можно присваивать значение 0x40, и как понять что значит эта запись, я про 0x40.
TCCR1B = 0x09;

OCR1A = 0;

Могли бы вы, пожалуйста, максимально подробно объяснить эти 3 строчки.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

это регистры таймера 1 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ilyash550 пишет:
TCCR1A это макроподстановка, то есть это даже не переменая, а число

Кто Вам сказал, что это число? Это может быть всё, что угодно. Посмотрите строки 28-31 моего примера. В них KAKA - вполне себе переменная. Разберитесь с этими строками. TCCR1A определена принципиально также.

И вообще при подстановке может подставлять всё, что угодно, как есть. Например:

// определяем новое название цикла while
#define ZiklPokaVernoUslovie  while

// А теперь его используем
int n = 0;
ZiklPokaVernoUslovie (n < 100) {
   // la-la-la
   n++;
}

Это совершеннон нормальный цикл, который выполнится 100 раз.

ilyash550 пишет:

как понять что значит эта запись, я про 0x40.

TCCR1B = 0x09; OCR1A = 0; Могли бы вы, пожалуйста, максимально подробно объяснить эти 3 строчки.

Что и зачем пишется в регистры типа TCCR1B, OCR1A и т.п. описано в документации контроллера, читайте.

 

ilyash550
Offline
Зарегистрирован: 26.06.2017

Кажется я нашел способ обойти мою проблему с пониманием, по крайней мере пока. Более высокоуровневое прогоамирование, а именно библиотека MsTimer2. По сути интерфейс работы стэтим таймером.

ilyash550
Offline
Зарегистрирован: 26.06.2017

Еще больше конкретики. У меня есть кусок кода (часть игры, в которой есть маленькая падающая коробка и ее нужно ловить другой коробкой), в котором "коробка падает вниз" в пределах одного символа. Изначально я писал на millis(), но специально переписал сейчас на прерывании именно этот кусок. Я хочу чтобы с каждым проходом (после окончательного падения "коробки") скорость ее "полета" в следующем проходе увеличивалась. Как мне это сделать? По идеи мне нужно менять первый параметр фунции MsTimer2::set(), но я не понимаю как это сделать. Видео с игровым процессом и часть кода.

https://www.youtube.com/watch?v=PVvxEj8DfHk

#include <LiquidCrystal.h>
#include <MsTimer2.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


int xbox; // x координата падающей коробки
byte empty = B00000;
byte full = B01110;
int chars_number=1;  // номер символа в памяти дисплея
byte one;
byte two;
byte three;
byte four;
byte five;
byte six;
byte seven;
byte eight;
boolean boxex = 0; // does box exist on the screen? 
int i=0;


void down(){

if (boxex==0){
  xbox=random(15);
  boxex=1;
}


one = empty;
two = empty;
three = empty;
four = empty;
five = empty;
six = empty;
seven = empty;
eight = empty;


switch (i){
  case 0: one=full;
  break;
  case 1: two=full, one=full;
  break;
  case 2: three=full, two=full, one=full;
  break;
  case 3: four=full, three=full, two=full ;
  break;
  case 4: five=full, four=full, three=full;
  break;
  case 5: six=full, five=full, four=full;
  break;
  case 6: seven=full, six=full, five=full;
  break;
  case 7: eight=full, seven=full, six=full;
  break;
  case 8: eight=full, seven=full; 
  break;
  case 9: eight=full; 
  break;
}
 
 byte tar[8]={
  one,
  two,
  three,
  four,
  five,
  six,
  seven,
  eight
};

    lcd.createChar(chars_number, tar);
    lcd.createChar(chars_number, tar);
    lcd.setCursor(xbox,0);
    lcd.write(chars_number);
    
    i++; 
     
    
    if (i>10){
       i=0;
       lcd.setCursor(xbox,0);
       lcd.print(" ");
       boxex=0;
    }
}


void setup() {
 lcd.begin(16, 2);
 MsTimer2::set(200, down);
 MsTimer2::start();
}
  
  

void loop() {
  

}

 

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

блин, ну шо за тупняк?

if (событие_падения_коробки == 1) {скорость_падения_коробки = скорость_падения_коробки + 100500;}

и, пофиг, что у тебя делает (событие_падения_коробки == 1) - прерывание или непрерывание

ilyash550
Offline
Зарегистрирован: 26.06.2017

Не все так просто, но со скоростью я разобрался. Теперь не могу вклинить этот кусок кода в остальной......

ilyash550
Offline
Зарегистрирован: 26.06.2017

Я дурной, код мой говно, на кол меня. Буду все переписывать с нуля, сори за флуд. 

GAMON
Offline
Зарегистрирован: 03.07.2017

  to #19

 

  Какой же он незамутненный; на экране осциллографа видны скачки от прерываний. Фронты, положим,  стоят - но в целом генерация не монотонная. 

b707
Offline
Зарегистрирован: 26.05.2017

В порядке размышления... я бы убрал из заголовка темы упоминание про новичков. Эта тема не для них.

ИМХО, людям, которые задают вопросы что такое 0х40 - не просто бесполезно, а скорее вредно изучать прерывания. Это как пытаться понять тригонометрию, не зная арифметики. Сначала надо набрать базу, научиться мыслить алгоритмами и писать грамотный код на языке высокого уровня, а потом уже переходить к низкоуровневым инструкциям. Новичок должен понимать, что прерывания - мощный, но в то же время опасный и плохо переносимый инструмент. Пользоваться ими стоит, имхо, только если задачу невозможно решить более простыми методами. Подавляющее число задач. с которыми люди приходят на форум - решается без прерываний. Писать блинк на прерываниях - это ровно то же самое, как описанное в соседней теме неуместное применение  битового сдвига вместо умножения на 2.

Написал потому. что из вопросов некоторых складывается впечатление, что люди восприняли этот код как замену "сложным и непонятным millis()" :) - а это бред

 

Artem748159263
Offline
Зарегистрирован: 17.07.2017

Всем привет. Недавно начал изучать Ардуино и столкунулся с таким вопросом. Есть скетч вот он 

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
 
  This example code is in the public domain.
 */
 
// Pin 7 has an LED connected on most Arduino boards.
// give it a name:
int led = 7;
 
// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);     
}
 
// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(1);               // wait for a second
  +
  
}
 И вообщем такой вопрос. Тут частота 500 ГЦ если я не ошибабсь частота мигания светодиода и мне нужно сделать так чтобы частота была уже 2 МГЦ мигания светодиода все вывожу на осцилограф. Очень надо) Спасибо.
Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Ардуиновские функции слишком медленные. 2МГц - это период 500 наносекунд (0,5 микросекунды). Поэтому только аппаратные таймеры и только прямое управление портами. Скажем так, "ардуино" на этом заканчивается. Это настраивается и управляется через регистры микроконтроллера.

sim31
sim31 аватар
Offline
Зарегистрирован: 26.07.2017

Кстати, вместо delay() можно использовать функцию Sleep и спать в режиме Idle. В Ардуине таймер0 переполняется каждые 8 мс, и сделав в цикле сон, ножно проспать нужное время, экономя энергию. У меня так микроконтроллер потребляет 0.2 мА, суть просто в замене команды dela(1000) на MySleep(1000) где в процедуре контроллер спит заданное время.

sim31
sim31 аватар
Offline
Зарегистрирован: 26.07.2017

Artem748159263 пишет:
И вообщем такой вопрос. Тут частота 500 ГЦ если я не ошибабсь частота мигания светодиода и мне нужно сделать так чтобы частота была уже 2 МГЦ мигания светодиода все вывожу на осцилограф. Очень надо) Спасибо

Поиском сразу находятся 3 качественные статьи

https://yandex.ru/yandsearch?&clid=2186620&text=%D1%83%D1%81%D0%BA%D0%B0...

...
digitalWrite() было 1800мкс, стало 0,2мкс
digitalRead() было 1900мкс, стало 0,2мкс

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sim31 пишет:

Поиском сразу находятся 3 качественные статьи

Зачем так далеко ходить, когда прямо на этом форуме написано как 8МГц получить?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

sim31 пишет:

Поиском сразу находятся 3 качественные статьи

https://yandex.ru/yandsearch?&clid=2186620&text=%D1%83%D1%81%D0%BA%D0%B0...

...
digitalWrite() было 1800мкс, стало 0,2мкс
digitalRead() было 1900мкс, стало 0,2мкс

Ну качество той статьи, откуда взят этот чудесный фрагмент мягко говоря очень низкое. Для одного из "ведущих конструкторов на одном крупном военном Зеленоградском заводе" стыдно гнать такую дикую пургу -я про  команды digitalWrite/Read.  1800 мкс это  нонсенс,   эти команды выполняются  4.. 5мкс -максимум.

sim31
sim31 аватар
Offline
Зарегистрирован: 26.07.2017

Нормальная статья для того чтобы разбираться, рецепт из статьи вот:

PORTA=B00001010 (битовая, ножки 23 и 25 — HIGH)

Всё правильно указано, примеры кода рабочие. Ведущий конструктор не обязан быть электронщиком, он скорее механик, которому досталась сопутствующая задача, как говорится "и чтец и жнец и на дуде игрец":

>>>я конструктор, больше по черчению деталек спец.

>>> ... Я работаю одним из ведущих конструкторов на одном крупном военном Зеленоградском заводе, и в данный момент веду проект по разработке метрологического средства измерения. В данной задаче существует бесконечное множество проблем, которые требуют индивидуального решения. Одной из таких задач является управление шаговым двигателем без шумов и с шагом не 1.8 градуса, как сказано в документации шагового двигателя, а до 0.0001 градуса. Казалось бы, задача сложна и нерешабельна, но, повозившись немного со схемами управления, пришёл к выводу, что всё реально и возможно.

И задачу он решил или очень близко приблизился к решению и поделился опытом, жаль что статей больше не писал:

>>>1) Шумы редуктора для нас недопустимы. Проверяли редуктор — не подходит.
Более конкретно — подвешенный к жесткой пружине редуктор вибрирует при работе на 10-15 микрон, а на шаговом двигателе при нормальной работе удалось добиться вибрации порядка 600 нанометров.
2) Второй минус редуктора — наличие люфта. Люфт порядка 1градуса.
3) Ну и, конечно, невозможность точного позиционирования редуктора. На него подал 12В, он крутится. А на сколько он провернулся — зависит от точности калибровки, от его разгона, он смазки, от силы, противодействующей кручению. Эти проблемы можно решить, установив сверхточный датчик угла поворота с дроблением до 0.0001 градуса, но это нереально дорогое решение.

>>> Для одного из "ведущих конструкторов на одном крупном военном Зеленоградском заводе" стыдно гнать такую дикую пургу

Отношение к коллегам что старались и писали статью подробную строго как в анекдоте бородатом:

Американский форум. Задаёшь вопрос, потом тебе отвечают.
Израильский форум. Задаёшь вопрос, потом тебе задают вопрос.
Русский форум. Задаёшь вопрос, потом тебе долго рассказывают, какой ты мудак.

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

sim31, ну а какое должно быть отношение? Если он серьёзный инженер  в  своих виброизмерениях -так пусть пишет про них, а не  про то, в чём сам ничего не понимает. Это же не все его пёрлы. Дальше про ШИМ читали? Он тупо вогнал в цикл запись в порт. И сияя счастьем говорит о получившимся  ШИМ 19кГц. -Это открытие на уровне новичка, который ещё вчера мигал светодиодом, а сегодня научился команде "For".

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

sim31 пишет:

Отношение к коллегам что старались и писали статью подробную строго как в анекдоте бородатом:

Американский форум. Задаёшь вопрос, потом тебе отвечают.
Израильский форум. Задаёшь вопрос, потом тебе задают вопрос.
Русский форум. Задаёшь вопрос, потом тебе долго рассказывают, какой ты мудак.

опубликуй эту статью на https://forum.arduino.cc/

и ты получишь бан в ответ на предложение использовать https://translate.google.com для перевода непонятного им с понятного мне.

расскажи им, как тут угнетают калег.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

dimax пишет:

Ну качество той статьи, откуда взят этот чудесный фрагмент мягко говоря очень низкое. Для одного из "ведущих конструкторов на одном крупном военном Зеленоградском заводе" стыдно гнать такую дикую пургу -я про  команды digitalWrite/Read.  1800 мкс это  нонсенс,   эти команды выполняются  4.. 5мкс -максимум.

Да там и про стандартный ШИМ сказано, что он 50 Гц. Вернее, даже так, реально автор говорим и максимально высокочастотном меандре, что такое ШИМ и чем он отличается от меандра, автор, похоже, не в курсе.

И вообще, по манере изложения, тянет на "ах какого крутого старшекласника", чем на ведущего конструктора.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Клапауций 112 пишет:

Невже ти там на рідній мові писав?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sim31 пишет:

Отношение к коллегам что старались и писали статью подробную строго как в анекдоте бородатом:

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

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

Ворота пишет:

Невже ти там на рідній мові писав?

на мокшанском, православном и срепном изыке камменты в коде были.

посты на форуме - на изыке белых людей пиндосовском.

sim31
sim31 аватар
Offline
Зарегистрирован: 26.07.2017

ЕвгенийП пишет:

И вообще, по манере изложения, тянет на "ах какого крутого старшекласника", чем на ведущего конструктора.

Ну анекдот в силе, народ самоутверждается на опечатках коллег, меандр, конечно, не ШИМ, но в контексте той статьи всё понятно и логично. Кто-то же статью из черновиков вытащил, плюсов наставил и обсуждение шло длинное, тема актуальная.

Ведущий конструктор может быть в очень маленькой компании. У меня есть коллеги что владеют фирмами из одного человека, сами директора и более никого. Есть примеры шарашкиных контор, что тоже фирма из трех человек, собирают шкафы автоматизации для Газпрома из всего готового и впаривают за 10 000$ за штуку. Есть конторы что делают что-то непонятное для военных заказчиков на микроконтроллерах или ПЛИС, дружно ноют что платят мало, вообще непонятно что делают.  В маленькой компании директор может быть и ведущим конструктором, и бухгалером и разнорабочим...

sim31
sim31 аватар
Offline
Зарегистрирован: 26.07.2017

Клапауций 112 пишет:

опубликуй эту статью на https://forum.arduino.cc/

и ты получишь бан в ответ на предложение использовать https://translate.google.com для перевода непонятного им с понятного мне.

Там есть международный раздел

https://forum.arduino.cc/index.php?board=64.0

Странно, что без русского языка. Русский уж явно более распростране скандинавского. И вообще подфорум дохлый какой-то, после 2014 года нет сообщений, очень странно.

Создатели форума в целом имеют право на свои правила. Придет иностранец, напишет глупостей всяких, и их предъявят владельцу форума, тот и не поймет за что. Русскоязычные форумы тоже в целом не одобряют иностранного языка.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

sim31 пишет:

Там есть международный раздел

верно - я их попросил переместить мою тему в русский концлагерь или прекратить дискриминацию ползателей по языковому признаку.

результат налицо.

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

тупни сказали, что им это неудобно.

написал в их пресс-службу - тишина.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

sim31 пишет:

Создатели форума в целом имеют право на свои правила. Придет иностранец, напишет глупостей всяких, и их предъявят владельцу форума, тот и не поймет за что. Русскоязычные форумы тоже в целом не одобряют иностранного языка.

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

bwn
Offline
Зарегистрирован: 25.08.2014

sim31 пишет:

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

Типа: участковый в деревне Захрюкино - местный Генералиссимус от МВД. Компания, где все в одном лице + 1,5 узбека, это ИП. Можешь назначить там себя хоть Повелителем Вселенной, только это не значит, что ты им стал. Сколько общался с конструкторскими отделами, обычно всем хватало ума позвать специалиста в требуемой области и решать проблему с ним. Иначе: "Над вами потешаться будут" (с)М.Булгаков.

zilk
Offline
Зарегистрирован: 09.08.2017

Здравствуйте!

Имеется вопрос по работе с регистрами - есть ли возможность напрямую транслировать состояние одного регистра в другой, дабы избежать использования промежуточной переменной  state и digitalWrite() c целью чтобы запись прошла максимально быстро? Пример кода:

void loop() {
  while (micros() - timer < op)
 {
    state = PINB & (1 << 2);
    digitalWrite(1, !state);
  }
    digitalWrite(1, state);
}

Конструкция типа   PORTB |= (PINB & (1 << 2)) << 1 работать отказывается.

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

Спасибо!