Перейти к содержанию

Видеокурс по AVR-микроконтроллерам для начинающих


Рекомендуемые сообщения

Попробовал, добился, чтобы компилировалось без ошибок. Верхняя кнопка переключения эффектов работает, а вторая кнопка (скорость) все равно не работает

На всякий случай скину архив с проектами Urok5 - сделан в CVAVR работает как надо. Urok5Atmel - то, что я пытаюсь переделать под Atmel Studio7

CVAVR Opjat Knopki.rar

Мир не без добрых людей!

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Какая "верхняя кнопка" ? Что за "вторая кнопка" ? Вы о чём ? Причём тут кнопки, если Вы спрашивали про задержку ?
Что за отрывки цитат из собственных мыслей ? Которые мы, если что, читать не умеем...

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Ну я же прикрепил архив и с протеусом и с исходниками. Там как раз интересная разработка для изучения прерываний. Один вариант в CVAVR - работает прекрасно, первой кнопкой переключаются эффекты, второй кнопкой изменяется скорость эффектов. Я из него пытаюсь сделать вариант в Atmel Studio7 и столкнулся с проблемой при компиляции. 

Изменено пользователем gogaze

Мир не без добрых людей!

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

@gogaze ,  конечно код из CV не будет компилироваться в AS7 ,  язык Си Атмел студии хоть и похож на язык CV ,  но много различий в синтаксисе . Много в коде придется подправлять . Смотрите в студии файл iomXXX.h там есть все макросы которые она понимает , сравниваете с текстом СV и правите в понятные студии макросы .

Ссылка на комментарий
Поделиться на другие сайты

5 часов назад, DmitryS сказал:

@gogaze ,  конечно код из CV не будет компилироваться в AS7 ,  язык Си Атмел студии хоть и похож на язык CV ,  но много различий в синтаксисе . Много в коде придется подправлять . Смотрите в студии файл iomXXX.h там есть все макросы которые она понимает , сравниваете с текстом СV и правите в понятные студии макросы .

А зачем тогда атмеловцы в студиях начиная с версии 6.1 в качестве плагина используют CVAVR? Даже в интерфейс студии встраивается генератор кода и тулчейн CVAVR.

Я пробовал в delay.h  закоментировать строку __builtin_avr_delay_cycles(__ticks_dc); - компилируется, но светодиоды начинают зажигаться хаотично

Изменено пользователем gogaze

Мир не без добрых людей!

Ссылка на комментарий
Поделиться на другие сайты

Для вас что, работа в Студии самоцель? Чем вам CVAVR так не угодил? Чем мучиться, переделывать код с одного компиллятора на другой, давно бы уже реализовали свои хотелки на CVAVRе. Лично я уже много лет пользую именно его и ни на одну Студию не променяю.

Ссылка на комментарий
Поделиться на другие сайты

24 минуты назад, Sergey-Ufa сказал:

Для вас что, работа в Студии самоцель? Чем вам CVAVR так не угодил? Чем мучиться, переделывать код с одного компиллятора на другой, давно бы уже реализовали свои хотелки на CVAVRе. Лично я уже много лет пользую именно его и ни на одну Студию не променяю.

Ну так я первые шаги и делал  в CVAVR, но

Чтобы знать, что твоя жена лучше - надо попробовать чужую!

Изменено пользователем gogaze

Мир не без добрых людей!

Ссылка на комментарий
Поделиться на другие сайты

24 минуты назад, gogaze сказал:

Чтобы знать, что твоя жена лучше - надо попробовать чужую!

Одолжите свою, а то ведь кто поверит, что ваша лучше?

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

Ссылка на комментарий
Поделиться на другие сайты

8 часов назад, gogaze сказал:

А зачем тогда атмеловцы в студиях начиная с версии 6.1 в качестве плагина используют CVAVR? Даже в интерфейс студии встраивается генератор кода и тулчейн CVAVR.

Наверное за тем же , что и плагин Ардуино , в студии писать код гораздо приятней . Но компиляцией написанного кода занимается не  студия , а  IDE ардуины . Также наверное и с CV AVR .

Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, ARV сказал:

Одолжите свою, а то ведь кто поверит, что ваша лучше?

А мне не надо, чтобы кто-то поверил. Это МНЕ надо!!!

Точно так же одни расхваливают Atmel Studio, другие CVAVR, третьи еще что-то. Вот я сравню и сделаю вывод. Для себя!

Изменено пользователем gogaze

Мир не без добрых людей!

Ссылка на комментарий
Поделиться на другие сайты

Образования для! В седьмом уроке на третьей минуте автор говорит, что АЦП может работать в двух вариантах - по прерываниям и вручную. Я не нашел ни где однозначного ответа на вопрос - какой вариант лучше (точнее, быстрее и т.д.) Может кто-то объяснит? Или носом ткнет!

Мир не без добрых людей!

Ссылка на комментарий
Поделиться на другие сайты

Извиняюсь! Просто думал, что если опытные люди увидят мое сообщение, но сразу смогут объяснить разницу или преимущества.

Мир не без добрых людей!

Ссылка на комментарий
Поделиться на другие сайты

Только что, gogaze сказал:

Просто думал, что если опытные люди увидят мое сообщение, но сразу смогут объяснить разницу или преимущества

Оба варианта по точности и скорости одинаковы. Но принципиальное их отличие в том, что за "ручным" следить вы должны самостоятельно, а "по прерываниям" действуешь по принципу "включил и забыл". Например, вам надо снять 100 семплов. В ручном режиме вы сделаете цикл на 100 повторорений запуска АЦП и ожидания его преобразования, а затем сохранения данных в массив. Естественно, пока этот цикл не завершится, более ничего вы делать не сможете. Если сделать по прерываниям, то после первичного запуска АЦП вы можете заниматься своими делами, иной раз проверяя - закончен ли "съем данных" или нет. Многие МК позволяют запуск АЦП делать по аппаратному событию, что вообще развязывает ваши руки для более приятных занятий (не поймите меня не правильно).

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

Ссылка на комментарий
Поделиться на другие сайты

8 часов назад, gogaze сказал:

Образования для! В седьмом уроке на третьей минуте автор говорит, что АЦП может работать в двух вариантах - по прерываниям и вручную. Я не нашел ни где однозначного ответа на вопрос - какой вариант лучше (точнее, быстрее и т.д.) Может кто-то объяснит? Или носом ткнет!

Прерывания гарантируют время реакции процессора на событие, и обычно (точнее всегда!) в документации на процессор есть соответствующий раздел.

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

Для вас это выливается в ответ на вопрос когда вы хотите обработать полученное с АЦП значение:

 в заданное на вызов процедуры прерывания время, или

когда получится опросить флаг в фоновой программе.

Изменено пользователем ruhi

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

Если я вас правильно понял, то когда у контроллера одна задача - проверка АЦП, то можно использовать любой из вариантов? И еще один момент. Основная роль задержки в While (1) - устаканивание показаний на дисплее или... Собранный проект на макетке (читай - в железе) ни какой разницы не показал - что с _delay_ms(200), что без него.

Мир не без добрых людей!

Ссылка на комментарий
Поделиться на другие сайты

3 минуты назад, gogaze сказал:

Если я вас правильно понял, то когда у контроллера одна задача - проверка АЦП, то можно использовать любой из вариантов? И еще один момент. Основная роль задержки в While (1) - устаканивание показаний на дисплее или... Собранный проект на макетке (читай - в железе) ни какой разницы не показал - что с _delay_ms(200), что без него.

Это уже две задачи, как минимум, выполнить АЦП, и что то сделать с результатом, вывести на экран, например. Раз вы не видите проблем значит вам любой вариант подойдет (обычно)вы же не цифровой обработкой сигналов занимаетесь, а на термометр хоть раз в секунду, хоть в минуту смотреть - разницы нет. Про While (1) я не видел откуда он.

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

29 минут назад, gogaze сказал:

так с урока 8

2017-12-12_195110.jpg

Это-задержка чтоб экран не мельтешил, скорее всего, точно с индикацией связано.

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, ruhi сказал:

Это-задержка чтоб экран не мельтешил, скорее всего, точно с индикацией связано.

Когда я делал практически то же самое на 16х02 то изменение значения этой задержки было очень заметно. На 5110 нет. Может (не знаю как правильно назвать) инерционность у этих дисплеев разная?

Изменено пользователем gogaze

Мир не без добрых людей!

Ссылка на комментарий
Поделиться на другие сайты

10 минут назад, gogaze сказал:

Когда я делал практически то же самое на 16х02 то изменение значения этой задержки было очень заметно. На 5110 нет. Может (не знаю как правильно назвать) инерционность у этих дисплеев разная?

а что было заметно то? моргание или значения менялись? 

Что хотим то, вообще, если научиться чем то управлять, то надо внутрь функций LCDprintf, LCDupdate, readADC, presets() залазить и разбираться, что то менять и проверять свои предположения о том на что это изменение повлияет.

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

Только что, gogaze сказал:

Когда я делал практически то же самое на 16х02 то изменение значения этой задержки было очень заметно

Вышеприведенный код в цикле делает Lcd_clear(), поэтому мерцание будет видно обязательно, хоть с задержкой, хоть без. Просто с задержкой оно реже происходит и менее заметно.

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

Ссылка на комментарий
Поделиться на другие сайты

10 часов назад, ruhi сказал:

а что было заметно то? моргание или значения менялись? 

Если задержка была маленькой - значения последнего знака прыгали практически постоянно, без остановки. Да, проект тот был сделан в CVAVR с использованием прерываний  мастером создания проектов.

Да, по совету (не помню откуда) добавил электролит 100х16 на AVREF - тоже помогло.

С этим разобрался, всем большое спасибо! 

Вот теперь главный вопрос: как к этому проекту прикрутить счетчик ампер-часов. В интернете ни уроков ни примеров связанных со счетчиком не нашел. Задавал этот вопрос на других форумах, но ответы типа "Каждую секунду суммируешь текущее значение тока в накопитель. Результат делишь на 3600." - мне, как начинающему, ни о чем не говорят.

Так вот, собственно, огромная просьба - если пример такого кода - тайна, то хотя бы направьте в нужное направление пошагово типа  

 1. Подключить и настроить таймер (или что там надо),

 2. Какую-то переменную создать. ну и т.д. Я думаю - вы поняли.

Изменено пользователем gogaze
Дополнение к тексту

Мир не без добрых людей!

Ссылка на комментарий
Поделиться на другие сайты

22 часа назад, gogaze сказал:

но ответы типа "Каждую секунду суммируешь текущее значение тока в накопитель. Результат делишь на 3600." - мне, как начинающему, ни о чем не говорят.

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

Ссылка на комментарий
Поделиться на другие сайты

52 минуты назад, Alex сказал:

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

А жалко, что не увижу! Так как совет 

 

54 минуты назад, Alex сказал:

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

понятен опытным программистам, а эта тема в форуме относится к "Урокам для НАЧИНАЮЩИХ", к которым я и отношусь. Именно поэтому я и прошу:

 

23 часа назад, gogaze сказал:

огромная просьба - если пример такого кода - тайна, то хотя бы направьте в нужное направление пошагово типа  

 1. Подключить и настроить таймер (или что там надо),

 2. Какую-то переменную создать. ну и т.д. Я думаю - вы поняли.

Я на других форумах тоже пытался получить помощь по вопросу счетчика ампер-часов, и в ответ либо тишина, либо отписки ни о чем. По этому поводу у меня сложилось впечатление что:

1. Код для счетчика ампер-часов очень сложно написать и он по силам очень опытным программистам, а такие по подобным темам форумов не лазят. Соответственно и помочь не могут.

2. Либо те, кто может оказать помощь хотят получить за нее что-то. Ну так написали бы!

3. Мистика - на этот вопрос наложено ТАБУ!

Мир не без добрых людей!

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • #include <Wire.h> #include <Oregon_TM.h> #include <BME280I2C.h> //////////////////////////////////////////////////////////////////////////////////////////////////////////// //Скетч для устройства, передающего данные датчика BME280 в формате Oregon Scientific THGN132N //Принципиальная схема прилагается. //Для работы необходима библиотека https://github.com/finitespace/BME280/ //Устройство работает от 3-ех пальчиковых батареек, для экономии электричества заливать скетч нужно через ISP //////////////////////////////////////////////////////////////////////////////////////////////////////////// //Также возможна передача данных в формате - THP (температура, влажность, давление, напряжение батареи) //Пример с приёмником поддерживает расшифоовку THP //////////////////////////////////////////////////////////////////////////////////////////////////////////// # define THGN_SEND 1 // Передавать ли данные в формате THGN132 # define THP_SEND 0 // Передавать ли данные в формате THP # define DEVICE_LOG 1 //Писать ли лог В Serial # define DONE_PIN 15 // вывод сигнала об окончании работы на таймер # define BME_WAIT 10 // Сколько мс ожидать датчик BME # define BATTERY_THR 3.5 // Порог напряжения для выставляения флага разряда батарейки (THGN) ///////////////////////////////////////////////////////////////////////////////////////////////// //Ниблы датчика THP //Во всех полях младшие ниблы идут вперёд!!! // 1-2 - тип (55) // 3 - канал (0-7) // 4-6 - (температура от -100С) * 10. Т.е. +25.1С = 1251 = 4E3h // 7-9 - Влажность *10 Т.е. 25.1% = 251 = 0FBh // 10-12 - (давление от 500ммртст) * 10. Т.е. 765мм = 2650 = A5Ah // 13-15 - данные с АЦП (A0) // 16-17 - CheckSUM // 18-19 - CRC8 (poly 0x07 start 0x00) ///////////////////////////////////////////////////////////////////////////////////////////////// Oregon_TM transmitter(4); BME280I2C bme; bool bme_present = false; float bme_temp(NAN), bme_hum(NAN), bme_pres(NAN); ///////////////////////////////////////////////////////////////////////////////////////////////// void setup() { digitalWrite(DONE_PIN, LOW); pinMode(DONE_PIN, OUTPUT); #ifdef DEVICE_LOG Serial.begin(115200); Serial.println("Waiting for BMEsensor..."); #endif //Обмен данными с BME////////////////////////////////// Wire.begin(); while(!bme.begin()) { if (millis() > BME_WAIT) break; } if (!bme.begin()) { #ifdef DEVICE_LOG Serial.println("No BME sensor found"); #endif bme_present = false; } else { switch(bme.chipModel()) { case BME280::ChipModel_BME280: bme_present = true; bme.read(bme_pres, bme_temp, bme_hum); #ifdef DEVICE_LOG Serial.println("Found BME280 sensor! Success."); Serial.print("Temperature = "); Serial.print(bme_temp, 1); Serial.println("C"); Serial.print("Humidity = "); Serial.print(bme_hum, 1); Serial.println("%"); Serial.print("Pressure = "); Serial.print(bme_pres * 0.75, 1); Serial.println("mmHg"); #endif break; default: #ifdef DEVICE_LOG Serial.println("Found UNKNOWN sensor! Error!"); #endif bme_present = false; } } //Напряжения батареи/////////////////////////////////////////// word battvotage = (word)(((float)(1.1 * 16368) / Vbg()) * 100); #ifdef DEVICE_LOG Serial.print("Battery voltage = "); Serial.println(battvotage,HEX); #endif //Подготовка и отправка данных THGN////////////////////////////////////// transmitter.protocol == 2; if (THGN_SEND) { transmitter.setType(THGN132); transmitter.setChannel(3); transmitter.setBatteryFlag(battvotage < BATTERY_THR); if (bme_present) { if (bme_hum > 98) bme_hum = 98; if (bme_hum < 2) bme_hum = 2; if (bme_temp > 70) bme_temp = 70; if (bme_temp < -50) bme_temp = -50; transmitter.setTemperature(bme_temp); transmitter.setHumidity(bme_hum); transmitter.setComfort(bme_temp, bme_hum); } else { transmitter.setTemperature(-49.9); transmitter.setHumidity(2); transmitter.setComfort(-49.9, 2); } transmitter.SendPacket(); } // Если отправляются оба формата пакетов, межу ними надо выдержать паузу if (THP_SEND && THGN_SEND) delay(100); //Подготовка и отправка данных THP////////////////////////////////////// if (THP_SEND) { transmitter.setType(THP); transmitter.setChannelTHP(1); transmitter.setBatteryTHP( battvotage); if (bme_present) { transmitter.setTemperatureTHP(bme_temp); transmitter.setHumidityTHP(bme_hum); transmitter.setPressureTHP(bme_pres * 0.75); // перевод Pa в mmHg } else { transmitter.setErrorTHP(); } transmitter.SendPacket(); } #ifdef DEVICE_LOG Serial.println(); Serial.print(millis()); Serial.println("ms"); Serial.println(); #endif //Команда на отключение питания digitalWrite(DONE_PIN, HIGH); } ///////////////////////////////////////////////////////////////////////////////////////////////// void loop(){} ///////////////////////////////////////////////////////////////////////////////////////////////// int Vbg() { ADMUX = (1<<REFS0)|(0<<REFS1)|(1<<MUX3)|(1<<MUX2)|(1<<MUX1)|(0<<MUX0); long buffersamp=0; for (int n=0x0; n<=0xff; n++ ) { ADCSRA = 0xc7; while (bit_is_set(ADCSRA,ADSC)); buffersamp += ADC; } buffersamp >>=4; //16368 full scale 14bit ADCSRA &= ~(1 << ADEN); // отключаем АЦП return buffersamp; } Вот код программы. Пробовал по разному и от 5в запитывал и всю систему от 3,3 в. Причем голая ардуинка с таймером работает в нормальном режиме некоторое время, но потом все равно слетает и начинает питать мк постоянно( Причем это происходит всегда через разный промежуток времени.
    • На фото может быть название , характеристики и т.д. И по этому фото я смогу выбрать такой же в инете.. самому мне не собрать..
    • А что даст фотка? Тот же щуп, только чуть крупнее и с проводами питания.
    • Для меня наверное лучше купить готовый.. цель повысить чувствительность до 1 mV.. Наверное на Авто стоит покупать , мне бы фотку какую нить..такого активного щупа..))
    • Так на схемах обозначается подключение к сети 220 В.
    • Привет, радионарод! Вот, решил показать, рассказать и дать попробовать свою придумку, как я внешнюю синхронизацию к "ослику" прикрутил. DSO138 уже не так популярен, но кто-то пользуется, кому-то быть может пригодится. Подробной информации по таким доработкам в сети не встречал, так что делюсь, чем сам измыслился. Собственно, схема. Немного фоточек. С "ослика" не пугайтесь, не умею я делать красивые корпуса с красивыми мордами лица к ним. Двухканального функционального генератора с возможностью двигать фазу у меня нет, поэтому какая-то программа-генератор из Интернетов, звуковая карта и DSO138. Смотрим синус, т.к. меандр из звуковухи никакой. Конечно, видна погрешность в измерениях. Прибор-то - игрушка. Да и генератор не блещет точным сигналом. Полноценного аналога внешней синхронизации (как у аналоговых приборов) не получится, но даже в таком виде эта доработка расширяет функционал осциллографа и дает в некоторых случаях возможность изучать два сигнала. Как пользоваться. Из иных доработок. Как видите, дурацкие ползунковые переключатели заменены на сдвоенные галетники на три положения. Кнопки поставлены большие тактовые 12х12 мм. Подпаяны паралельно, старые удалять не нужно. Светодиод тоже в паралель. Питание батарейное, от аккумулятора старого "умнофона". Полтора ампер-часа, наверное. Плата зарядки, плюс повышайка с фильтрами по питанию. Корпус алюминиевый от "не-знаю-как-правильно-называется", там жесткий диск стоял с парой ветродуйчиков. Гетинакс, оргстекло.   Короче, удачи!
  • Похожий контент

×
×
  • Создать...