А для нуб-использования нужно начинать с вот этой небольшой книжки, ее то я и читал. Скажу честно, становится скучно в виду того что в ней удар идет далеко не в сторону МК. Да, вы сейчас скажете что если такой баран что не вижу что это все одно и тоже и что конкретно под писанину МК книгу мне и никогда не найти, тоже скажу да. Ибо я уже такую искал))) Почитал, принцип понял, тонкости в разжовывании синтекса там нет. Даже и не пахнет. Для людей-железяк, тоисть таких как я сложно "перефразировать" язык для "текста" в язык для "железа" Хоть это одно и тоже. По этому мы и здесь, на форуме. Что для вас программеров пол пинка то для нас пол-дня. А возраст уже не позволяет сколько времени уделять. Да и смысл нашего с вами здесь сосуществования, мы железяки никогда вашу нишу программеров не займем- склад ума разный. А учим лишь для мелочных задумок которые вам не составят конкуренции ну никак. Вот вы послали в эту книжку за то что я попросил расписать по принципу обучения первый пост. Это уже реакция невозвратима- не напишет никто из вас эти несчастные 5 строчек. Тогда нужно перекраивать ввесь форум, везде убирать, уровень блинка и отсылать всех в книгу. Вопрос:в чем изъян именно моего вопроса? Он такой же как и остальные. Отличается только тем что пошел против шерсти.
И хватит Ваньку чмырить))) мы тут большая половина не программисты, и ничего. Есть другое в жизни. Не лишайте человека познать кайф от рыбалки только изза того что он рыбой не пахнет
А возраст уже не позволяет сколько времени уделять.
чем ты занят, старик? - геморрой и альцгеймер лечишь?
maxvalin пишет:
мы железяки никогда вашу нишу программеров не займем- склад ума разный.
вот, не нужно говорить о себе от лица всех - почему я-радиомонтажник и мастер по ремонту бытовой техники не епу народу мосг, рассказывая о мнимой мозговой ущербности?
не понятно тебе? - твои действия:
1. проанализировать посты треда и прийти к выводу, что ты-сука туп, что бы понять то, о чём мало кто не понял.
2. далее: бросить или курить тему до полного излечения альцгеймера.
А я не старик далеко и не лечу , детей просто воспитываю и уделяю им время свободное. Что и остается то физичесски не успеваю осилить за такие сроки. Да и сам пойми ну кто будет закапываться в самую гущу ради каких то безделушек. Если тебе изза этого жалко оторвать от мозга какуюто строку с подсказкой, то относись тогда равномерно ко всем. Ато одному подсказал второму хрен. Хотя ты такой парень что в принципе рубишь матку постоянно, так что это не к тебе.
Без обид). Мы же ведь образованные люди и не будем бежать водку пить изза того что чего то не можем осилить
А я не старик далеко и не лечу , детей просто воспитываю и уделяю им время свободное. Что и остается то физичесски не успеваю осилить за такие сроки. Да и сам пойми ну кто будет закапываться в самую гущу ради каких то безделушек.
у меня четыре недоенных козы - почему я должен заставлять жывотину мучитьсся и тратить на твоих детей своё личное время?
maxvalin пишет:
Если тебе изза этого жалко оторвать от мозга какуюто строку с подсказкой...
у тебя лично должно сложиться в голове понимание сути проблемы посредством не простых внешних инструкций, а умственным трудом и усилиями. иначе смотри в сторону готовых проектов, где не требуется думать и тратить много времени.
Примечание: Целые переменные будут переполняться, если форсировать их
переход через максимум или минимум при присваивании или сравнении.
Например, если x = 32767 и следующее выражение добавляет 1 к x, x = x +1 или
x++, в этом случае x переполняется и будет равен -32678.
Клапауцый, ну ты уж точно ничего не должен, заметь, тебя редко кто о чем просит. Ты бы людей от скотов отличил для начала бы. На тебя никто вилы тут не наставлял, зачем на себя одеяло перетягиваешь. Я конкретно задал вопрос автору темы, никого не трогал. Есть желание оторвать оторвет он или кто другой, если ты захочешь то и ты. Но зачем отрывать себя от важных дел как скотина на людей? Давай будем прекращать этот глупый разговор, я не прав в виду своего вопроса и только. Мог бы удалил свои посты. За это уже извинился.
maxvalin, не тут здесь программеров вообще. Им здесь скучно с нами. И не существует человек железчников и все что вы тут написали. Это все просто просто издержки недоучивания и прочего. Вам как хорошо воспринимать объянения учителя : лежа на правом ухе или на левом , с отрытыми глазами или их закрыть. А если вам скажут что надо сесть ровно , смотреть на доску и внимательно слушать учителя, то вы запоете , что вы не учится пришли, а так поспать, потому что под объсянение спится замечательно.
Так что вы решайте. Или вы серьезно учитесь и через не могу, или вы так посвистеть пришли. А если посвистеть, то не жалуйтесь, что вас так воспринимают. ПС: мне тоже в этой жизни не стать программером, ну ни как. Так я не вою.
maxvalin, ваш "пример" из сообщения #35 по смыслу полностью аналогичен тому тексту Евгения. что вы просите обьяснить.
А код Евгения кажется сложным, потому что он не предназначен быть заготовкой скетчей для новичков. Он написан для того, чтобы наглядно показать разницу между сложением и вычитанием миллис. Поэтому в нем нет комментрариев "вставлять свой код сюда" - это не шаблон для ваших скетчей, это пособие для изучения.
А что касается книжек - их же тыщи. Мне в свое время очень понравился Монк - правда не уверен, что с него стоит начинать. Мне он понравился именно тем, что книжка не начинается с элементарщины, как большинство других.
А еще вот длинные список по IT книжкам на самые разные темы. Можно посмотреть оглавление, почитать выложенные для просмотра главы - чтобы решить стоит ли искать эту книжку целиком или нет:
Это ты так думашь, отвез семью домой, сейчас телефоном со спортзала домой иду. Говорил же что не удобно писать с тел. Невнимательно провел ты статистику.
Это ты так думашь, отвез семью домой, сейчас телефоном со спортзала домой иду. Говорил же что не удобно писать с тел. Невнимательно провел ты статистику.
т.е. ты пока дрочил своё тело гирями - вызывал тут у народа жалость, прикидываясь затурканной бытом многодетной матерью? и, как прикажешь к тебе относиться после этого?
А для нуб-использования нужно начинать с вот этой небольшой книжки, ее то я и читал. Скажу честно, становится скучно в виду того что в ней удар идет далеко не в сторону МК.
Наоборот, в ней слишком много "в сторону МК". Т.е. свалка отрывочных сведений без какого-либо фундамента.
Поэтому и обучаться по ней практически невозможно. Учитья следует по учебнику, а не по справочнику.
Цитата:
Почитал, принцип понял, тонкости в разжовывании синтекса там нет. Даже и не пахнет.
Для "тонкости в разжовывании синтекса" - это Кернига и Ритчи.
Ардуино - достаточно прикладная вещь, следовательно, просто не может быть единственной книжки для ее освоения. Прочесть надо много разных книжек. Другого выхода нет.
Цитата:
Вопрос:в чем изъян именно моего вопроса?
В том, что он на этом форуме оффтопик.
Форум посвящен Ардуино. Даже не программированию. И тем более - не обучению программированию.
Цитата:
Он такой же как и остальные.
Забавная логика: если другие пишут чушь, то и мне позволительно писать чушь. Что ж тогда жаловаться на реацию окружающих?
Вообще, если Вы пришли, скажем, в литературный кружок, то предполагается, что Вы уже знаете все буквы, умеете складывать их в слова, а слова - в предложения.
Требовать, чтобы Вас стали обучать азбуке в литературном кржке, - минимум, неуважение к окружающим.
PS. Для ненаблюдательных отмечу: профессиональные литераторы в литературные кружки не ходят. Литрертурные кружки - удел исключительно любителей.
Адриано, я уже не понимаю по чем этот форум вообще. Не программирование, не обучаемости.. Наверное болше по быдлотолканию. То что я спросил не может по сути так выворачивать все наизнанку. При том что уже извинился и не один раз, продолжаете заниматься "быдлотолканием" как для меня, то лично пофиг на те миллисы я и так разберусь. Но этож жуть так ПОпереть всем стадом. Никто даже и не подумал просто "замять" тему.
maxvalin - вы ж сами подталкиваете тему именно к флуду. Отвечаете только на пустой треп, а между тем я в сообщении #59 попытался ответить на ваши вопросы... Реакции - ноль.
Толи все понятно, толи "быдлотолканье" интереснее...
maxvalin, это форум показывания своего опыта, а не получения отсюда. Придумали "гениальную идею", реалиализавали, заболели "звезной болезнью". выложили сюда, вас обхаяли и вы дальше уже тянете лямку , без всякого "зазвездется". Так что скетчи выклыдывайте сюда и вас вылечат. https://www.youtube.com/watch?v=OE584H8xYaM
maxvalin, это форум показывания своего опыта, а не получения отсюда. Придумали "гениальную идею", реалиализавали, заболели "звезной болезнью". выложили сюда, вас обхаяли и вы дальше уже тянете лямку , без всякого "зазвездется".
Нецелыми частями накопилось, лишний раз прерывание попалось (Ваша программа прерывается каждые 4 микросекунды для внутренних нужд среды) и т.п. Мало ли что.
При использовании millis() нужно помнить об одной особенности - millis() "тикает" не равномерно.
Возвращаемое значение увеличивается на единицу каждые 1024 мсек. Затем, когда миллис отстанет на 1 мсек, она "подводится" на единицу, т.е. возвращаемое значение перескакивает через один.
При измерении длительных интервалов это не страшно, но при интервалах в несколько мсек это заметно.
Например
if(millis() - prevMillis >= 4){
prevMillis = millis();
//сюда будем попадать через 4096 и иногда 3072 мксек
}
Вот код, который показывает первые 256 возвращаемых значений миллис() в процессе "тиканья".
вчера когда эксперементировал с переполнением и подсчетом скорости выполнения самого скетча, заметил. Особенно в "счетчике цикла" я его на микросы настроил.
Так возьмите скетч Петра, замените на кикросы и посмотрите. Насколько я помню, микросы там вроде вообще всегда кратны 4, но могу ошибаться, лезть смотреть сейчас в лом.
Думаю мой пример для микрос слишком медлителен. Сама функция микрос выполняется 3-4 мкс.
А микрос "равномерен", там учитывается значение счетного регистра TCNT0, который инкреминируется каждые 4 мкс.
On 16 MHz Arduino boards (e.g. Duemilanove and Nano), this function has a resolution of four microseconds (i.e. the value returned is always a multiple of four).
и мне как-та странна, этот микрос переполняется раз в 70 минут и ни одна жывая душа на этом форуме не задаеца вопросом "А есть ли жизнь после переполнения micros()?"
При использовании millis() нужно помнить об одной особенности - millis() "тикает" не равномерно.
Возвращаемое значение увеличивается на единицу каждые 1024 мсек. Затем, когда миллис отстанет на 1 мсек, она "подводится" на единицу, т.е. возвращаемое значение перескакивает через один.
Вот это место сильно интересное... Так же (время системного тика чуть меньше 1mc) имеет место во всех процессорных семействах и всех операционных системах (или средах выполнения). Но это в точности соответствует представлениям реального времени и требованиям стандарта POSIX 1003b для реального времени: "фактические значения временных интервалов может быть сколь угодно больше заказанных, но никогда не может оказаться меньше". Или то же самое: единица шкалы измерения времени (1мс.) может быть меньше, но не смеет быть больше.
В вашем изложении период 1mc фактически соответствует 0,9765625mks. Тогда процесс коррекции millis() строго детерминированный, и можно точно вычислить период, с которым ошибка millis() будет накапливать 1ms и будет подлежать коррекции... но это никак не 42-32 последовательных вызово millis(), как у вас в примере - там природа совсем другая.
Вот мы и подошли к интересному моменту: а не "допилить" ли нам millis(), а точнее инструмент отсчета временных интервалов в Ардуино?
Навскидку что можно сделать.
Нужно переписать обработчик ISR(TIMER0_OVF_vect) из wiring.c
ISR(TIMER0_OVF_vect)
{
// copy these to local variables so they can be stored in registers
// (volatile variables must be read from memory on every access)
/* unsigned long m = timer0_millis;
unsigned char f = timer0_fract;
m += MILLIS_INC;
f += FRACT_INC;
if (f >= FRACT_MAX) {
f -= FRACT_MAX;
m += 1;
}
timer0_fract = f;
timer0_millis = m;
timer0_overflow_count++;
*/
//допишем две строки
TCNT0 = 6;//подводим счетчик. Можно корректировать ход миллис, меняя константу (3-9)
timer0_millis++;
}
Для плат 16 МГц. Теперь миллис не перескакивает. Но микрос работать правильно не будет и ШИМ от ТС0 тоже немного изменится.
Вы допиливайте дальше)), а мне в теплице работать... огурчики с помидорками подошли...
При использовании millis() нужно помнить об одной особенности - millis() "тикает" не равномерно.
Возвращаемое значение увеличивается на единицу каждые 1024 мсек. Затем, когда миллис отстанет на 1 мсек, она "подводится" на единицу, т.е. возвращаемое значение перескакивает через один.
Вообще то, то как это происходит, в большинстве случаев, не важно. Но интересно представлять как они производят эту корректировку (изредка это может дать эффекты, которые сильно трудно будет толковать на отладке). Сделал специально такой тестовый код:
#include <stdio.h>
int serial_fputchar( const char ch, FILE *stream ) { Serial.write( ch ); return ch; }
static FILE *serial_stream = fdevopen( serial_fputchar, NULL );
void setup() {
stdout = serial_stream;
Serial.begin( 115200 );
}
void loop() {
while( !Serial.available() );
unsigned len = 0;
while( Serial.available() ) {
int r = Serial.read();
if( r >= '0' && r <='9' )
len = len * 10 + ( r - '0' );
delay( 1 );
}
Serial.println( len, DEC );
printf( "вычисление... ожидайте...\n" );
unsigned long *prev = new unsigned long [ len ],
*next = new unsigned long [ len ];
int i = 0;
do {
prev[ i ] = millis();
while( prev[ i ] == ( next[ i ] = millis() ) );
if( next[ i ] - prev[ i ] > 1 ) i++;
} while( i < len );
for( i = 0; i < len; i++ ) {
printf( "%lu:%lu:%2u", prev[ i ], next[ i ], i ? prev[ i ] - prev[ i - 1 ] : 0 );
printf( "%s", ( 9 == ( i % 10 ) ) ? "\n" : " | " );
}
printf( "\n" );
delete [] prev;
delete [] next;
}
Вот как это происходит по умолчанию (если не влазить в этот процесс): коррекция производится чаще через 43, реже через 42 последовательных вызовов millis().
//кусок кода из wiring.c
#if defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
ISR(TIM0_OVF_vect)
#else
ISR(TIMER0_OVF_vect)
#endif
{
/* // copy these to local variables so they can be stored in registers
// (volatile variables must be read from memory on every access)
unsigned long m = timer0_millis;
unsigned char f = timer0_fract;
m += MILLIS_INC;
f += FRACT_INC;
if (f >= FRACT_MAX) {
f -= FRACT_MAX;
m += 1;
}
timer0_fract = f;
timer0_millis = m;
timer0_overflow_count++;
*/
//допишем две строки
TCNT0 = 5;//подводим счетчик.
timer0_millis++;
}
unsigned long millis()
{
unsigned long m;
uint8_t oldSREG = SREG;
// disable interrupts while we read timer0_millis or we might get an
// inconsistent value (e.g. in the middle of a write to timer0_millis)
cli();
m = timer0_millis;
SREG = oldSREG;
return m;
}
unsigned long micros() {
/* unsigned long m;
uint8_t oldSREG = SREG, t;
cli();
m = timer0_overflow_count;
#if defined(TCNT0)
t = TCNT0;
#elif defined(TCNT0L)
t = TCNT0L;
#else
#error TIMER 0 not defined
#endif
#ifdef TIFR0
if ((TIFR0 & _BV(TOV0)) && (t < 255))
m++;
#else
if ((TIFR & _BV(TOV0)) && (t < 255))
m++;
#endif
SREG = oldSREG;
return ((m << 8) + t) * (64 / clockCyclesPerMicrosecond());
*/
//новая функция
unsigned int m;
uint8_t oldSREG = SREG, t;
t = TCNT0;//5-255
cli();
m = timer0_millis;
SREG = oldSREG;
return (((m & 0x3F) * 1000) + 4*(t-5));
}
void delay(unsigned long ms)
{
/* uint16_t start = (uint16_t)micros();
while (ms > 0) {
yield();
if (((uint16_t)micros() - start) >= 1000) {
ms--;
start += 1000;
}
}
*/
//новая функция
uint16_t k = 64000;
uint32_t start = micros();
uint32_t carrMicros = start;
while (ms > 0) {
yield();
carrMicros = micros();
if((carrMicros + k - start) % k >= 1000) {
ms--;
start = carrMicros;
}
}
}
Прерывание по переполнению ТС0 теперь каждые 1000 мкс. Было 1024 мкс. Обработчик стал короче.
millis() без изменения. Не "перескакивает".
micros() переполняется чез 64 мс.
Код показывает возвращаемые значения миллис и микрос
Чтоб корректно работал ШИМ на 5 и 6 пинах, нужно передавать в функцию
analogWrite(led, pwm); значение pwm=(5--255) вместо 0--255
Пример плавного разгорания-затухания лед.
const byte led = 5;
word i, pwm;
void setup() { }
void loop() {
for(i=0; i<255; i++){
pwm = i + (255-i)/50;
analogWrite(led, pwm);
delay(10);
}
delay(2000);
for(i=255; i>0; i--){
pwm = i + (255-i)/50;
analogWrite(led, pwm);
delay(10);
}
delay(2000);
}
Первый день ковыряю ардуину - могу уверенно сказать, что написанное в первом посте новичку не понятно вообще. Именно синтаксис написанного. Нужно было написать скетч как можно проще (как новички пишут), но акцентировать внимание на ключевом моменте - вычислении разницы времен.
могу уверенно сказать, что написанное в первом посте новичку не понятно вообще. Именно синтаксис написанного. Нужно было написать скетч как можно проще (как новички пишут),
А для нуб-использования нужно начинать с вот этой небольшой книжки, ее то я и читал. Скажу честно, становится скучно в виду того что в ней удар идет далеко не в сторону МК. Да, вы сейчас скажете что если такой баран что не вижу что это все одно и тоже и что конкретно под писанину МК книгу мне и никогда не найти, тоже скажу да. Ибо я уже такую искал))) Почитал, принцип понял, тонкости в разжовывании синтекса там нет. Даже и не пахнет. Для людей-железяк, тоисть таких как я сложно "перефразировать" язык для "текста" в язык для "железа" Хоть это одно и тоже. По этому мы и здесь, на форуме. Что для вас программеров пол пинка то для нас пол-дня. А возраст уже не позволяет сколько времени уделять. Да и смысл нашего с вами здесь сосуществования, мы железяки никогда вашу нишу программеров не займем- склад ума разный. А учим лишь для мелочных задумок которые вам не составят конкуренции ну никак. Вот вы послали в эту книжку за то что я попросил расписать по принципу обучения первый пост. Это уже реакция невозвратима- не напишет никто из вас эти несчастные 5 строчек. Тогда нужно перекраивать ввесь форум, везде убирать, уровень блинка и отсылать всех в книгу. Вопрос:в чем изъян именно моего вопроса? Он такой же как и остальные. Отличается только тем что пошел против шерсти.
И хватит Ваньку чмырить))) мы тут большая половина не программисты, и ничего. Есть другое в жизни. Не лишайте человека познать кайф от рыбалки только изза того что он рыбой не пахнет
А возраст уже не позволяет сколько времени уделять.
чем ты занят, старик? - геморрой и альцгеймер лечишь?
мы железяки никогда вашу нишу программеров не займем- склад ума разный.
вот, не нужно говорить о себе от лица всех - почему я-радиомонтажник и мастер по ремонту бытовой техники не епу народу мосг, рассказывая о мнимой мозговой ущербности?
не понятно тебе? - твои действия:
1. проанализировать посты треда и прийти к выводу, что ты-сука туп, что бы понять то, о чём мало кто не понял.
2. далее: бросить или курить тему до полного излечения альцгеймера.
Ты вообще своеобразный чел)
А я не старик далеко и не лечу , детей просто воспитываю и уделяю им время свободное. Что и остается то физичесски не успеваю осилить за такие сроки. Да и сам пойми ну кто будет закапываться в самую гущу ради каких то безделушек. Если тебе изза этого жалко оторвать от мозга какуюто строку с подсказкой, то относись тогда равномерно ко всем. Ато одному подсказал второму хрен. Хотя ты такой парень что в принципе рубишь матку постоянно, так что это не к тебе.
Без обид). Мы же ведь образованные люди и не будем бежать водку пить изза того что чего то не можем осилить
А я не старик далеко и не лечу , детей просто воспитываю и уделяю им время свободное. Что и остается то физичесски не успеваю осилить за такие сроки. Да и сам пойми ну кто будет закапываться в самую гущу ради каких то безделушек.
у меня четыре недоенных козы - почему я должен заставлять жывотину мучитьсся и тратить на твоих детей своё личное время?
Если тебе изза этого жалко оторвать от мозга какуюто строку с подсказкой...
у тебя лично должно сложиться в голове понимание сути проблемы посредством не простых внешних инструкций, а умственным трудом и усилиями. иначе смотри в сторону готовых проектов, где не требуется думать и тратить много времени.
но вот хотя бы вот такую малюсенькую книжку для совсем чайников изучите - ну себя же больше уважать будете.
Ой, а там очепятка -
Примечание: Целые переменные будут переполняться, если форсировать их
переход через максимум или минимум при присваивании или сравнении.
Например, если x = 32767 и следующее выражение добавляет 1 к x, x = x +1 или
x++, в этом случае x переполняется и будет равен -32678.
Как раз на великом переполнении
Клапауцый, ну ты уж точно ничего не должен, заметь, тебя редко кто о чем просит. Ты бы людей от скотов отличил для начала бы. На тебя никто вилы тут не наставлял, зачем на себя одеяло перетягиваешь. Я конкретно задал вопрос автору темы, никого не трогал. Есть желание оторвать оторвет он или кто другой, если ты захочешь то и ты. Но зачем отрывать себя от важных дел как скотина на людей? Давай будем прекращать этот глупый разговор, я не прав в виду своего вопроса и только. Мог бы удалил свои посты. За это уже извинился.
maxvalin, не тут здесь программеров вообще. Им здесь скучно с нами. И не существует человек железчников и все что вы тут написали. Это все просто просто издержки недоучивания и прочего. Вам как хорошо воспринимать объянения учителя : лежа на правом ухе или на левом , с отрытыми глазами или их закрыть. А если вам скажут что надо сесть ровно , смотреть на доску и внимательно слушать учителя, то вы запоете , что вы не учится пришли, а так поспать, потому что под объсянение спится замечательно.
Так что вы решайте. Или вы серьезно учитесь и через не могу, или вы так посвистеть пришли. А если посвистеть, то не жалуйтесь, что вас так воспринимают. ПС: мне тоже в этой жизни не стать программером, ну ни как. Так я не вою.
Но зачем отрывать себя от важных дел как скотина на людей?
верно - люди сами о себе способны позаботиться, а домашняя скотина - нет.
#и, нефиг тут многодетной мамкой прикидываться и ожидать, что реальность станет к тебе более благосклонной.
maxvalin, ваш "пример" из сообщения #35 по смыслу полностью аналогичен тому тексту Евгения. что вы просите обьяснить.
А код Евгения кажется сложным, потому что он не предназначен быть заготовкой скетчей для новичков. Он написан для того, чтобы наглядно показать разницу между сложением и вычитанием миллис. Поэтому в нем нет комментрариев "вставлять свой код сюда" - это не шаблон для ваших скетчей, это пособие для изучения.
А что касается книжек - их же тыщи. Мне в свое время очень понравился Монк - правда не уверен, что с него стоит начинать. Мне он понравился именно тем, что книжка не начинается с элементарщины, как большинство других.
А еще вот длинные список по IT книжкам на самые разные темы. Можно посмотреть оглавление, почитать выложенные для просмотра главы - чтобы решить стоит ли искать эту книжку целиком или нет:
http://it-ebooks.info/
Только не спрашивайте, где потом эти книги скачать :) - это сами
Ну, надеюсь все довольны остались.
Ну, надеюсь все довольны остались.
смотри - сухая статистика:
твой первый пост Пнд, 19/03/2018 - 16:08
Это ты так думашь, отвез семью домой, сейчас телефоном со спортзала домой иду. Говорил же что не удобно писать с тел. Невнимательно провел ты статистику.
смотри - сухая статистика:
твой первый пост Пнд, 19/03/2018 - 16:08
Сухая статистика в другом - человек "увлекается ардуиной" более 2х лет....
Это ты так думашь, отвез семью домой, сейчас телефоном со спортзала домой иду. Говорил же что не удобно писать с тел. Невнимательно провел ты статистику.
т.е. ты пока дрочил своё тело гирями - вызывал тут у народа жалость, прикидываясь затурканной бытом многодетной матерью? и, как прикажешь к тебе относиться после этого?
А для нуб-использования нужно начинать с вот этой небольшой книжки, ее то я и читал. Скажу честно, становится скучно в виду того что в ней удар идет далеко не в сторону МК.
Наоборот, в ней слишком много "в сторону МК". Т.е. свалка отрывочных сведений без какого-либо фундамента.
Поэтому и обучаться по ней практически невозможно. Учитья следует по учебнику, а не по справочнику.
Почитал, принцип понял, тонкости в разжовывании синтекса там нет. Даже и не пахнет.
Для "тонкости в разжовывании синтекса" - это Кернига и Ритчи.
Ардуино - достаточно прикладная вещь, следовательно, просто не может быть единственной книжки для ее освоения. Прочесть надо много разных книжек. Другого выхода нет.
Вопрос:в чем изъян именно моего вопроса?
В том, что он на этом форуме оффтопик.
Форум посвящен Ардуино. Даже не программированию. И тем более - не обучению программированию.
Он такой же как и остальные.
Забавная логика: если другие пишут чушь, то и мне позволительно писать чушь. Что ж тогда жаловаться на реацию окружающих?
Вообще, если Вы пришли, скажем, в литературный кружок, то предполагается, что Вы уже знаете все буквы, умеете складывать их в слова, а слова - в предложения.
Требовать, чтобы Вас стали обучать азбуке в литературном кржке, - минимум, неуважение к окружающим.
PS. Для ненаблюдательных отмечу: профессиональные литераторы в литературные кружки не ходят. Литрертурные кружки - удел исключительно любителей.
Адриано, я уже не понимаю по чем этот форум вообще. Не программирование, не обучаемости.. Наверное болше по быдлотолканию. То что я спросил не может по сути так выворачивать все наизнанку. При том что уже извинился и не один раз, продолжаете заниматься "быдлотолканием" как для меня, то лично пофиг на те миллисы я и так разберусь. Но этож жуть так ПОпереть всем стадом. Никто даже и не подумал просто "замять" тему.
maxvalin - вы ж сами подталкиваете тему именно к флуду. Отвечаете только на пустой треп, а между тем я в сообщении #59 попытался ответить на ваши вопросы... Реакции - ноль.
Толи все понятно, толи "быдлотолканье" интереснее...
Я внимательно читал ваше сообщение. Адекватный ответ, за это большое спасибо!
maxvalin, это форум показывания своего опыта, а не получения отсюда. Придумали "гениальную идею", реалиализавали, заболели "звезной болезнью". выложили сюда, вас обхаяли и вы дальше уже тянете лямку , без всякого "зазвездется". Так что скетчи выклыдывайте сюда и вас вылечат. https://www.youtube.com/watch?v=OE584H8xYaM
maxvalin, это форум показывания своего опыта, а не получения отсюда. Придумали "гениальную идею", реалиализавали, заболели "звезной болезнью". выложили сюда, вас обхаяли и вы дальше уже тянете лямку , без всякого "зазвездется".
))) А ведь так!
Евгений, вопрос именно к вам, третий вывод, в двух словах: из-за чего?
это уж точно не "офтопик"
третий вывод, в двух словах: из-за чего?
Ничего не понял :(
3001
Нецелыми частями накопилось, лишний раз прерывание попалось (Ваша программа прерывается каждые 4 микросекунды для внутренних нужд среды) и т.п. Мало ли что.
При использовании millis() нужно помнить об одной особенности - millis() "тикает" не равномерно.
Возвращаемое значение увеличивается на единицу каждые 1024 мсек. Затем, когда миллис отстанет на 1 мсек, она "подводится" на единицу, т.е. возвращаемое значение перескакивает через один.
При измерении длительных интервалов это не страшно, но при интервалах в несколько мсек это заметно.
Например
if(millis() - prevMillis >= 4){
prevMillis = millis();
//сюда будем попадать через 4096 и иногда 3072 мксек
}
Вот код, который показывает первые 256 возвращаемых значений миллис() в процессе "тиканья".
millis() не возвращает 42, 85, 127, 170, 213, 255 и т.д.
вчера когда эксперементировал с переполнением и подсчетом скорости выполнения самого скетча, заметил. Особенно в "счетчике цикла" я его на микросы настроил.
Микросы тоже не равномерны?
Микросы тоже не равномерны?
Так возьмите скетч Петра, замените на кикросы и посмотрите. Насколько я помню, микросы там вроде вообще всегда кратны 4, но могу ошибаться, лезть смотреть сейчас в лом.
почти, скорее кратны 8-ми
ну и плюс неравномерность
Микросы тоже не равномерны?
Думаю мой пример для микрос слишком медлителен. Сама функция микрос выполняется 3-4 мкс.
А микрос "равномерен", там учитывается значение счетного регистра TCNT0, который инкреминируется каждые 4 мкс.
про микрос
On 16 MHz Arduino boards (e.g. Duemilanove and Nano), this function has a resolution of four microseconds (i.e. the value returned is always a multiple of four).
и мне как-та странна, этот микрос переполняется раз в 70 минут и ни одна жывая душа на этом форуме не задаеца вопросом "А есть ли жизнь после переполнения micros()?"
При использовании millis() нужно помнить об одной особенности - millis() "тикает" не равномерно.
Возвращаемое значение увеличивается на единицу каждые 1024 мсек. Затем, когда миллис отстанет на 1 мсек, она "подводится" на единицу, т.е. возвращаемое значение перескакивает через один.
Вот это место сильно интересное... Так же (время системного тика чуть меньше 1mc) имеет место во всех процессорных семействах и всех операционных системах (или средах выполнения). Но это в точности соответствует представлениям реального времени и требованиям стандарта POSIX 1003b для реального времени: "фактические значения временных интервалов может быть сколь угодно больше заказанных, но никогда не может оказаться меньше". Или то же самое: единица шкалы измерения времени (1мс.) может быть меньше, но не смеет быть больше.
В вашем изложении период 1mc фактически соответствует 0,9765625mks. Тогда процесс коррекции millis() строго детерминированный, и можно точно вычислить период, с которым ошибка millis() будет накапливать 1ms и будет подлежать коррекции... но это никак не 42-32 последовательных вызово millis(), как у вас в примере - там природа совсем другая.
О, как!
Вот мы и подошли к интересному моменту: а не "допилить" ли нам millis(), а точнее инструмент отсчета временных интервалов в Ардуино?
Навскидку что можно сделать.
Нужно переписать обработчик ISR(TIMER0_OVF_vect) из wiring.c
Для плат 16 МГц. Теперь миллис не перескакивает. Но микрос работать правильно не будет и ШИМ от ТС0 тоже немного изменится.
Вы допиливайте дальше)), а мне в теплице работать... огурчики с помидорками подошли...
а не "допилить" ли нам millis(), а точнее инструмент отсчета временных интервалов в Ардуино?
А нада? Каму?
От молодец. Пришёл, сломал миллис, микрос, ШИМ и свалил. А нам что теперь со всем этим делать?
А нам что теперь со всем этим делать?
Как что? Принять 200-250 кубиков патентованного среццтва от DetSimen (внутриглоточно) и наблюдать за развитием событий.
Вот мы и подошли к интересному моменту: а не "допилить" ли нам millis(), а точнее инструмент отсчета временных интервалов в Ардуино?
Навскидку что можно сделать.
Нужно ввести
uint64_t mibis(); // возвращает время в 4-мкс единицах
при этом mibis() << 2 будет равен micros(), а mibis() >> 8 будет примерно равен millis(), но без "перескоков".
Заодно раз и навсегда решает проблему ТОПИКА (по крайней мере, на ближайшие два миллиона лет).
Ну, да. Сделаем изделие, вроде работает, а через 2 397 574 лет - бамс! Приехали! Нельзя так безответсвенно подходить к проектированию!
Ну, да. Сделаем изделие, вроде работает, а через 2 397 574 лет - бамс! Приехали! Нельзя так безответсвенно подходить к проектированию!
Неправда Ваша.
У нас еще больше 2 месяцев в запасе.
У нас еще больше 2 месяцев в запасе.
Этой отмазкой Вы пытаетсь прикрыть безответсвенность и халтруру! :)
При использовании millis() нужно помнить об одной особенности - millis() "тикает" не равномерно.
Возвращаемое значение увеличивается на единицу каждые 1024 мсек. Затем, когда миллис отстанет на 1 мсек, она "подводится" на единицу, т.е. возвращаемое значение перескакивает через один.
Вообще то, то как это происходит, в большинстве случаев, не важно. Но интересно представлять как они производят эту корректировку (изредка это может дать эффекты, которые сильно трудно будет толковать на отладке). Сделал специально такой тестовый код:
Вот что он даёт:
Вот что он даёт:
Вот как это происходит по умолчанию (если не влазить в этот процесс): коррекция производится чаще через 43, реже через 42 последовательных вызовов millis().
Вот что он даёт:
Вы и впрямь здесь что-то видите? Или прикидываетесь?
Ну вобщем дурная голова рукам покоя не дает..)
Покажу что получилось. Даже работает...
Прерывание по переполнению ТС0 теперь каждые 1000 мкс. Было 1024 мкс. Обработчик стал короче.
millis() без изменения. Не "перескакивает".
micros() переполняется чез 64 мс.
Код показывает возвращаемые значения миллис и микрос
Чтоб корректно работал ШИМ на 5 и 6 пинах, нужно передавать в функцию
analogWrite(led, pwm); значение pwm=(5--255) вместо 0--255
Пример плавного разгорания-затухания лед.
Первый день ковыряю ардуину - могу уверенно сказать, что написанное в первом посте новичку не понятно вообще. Именно синтаксис написанного. Нужно было написать скетч как можно проще (как новички пишут), но акцентировать внимание на ключевом моменте - вычислении разницы времен.
Не нраица - добро пожаловать отсюда. Открывай свой форум с очком и путинскими женщинами.
могу уверенно сказать, что написанное в первом посте новичку не понятно вообще. Именно синтаксис написанного. Нужно было написать скетч как можно проще (как новички пишут),
Напишите.
Первый день ковыряю ардуину - могу уверенно сказать, что написанное в первом посте новичку не понятно вообще.
Вам-то откуда знать, если до новичка Вам минимум еще 3-4 месяца?