Нашел это - кто-то пользует?
- Войдите на сайт для отправки комментариев
Пт, 24/07/2015 - 13:28
Вот интересная библиотека, но писал в личку, автор - не отвечает: http://cyber-place.ru/showthread.php?t=1909
кто-то уже пользовался? Можете объяснить как это может работать? 500-600 байт на скетчи в примерах, имхо как-то круто. Точно работает?
О! Реклама поперла.
Arhat109 и там насрал.
прошу прощения, если зря запостил. Там в описании "допишу позже" на самом интересном месте, а в самом файле по английски ... не дружу.
Автор бреда по Вашей ссылке - напыщенный индюк.
скоро приедет куча 2560 (или не придут))) ) буду туда заливать скетчи на 4 байта. сэкономлю память а архату за каждый съэкономленный байт буду деньги отправлять. человек старался делал все таки
Еще одна CyberLib что ли?
Beginner100500, библиотеки придумывают специально, что бы начинающие всю жизнь остались начинающими. Что только не сделают хитрюги, что бы пользователю отбить мотивацию к развитию знаний. В результате годами люди говнокодят и не понимают элементарных вещей, которые нужно знать как таблицу умножения.
Товарищи! отказывайтесь от библиотек, обретайте знания ! :)
Beginner100500, библиотеки придумывают специально, что бы начинающие всю жизнь остались начинающими. Что только не сделают хитрюги, что бы пользователю отбить мотивацию к развитию знаний. В результате годами люди говнокодят и не понимают элементарных вещей, которые нужно знать как таблицу умножения.
Товарищи! отказывайтесь от библиотек, обретайте знания ! :)
товагигищи!, проклятые империалисты вас обманывают!
дуино нет - есть AVR-контроллеры!
не пользуйтесь компиляторами - пишите сразу в машинном коде!
далее
контроллеры придумали рептилоиды, что бы отучить человечество думать - пользуйтесь однобитовым методом записи информации!
00011101011011101111101010100000110110110101101111110101010101011110101011111111111111110010010010101010101010010101010101010101010101010101010101
Beginner100500, библиотеки придумывают специально, что бы начинающие всю жизнь остались начинающими. Что только не сделают хитрюги, что бы пользователю отбить мотивацию к развитию знаний. В результате годами люди говнокодят и не понимают элементарных вещей, которые нужно знать как таблицу умножения.
Товарищи! отказывайтесь от библиотек, обретайте знания ! :)
а вариант, что не хочется быть великим программером не расматривается?
большинство на этом форуме занимаются своими проектиками или просто играются с мк и им абсолютно не нужно глубокое изучение с++
библиотеки НУЖНЫ
СПАСИБО тем кто их пишет и публикует.
vvadim, ну это не серьёзно. Так можно оправдать всё, что угодно. Типа зачем мне учится в школе, если я буду работать грузчиком. Примерно каждый десятый случай тут на форуме -люди упираются в отсутствие умения работать с таймером и совершать битовые операции.
Дима, это не оправдание.
ну не нужно мне глубоко в изучение языка лезть.
я ковыряюсь на своём каком то уровне. и библиотеки мне как раз в помощь.
если с чем то незнакомым или непонятным сталкиваюсь - погуглю, почитаю, если не разберусь задам вопрос на форуме
vvadim, ну это не серьёзно. Так можно оправдать всё, что угодно. Типа зачем мне учится в школе, если я буду работать грузчиком. Примерно каждый десятый случай тут на форуме -люди упираются в отсутствие умения работать с таймером и совершать битовые операции.
Согласен но не на все 100%
Я например любитель, библиотеки мне очень помогают. В крайнем случае можно разобраться как работает библиотека и изменить ее под свои нужды не сильно вникая в даташит.
Я бы не взялся сам писать код для работы с SD картой. Но например часы DS3231 можно и без библиотеки использовать так как многое, что заложено в библиотеке мне не нужно.
То же и с битовыми операциями, посмотрел на форуме, есть много интересных решений и ваши тоже dimax.
Но в коде они для меня совершенно не читаемы. Может быть постепенно отлаживая и модернизируя код я переведу некоторые операции на работу с битами (будет и быстрее и памяти поменьше требуется) и подробными комментами к ним, но первично проект должен заработать, иначе он так и останется на полке. Это просто мой случай, у других может быть и иначе.
Просто если нужно решить простенькую задачу, например то что я делаю сейчас - логгер температуры, влажности, давления, освещенности, то если я буду разбираться с даташитом каждого датчика то никогда работу не завершу. Будет постоянное улучшение ради улучшения.
А запустив логгер, будет интересно модернизировать и оптимизировать код. Опять же рабочий проект можно выложить здесь или на подобных форумах и получить советы и новые идеи.
А вот проект с досветкой растений у меня так и завис, именно из за попыток не запустить его, а из за постоянного желания что то улучшить :-(
Я читал гдето в ваших постах, что програмирование для вас тоже хобби, а не основная работа. Для меня так же. Но подходы к реализации у нас разные.
Типа зачем мне учится в школе, если я буду работать грузчиком.
ну, и типа, зачем грузчику учиться в школе?
1 - кто-то уже пользовался?
2 - Можете объяснить как это может работать?
1 - Arhat109 , 2 - Arhat109
1 - кто-то уже пользовался?
2 - Можете объяснить как это может работать?
1 - Arhat109 , 2 - Arhat109
3 - всё зло в мире от грузчиков, не рубящих фишку в теории струн.
при переноске фортепиянов не нужно рубить в теории струн , в горизонте событий....
ГЛАВНОЕ - не перепутать подъезд ! ( особенно , если этаж 9...17-ый )
при переноске фортепиянов не нужно рубить в теории струн , в горизонте событий....
ГЛАВНОЕ - не перепутать подъезд ! ( особенно , если этаж 9...17-ый )
эдак можно всё зло в мире объяснить - нам же нужно, что бы грузчиками работали спившиеся профессора-неудачники, а не профессионалы, с детства изучавшие мастерство доставки роялей сантехникам.
совсем запутал....
мне казалось у сантехников - теория струй ? зачем им рояли ?
совсем запутал....
мне казалось у сантехников - теория струй ? зачем им рояли ?
сантехники посредсвом роялей слушают Баха.
*пока нисчеброды-академики слушают Баха на своём айфоне, сантехники могут себе позволить живую музыку.
сантехники могут себе позволить живую музыку.
в смысле - еБашить ?
сантехники могут себе позволить живую музыку.
в смысле - еБашить ?
в смысле - слушать музыку, кретин.
сам такой :)
еБашить - слушать сонату 777 ( в версии 0.7 литра )
http://bachmusic.narod.ru/notes1.html
Интересно у вас тут))) Начали с библиотек, а закончили сантехниками, сонатами и теорией струн. И все это на одной странице.)) И все же, как начинающий ардунщик с начальным абсолютно нулевым уровнем знаний в области программирования, от себя скажу, что библиотеки для таких как я очень полезная штука и без них была бы высока вероятность "отвала" всех начинающих... А писать код без них, это уже для гурманов, ибо нафига мне машина с мах скоростью 250кмч, если я старикан и 90 мне за глаза)))
Дык ещё пухлявый может с доктором подтянуться - тогда с теорией струн воще веселье начнётся )))
Докотор не может ни подтягиваться, ни отжиматься. Доктор старенький.
Andrey-S, да не в скорости дело. А в возможностях. Зная как работает те-же таймеры в м.к. можно решить гораздо более сложные задачи, чем не зная этого, и обращаясь к ним через библиотеку. Такая же ситуация и с другими вещами. Всему своё время, возможно скоро вы столкнётесь с тем, что поставит вас в тупик из-за отсутствия нужных знаний. Тогда, возможно, по-другому посмотрите на многие вещи. Я раньше думал точно так-же, что можно обойтись. Но периодически что-то попадалось, что вводило в сомнение, и уже думал: нет, конечно однажды нужно сесть и разобраться с этими таймерами. Но когда конкретно я этим займусь так и не планировал. Но однажды общались в одной теме, и наш форумчанин с ником a5021 предложил лёгкое решение одной задачки. И дал код как раз без использования библиотеки. Я даже ссылку сохранил :) Это было последней точкой, и я наконец занялся изучением таймеров :) Потребовалось всего пару дней что б разобраться и поэкперементировать.
Andrey-S, да не в скорости дело. А в возможностях. Зная как работает те-же таймеры в м.к. можно решить гораздо более сложные задачи, чем не зная этого, и обращаясь к ним через библиотеку. Такая же ситуация и с другими вещами. Всему своё время, возможно скоро вы столкнётесь с тем, что поставит вас в тупик из-за отсутствия нужных знаний...
dimax, я полностью согласен с Вами и точно знаю, что так случится, но это теоретически тоже самое что и "дедушки стало недостаточно езды в 90кмч ибо ему теерь необходимо обгонять впереди идущего дедушку под 89 кмч"))). Но по мне лучше сначала "научиться ездить 90кмч" и только потом, обгонять и переходить на более высокую скорость, а не делать это все разом впервые. А в целом Вы абсолютно правы.
vvadim, ну это не серьёзно. Так можно оправдать всё, что угодно. Типа зачем мне учится в школе, если я буду работать грузчиком. Примерно каждый десятый случай тут на форуме -люди упираются в отсутствие умения работать с таймером и совершать битовые операции.
Упрутся - изучат, (это если нормальные люди) а форсировать-то зачем. Люди должны творить, а не тонуть в рутине. Именно для этого и придумали сначала языки высокого уровня, а затем и библиотеки на все случаи жизни.
Опять же, я, например, не люблю пользоваться чужими библиотеками - пишу свои. Но все равно ведь - библиотеки. Потому что удобно.
при переноске фортепиянов не нужно рубить в теории струн , в горизонте событий....
ГЛАВНОЕ - не перепутать подъезд ! ( особенно , если этаж 9...17-ый )
Ну вот, видишь, - грузчику, оказывается нужно уметь читать номера подъездов и считать этажи. А то - зачем в школе учиться!
Всем спасибо за помощь и деловые ответы. Понятно, что автор ответит лучше всех, но он молчит, и как почитал - он сейчас похоже в отъезде и надолго.
Только вот остался вопрос: как мне силами типовой библиотеки организовать дифференциальное чтение аналоговых входов? Тут я нашел какое-то упоминание и функцию
// differential and gain "neg-poz" read
// neg:[0,2|8,10], poz:[0..3|8..11], g:[GAIN_10,GAIN_200], adlar:[ADC_LEFT|ADC_RIGHT]
#define admux2Gain(src,neg,poz,g,adlar) \
{ \
ADMUX = ((src)|(8+(((neg)&2)<<1)|(((g)&1)<<1)|((poz)&1))|(adlar)); \
ADCSRB |= ((poz)&8); \
if((poz)&8) { DIDR2 |= ((pin)&7); } \
else { DIDR0 |= ((pin)&7); } \
}
Только не могу понять как её пользовать, так чтоли?
admux2Gain(admuxSrc("AVCC"), 0, 1, "GAIN_10", "ADC_RIGHT");
так выдает кучу ошибок... вот так как в примере - не выдает, но разве это правильно?
admux2Gain(admuxSrc(AVCC), 0, 1, GAIN_10, ADC_RIGHT);
и как понял с моим английским, это только настройка преобразователя, а КАК организовать аналоговый ввод в дифференциальном режиме по-другому?
Beginner100500, разговор о дифф.входе не мыслим без уточнения о каком конкретно М.К. идёт речь. Например в atmega328 нет такой возможности вовсе.
Да, извиняюсь что не указал сразу: ATmega2560. На выходных попробовал примеры - всё работает, фантастика какая-то. Но меня она заинтересовала именно этой возможностью. Но толи автор недописал, толи что, но я так и не понял как мне организовать чтение в диф. режиме.
Задача: есть 2 аналоговых напряжения, сильно похожих и мне надо получить их разницу в режиме "онлайн", желательно с пред. усилением раз 10-20. Из даташита понял, что мега это может, но вот хоть какое-то упоминание нашел только в этой либе. А как пользовать - так и не понял.
Да и ваще "мало что понимаю" в этом, как тут сказали - бреде: в примере с сервами есть такое использование
timerControl(servoTimer, A) = (1<<COM1A1)|(1<<COM1B1)|(1<<WGM11);
timerControl(servoTimer, B) = (1<<WGM13)|(1<<WGM12)|(1<<CS11)|(1<<CS10);
timerCapture(servoTimer) = 4999;
Как понимаю, это установка таймера в какой-то режим силами прямых команд. Но, ни "А" ни "В" нигде не определены.Так разве можно писать? А ведь работает, проверил. Фантастика какая-то. :)
Ниче вы так устроили тут митинг в уголке.
Да не будет никто ничего изучать. 99.99% случаев это повторение чужих проектов с минимальными косметическими изменениями под себя.
Типа как ДВС , 100 лет назад заморочились и сделали формы и так и льют в них двигателя. Иногда заклеют какую дырку. Иногда новую просверлят и датчик воткнут. А в целом все тоже самое.
ничего принципиально нового. Какой смысл пилить новые библиотеки.
timerControl(servoTimer, B) = (1<<WGM13)|(1<<WGM12)|(1<<CS11)|(1<<CS10);
timerCapture(servoTimer) = 4999;
Как понимаю, это установка таймера в какой-то режим силами прямых команд. Но, ни "А" ни "В" нигде не определены.Так разве можно писать? А ведь работает, проверил. Фантастика какая-то. :)
Всё просто, где-то стоит функция переопределения на реальный регистр таймера. Для первого таймера аналогичная запись, но напрямую, была бы такой: TCCR1A= TCCR1B=
что бы в мире не стало грузчиков - все будут заниматься теорией струн в пещерах и на деревьях. #10
Там написано вот так:
#define timerControl(p,r) _timerControl(p,r) // get/set control registers: p:[0,2,[1,3,4,5]], r:[A,B[,C]]
а раньше, выше так:
#define _timerControl(p,r) (TCCR##p##r)
Как вот это работает, мне совершенно непонятно. Уж извините, но как прочитал, команда препроцессора ## соединяет в одно целое текст и, действительно должны получить "TCCR1A". Но, вроде как там же, в описании препроцессора написано что эта операция отменяет дальнейший разбор команд препроцессором, а тут выходит что или компилятор заранее знает что такое TCCR1A или препроцессор как-то продолжает свою работу. Да, ещё нашел что макрос TCCR1A на самом деле определен в недрах io.h
Убил все выходные в попытках понять как это работает... яснее не стало.
Ладно, фиг с ней, этой либой.
Как мне решить задачу дифференциальной оцифровки двух похожих напряжений?
Есть иные решения, кроме этой либы?
Beginner100500, по поводу слияния ## вы вроде правильно поняли. По поводу дифф.аналогового чтения -то эта функция только путает, но разобраться можно. Откройте даташит на странице 283, там перечислены все комбинации мульплексора. Я бы не стал разбираться с функцией, а сразу бы писал в нужные регистры нужные значения, так проще. :)
Даташит на английском, а у меня с ним проблемы... пробовал его читать, но честно говоря мало что понял. Увы.
Beginner100500, не страшно. В нужных местах там не слова, а цифры. Решайте задачу поэтапно.Откройте ту таблицу, выберете нужную комбинацию входов и усиления. Потом заполните регистры, я помогу :)
Ладно, фиг с ней, этой либой.
Как мне решить задачу дифференциальной оцифровки двух похожих напряжений?
Есть иные решения, кроме этой либы?
Что есть "дифференциальная оцифроыва"?
Вот это?
Задача: есть 2 аналоговых напряжения, сильно похожих и мне надо получить их разницу в режиме "онлайн", желательно с пред. усилением раз 10-20.
ТОгда вообще непонятно, зачем нужна какая-то либа, неужели арифметики не хвататет?
diffValue = (GetSensor1() - GetSensor2())*10;
Чтобы увеличить точность, а заодно избавиться от шума (аналоговые входы этим грешат):
Ключевое слово "онлайн". Пока я буду читать по отдельности - получу кашу вместо разности. И аппаратный зум далеко не тоже самое что умножить на 10 (цифровой).
Дмитрий, ну давайте определимся, что сигналы подключены к ногам 0 и 1 аналоговых входов. Усиление, пусть будет 10. Что я должен найти на этой странице? Там кстати нет никакой таблицы, а только разделы 26.5.2 и 26.6 - чего-то про подавление шума и какое-то описание напряжений.
У нас разный даташит? Открыл ваш по ссылке, и там есть табличка, а у меня такая ниже, на стр. 291. Ну, собственно ADMUX (так кажется), надо ставить в режим 001001, если правильно понял: вход 0 - отрицательный, вход 1 - положительный и усиление 10х. Так? Что дальше?
Вы извините, но я все равно не понимаю, как установить этот ADMUX и где я должен получить результат...
У меня на этой странице по той ссылке Таблица 26-4. Вы выбрали 0 и 1 и усиление 10, значит нам подходит вторая строчка сверху. Пишем данные 001001 . Нули нам програмировать не нужно, они по умолчанию, значит наши первые данные MUX3=1, MUX0=1. Крутим даташит вниз. Параграф 26.8.3 Регистр ADCSRA , так же расставляем единички. Включим АЦП ADEN=1 adsc потребуется позже. ADPS2:0 делитель частоты для ацп. Таблица 26-5. Рекомендуется 50..200КГц, ставим все единички.Параграф 26.8.6 DIDR отрубаем от цифрового буффера наши два входа. ADC1D=1 ADC0D=1 . А не, про референс забыл. параграф 26.8.1 Если референс = напряжение. питания, то ставим REFS0=1
Рисуем конечную функцию:
Кстати, максимальная разница напряжений между A0 и A1 будет ref/10 то есть 0,5 вольта в данном случае. Напряжение между A0/A1 и общим выводом не должно быть более чем ref, или 5 вольт в данном случае.
Ничё не понял, но все равно пасибки. Домой доберусь попробую. Сейчас на работе.
Потестил, так работает. А вот макрос из библиотеки - не компиляется, выдает синт. ошибки. Посмотрел ваш код и код макроса - там явно ошибки: судя по вашему коду неверно устанавливается DIDR0, а в остальном тоже самое. Кажется смог поправить, итого получилось так:
Просто сравнил оба варианта и понял, что это "одно и тоже", но второй вариант для меня значительно читабельнее. Особенно через пару месяцев.
Пасибки вам, что помогли разобраться.