Jump to content

LEVV2006

Members
  • Content Count

    395
  • Joined

  • Last visited

  • Days Won

    1

LEVV2006 last won the day on March 17 2015

LEVV2006 had the most liked content!

Community Reputation

162 Хороший

About LEVV2006

  • Rank
    Постоялец
  • Birthday 11/10/1990

Контакты

  • Skype
    LEVV2008

Информация

  • Пол
    Мужчина
  • Город
    Москва

Электроника

  • Стаж в электронике
    Не связан с электроникой
  • Сфера радиоэлектроники
    Микроконтроллеры, Усилители НЧ
  • Оборудование
    Matrix MOS-620CH
    Aoyue Int968A+
    DT860B+

Recent Profile Visitors

4935 profile views
  1. Под нагрузкой 2,5в А что вы предлагаете вместо AVR?......STM? Там с ума сойдешь пока разберешься! Кроме того для моих задач AVR c запасом и даже БОЛЬШЕ!
  2. Всем привет! Давно разрабатываю проект беспроводного и живучего датчика температуры. Вообще изначально я хотел найти готовое устройство с понятным интерфейсом взаимодействия. Что бы без гемороя и танцев с бубном можно было подключать датчик температуры к любому проекту (Как пример: часы на ГРИ или ВЛИ) и просто выводить температуру. К сожалению ничего вменяемого я не нашел. Либо датчики используются в закрытой эко-системе. Либо это BLE с которым вообще не понятно как работать ибо информации почти нет. Решил попробовать разработать такую вещь самостоятельно. Конечно это изобретение велосипеда, но лично для себя я практиковался с BME280, nrf24l01 и сном МК. Как минимум тут выгода есть Вот что получилось. Приемник и передатчик. Немножко информации. Приемник: МК (328p) + USB to COM (CP2102) ____ (Дополнительно светодиод и расшивка SPI) частота 8MHz от внутреннего кварца Передатчик: МК (328p) + BME280 + nrf24l01 + бат CR2032 +Опорное напряжение ____ (Дополнительно светодиод и расшивка SPI, uart, кнопка) частота 1MHz от внутреннего кварца Что по потреблению: Очень долго пытался понять по мультиметру, но он постоянно как то врал. При первом сне показывал 40мкА, а потом с каждой итерацией сна прибавлял +10мкА. В общем поставил стрелочный прибор на 100мкА По прибору. ЕСЛИ ВСЕ ШТАТНО РАБОТАЕТ!!!!! Во время сна стрелка лежит в 0. При измерении и отправке 70-100мкА. Но стрелка мгновенно дергается и потом сразу в 0. ВОТ Дальше я зашел в тупик! И мне нужна ваша помощь! 1) У меня в СОМ порт постоянно летят логи программы и как выяснилось это очень много жрет энергии. Странность вот в чем. Если вытащить провода Тх, Rx то МК как бы зависает несколько секунд для отправки пакета.... скажите разве у UART есть подтверждение отправки пакета? 2) Я решил убрать вообще весь код UART. И все равно если убрать провода Тх, Rx то зависание присутствует (Зависание я фиксирую на стрелочном приборе. Как максимальное потребление и неуход в сон). PS/ питаю все от 3,3в с платы конвектора 3)Теперь я подключаю батарейку она у меня немного подсевшая 2,8в, Но я планировал что устройство должно работать до 2в! . Раз я отключил UART, то решил использовать светодиод как метку как выполняется код. И вот еще САМАЯ СТРАННАЯ проблема. Программа не стартует! Вообще. Идет большое потребление тока, но светодиод не горит. Почему так происходит? ___________________________________________(У меня есть предположение что это бутлоадер как то не так себя ведет..... ) PS/ в Фьюзах я отключил отслеживание питания.
  3. Главное сам разобрался! Будет теперь наука
  4. ПОБЕДА! Но не совсем моя конечно..... 1) Я вносил изменения в Toolchain чтобы корректно отображался вывод числа с плавающей точкой. Зря я это делал..... Он давал кривой подсчет температуры. (Правда температура у меня почему то все равно отрицательная....) PS: нашел причину!!!! Не правильно производил чтение регистров. Младший байт задвигал на место старшего (не до разобрался в даташите ). (Я вообще не программист- это хобби по вечерам ). Температура заработала как надо! Но доделывать я свой код не буду сторонний мне понравился больше. 2) Совершенно случайно наткнулся на этот сайт. Библиотека с сайта стартанула СРАЗУ! и все заработало. Наконец то что то заработало без танцев с бубном! Кстати очень интересно (на мой взгляд) написан код! И весит он совсем не много Program Memory Usage : 6344 bytes 19,4 % Full Data Memory Usage : 125 bytes 6,1 % Full В общем прикладываю проект к этому сообщению + часть даташита на русском (может кому то будет интересно) bme280 Рус.DOCX BME280Term.rar
  5. Не у кого нет библиотеки........? Странно.... ну ладно. Я то продолжаю разбираться самостоятельно. Я частично (используя гугл) перевел даташит. Кое что узнал интересное и полезное. Решил разбираться с датчиком по частям и начать с температуры. Убрал из библиотеки все лишнее и оставил только температуру. Код отрабатывает. Но блин!!!!!! температура рассчитывается не верно! Что заметил: int32_t adc_T=bme280_read3Byte(BME280_REGISTER_TEMP_DATA); //Считываю регистры температуры. (прям по даташиту) printf("adc_T %x\n",adc_T); // Вывожу что считал с резисторв //adc_T a530 (к примеру такой ответ) adc_T >>= 4; //Сдвик на 4 в право так как там нули и эти бити не используются (по даташиту) printf("adc_T>> %x\n",adc_T); //adc_T>> 4a53 (а на деле вот такой ответ. Откуда 4 взялась?????) В общем я не знаю что за фигня твориться.... Толи числа большие и идет где то идет наслоение в оперативной памяти, то ли компилируется что то криво.... Других объяснений нет. Данные по другим резисторам: CHIPID 0x60 dig_T1 f270 dig_T2 56a dig_T3 3200 adc_T a890 adc_T>> 4a89 Temperature -29.21
  6. Всем привет! Порция очередных сложных вопросов от меня . Что то я совсем не соображу что не работает.... Подключаю датчик BME280 к Atmega328p 16МГц. Для работы с датчиком естественно требуется библиотека. Поискав в интернете я нашел (вроде как) рабочий вариант. Да еще и с примером! Всё это дело я скачал, скомпилировал и попробовал запустить. Итог предсказуем. Ничего не заработало и в первую очередь не стартанула библиотека I2C. Решил что будет надежнее написать самостоятельно попутно разбираясь в коде библиотеки. Библиотеку I2C я использовал свою проверенную :) ,а далее я вооруженный даташитом на BME280 адаптировал скачанную библиотеку для BME280. В целом ничего сложного нет. За вечер получилось все привести в норму. Считываются данные с регистров, ID датчика совпадает с даташитом. Кажется что все работает нормально. Но нет. Проблема в следующем: (Для теста я считываю только показатели температуры) 1) Не верные значения температуры. Причем любое не значительное изменение кода (не в формуле) влечет изменение показателя температуры. 2) Температура не изменяется. Все время в порт выводится одно и тоже. Она изменится если только что нибудь поменять в коде и перезалить прошивку. В чем может быть проблема? У кого нибудь есть уже проверенная и рабочая библиотека? main: I2C: BME280:
  7. Нашел причину зависания. У меня кроме часов на плате есть датчик температуры\влажности. В общем или я его перегрел когда впаивал или это из того что флюс из под датчика не вымылся. Я отпаял датчик и вроде все заработало.... Правда часы какую то чушь пишут... но хотя-бы контроллер не зависает. Буду дальше ковырять....
  8. Опять чудеса. Через каждую строчку кода прописал printf Код стал выполняться и добрался уже до библиотеке I2C. B Застрял в команде start... точнее в настройке TWCR = (1<<TWINT|1<<TWSTA|1<<TWEN); Что примечательно! Эту библиотеку я уже использовал в другом проекте и с тем же МК. Все работало....
  9. А можно поподробнее? Где это посмотреть\проверить?
  10. Я использую бутлоадер для загрузки прошивки. Настроен он так что запускается после нажатия кнопки ресет.
  11. IDE-AtmelStudio Watchdog - нет. Библиотека работы с I2C кривая - Выполнение кода не доходит до обращения к библиотеке. Режим отладки ? Не ? - Я не могу выбрать в настройках симулятор...
  12. Все привет! В очередной раз столкнулся с аномалией...... Пишу код опроса часов DS3231. Библиотеки есть, код написан (как мне кажется без ошибок), компилятор неначто не ругается. Заливаем. МК пытается стартовать..... А потом переключается на бутлоадер как будто после кнопки ресет.. Я немного сгруппировал код. Такой код выполняется (судя по монитору Сом пора) до строчки printf("0 (init_i2c)\n"); Дальше МК перезагрущается. Если код изменить так: То код выполняется как надо и программа продолжает работать. (Строчки printf("0 (init_i2c)\n"); и printf("1\n"); ) отрабатывают как надо. И значения переменным присваивается тоже нормально. Почему так происходит и куда копать? Вот из дизассемблера: Также заметил. Что при не рабочей версии кода иногда в Сом порте не полностью выводится сконтольная строка. Вместо: 0 (init_i2c) Может быть написана: 0 (init_i2c
  13. Когда я писал алгоритм на С у меня была проблема с первым светодиодом. Он всегда загорался разным цветом, а остальные горели нормально...... Вот я и искал библиотеку. Хорошо что у вас заработало сразу!
  14. Если подключить логически анализатор то вы увидите что код написанный на С выполняется дольше чем нужно. И во временные рамки протокола вам не попасть!!! Сам пробовал..... Единственный и нормальный выход из ситуации использовать стороннюю библиотеку. Прикрепил файл. Библиотека маленькая и понятная. Я её использую и по логическому анализатору все четко по временным рамкам. light_ws2812_AVR.rar
  15. Извините что вмешиваюсь. Всю ветку не читал. НО яркость на своих диодах я меняю одной строчкой. ws2812_buff=(uint8_t)((double)DataArray[i+3]*(((double)DataArray[2]*25.0+1.0)/255.0)); Данный приходят с ПК в виде R (0-254), G (0-254), B (0-254) И яркости (0-100) ws2812_buff - буфер цвета DataArray[i+3] - Код цвета. DataArray[2] - Яркость.
×
×
  • Create New...