• Объявления

    • admin

      Внимание! Постить только по теме "электроника"   02.09.2016

      Внимание! В данном разделе разрешено создавать только темы связанные с электроникой. Для проблем с ПО не связанных с электроникой существует специальный раздел.
      Нарушители будут забанены на 5 суток!
  • ×   Вставлено в виде отформатированного текста.   Восстановить форматирование

      Разрешено не более 75 смайлов.

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

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

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

  • Похожие публикации

    • Автор: ximik_se
      Всем привет.

      Решил сделать небольшую домашнюю метеостанцию.

      Есть приемник с экраном, куда выводится инфа (построено на ATMEGA 328P) и есть передатчик, который посылает инфу по возудху (построено на ATtiny85).

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

      При этом время между измерениями не меньше 20 сек.

      В общем заказал я себе с Китаюшки более точные датчики - 

      CJMCU-1080 HDC1080
      Вещица прекрасная, но общается по I2C.

      А библиотеку рабочую под нее я смог найти только одну "ClosedCube_HDC1080.h" и никаких модификаций под ATtiny я найти не смог.

      Для ее работы соответственно нужен Wire.h

      В общем решил я его поковырять самостоятельно, хоть и не прогер. Забрался во внутренности ClosedCube_HDC1080.cpp и везде заменил Wire на TinyWireM (некий аналог Wire для ATtiny).

      И у меня даже получилось считывать валжность, но вот вместо температуры приходит гадость. Ибо при компиляции Arduino IDE ругалась на строку (я ее ниже в коде закомментировал)
      uint8_t buf[4]; for (int i = 1; i < (seconds*66); i++) { TinyWireM.beginTransmission(_address); TinyWireM.write(0x00); TinyWireM.endTransmission(); delay(20); TinyWireM.requestFrom(_address, (uint8_t)4); // TinyWireM.readBytes(buf, (size_t)4); } Ошибку пишет следующую:

      \ClosedCube_HDC1080.cpp: In member function 'void ClosedCube_HDC1080::heatUp(uint8_t)':

      \ClosedCube_HDC1080.cpp:81:13: error: 'class USI_TWI' has no member named 'readBytes'

      TinyWireM.readBytes(buf, (size_t)4);
      Может есть ребята более понимающие в коде и сумеющие победить эту проблему, чтобы и температуру этот датчик смог передавать через ATtiny85.

      Вот полный текст файла ClosedCube_HDC1080.cpp (уже замененный ну и строчка закоментирована):
      #include <TinyWireM.h> #include "ClosedCube_HDC1080.h" ClosedCube_HDC1080::ClosedCube_HDC1080() { } void ClosedCube_HDC1080::begin(uint8_t address) { _address = address; TinyWireM.begin(); // Heater off, 14 bit Temperature and Humidity Measurement Resolution TinyWireM.beginTransmission(_address); TinyWireM.write(CONFIGURATION); TinyWireM.write(0x0); TinyWireM.write(0x0); TinyWireM.endTransmission(); } HDC1080_Registers ClosedCube_HDC1080::readRegister() { HDC1080_Registers reg; reg.rawData = (readData(CONFIGURATION) >> 8); return reg; } void ClosedCube_HDC1080::writeRegister(HDC1080_Registers reg) { TinyWireM.beginTransmission(_address); TinyWireM.write(CONFIGURATION); TinyWireM.write(reg.rawData); TinyWireM.write(0x00); TinyWireM.endTransmission(); delay(10); } void ClosedCube_HDC1080::heatUp(uint8_t seconds) { HDC1080_Registers reg = readRegister(); reg.Heater = 1; reg.ModeOfAcquisition = 1; writeRegister(reg); uint8_t buf[4]; for (int i = 1; i < (seconds*66); i++) { TinyWireM.beginTransmission(_address); TinyWireM.write(0x00); TinyWireM.endTransmission(); delay(20); TinyWireM.requestFrom(_address, (uint8_t)4); // TinyWireM.readBytes(buf, (size_t)4); } reg.Heater = 0; reg.ModeOfAcquisition = 0; writeRegister(reg); } float ClosedCube_HDC1080::readT() { return readTemperature(); } float ClosedCube_HDC1080::readTemperature() { uint16_t rawT = readData(TEMPERATURE); return (rawT / pow(2, 16)) * 165 - 40; } float ClosedCube_HDC1080::readH() { return readHumidity(); } float ClosedCube_HDC1080::readHumidity() { uint16_t rawH = readData(HUMIDITY); return (rawH / pow(2, 16)) * 100; } uint16_t ClosedCube_HDC1080::readManufacturerId() { return readData(MANUFACTURER_ID); } uint16_t ClosedCube_HDC1080::readDeviceId() { return readData(DEVICE_ID); } uint16_t ClosedCube_HDC1080::readData(uint8_t pointer) { TinyWireM.beginTransmission(_address); TinyWireM.write(pointer); TinyWireM.endTransmission(); delay(9); TinyWireM.requestFrom(_address, (uint8_t)2); byte msb = TinyWireM.read(); byte lsb = TinyWireM.read(); return msb << 8 | lsb; }  
    • Автор: 55nlo
      Написать программу Асм атмега 1284.
      Фрагмент: после команды считать рабочий регистр (в котором может появиться число от 1 до 50) каждому числу  соответствует 4 значения  (это таблица) их нужно загрузить в четыре рабочих регистра для дальнейшей обработки)
       Где лучше хранить таблицу?
      Пример: считали 48  числа 5; 8; 21; 25
                      Считали 31 числа 4;  9; 11; 35
       
    • Автор: VisualNT
      Доброго времени суток!
      Может кто-нибудь объяснить, в чём смысл и преимущества использования специализированных программаторов для STM32 типа ST-Link и клонов, работающих по интерфейсам SWD/JTAG, если записать флеш можно прямо по UART/ISP или быстрее по USB (при его наличии)?
      Я так понимаю, что программаторы, кроме записи в память, ещё умеют выполнять отладку - и это их единственное отличие.
      А если отладка не нужна? Вернее, часто ли она используется при написании каких-нибудь маленьких прикладных программ типа реле времени? Я собираюсь развести свою печатную плату для STM32F107, а потом хочется поэкспериментировать с STM32F407ZGT - в них в обоих есть USB интерфейс, они оба есть в списке поддерживаемых USB DFU (согласно AN 3156). Но на форуме я прочитал, что пока все сидят на дискавери, в основном из-за того, что в ней есть встроенный программатор ST-LINK прямо на плате, но почему его наличие так важно и не заменяется возможностью программирования по UART/ISP или по USB? Есть ли какое-либо отличие кроме возможности отладки? Может быть, как и в случае со фьюзами у AVR, у STM32 есть какие-то функции/настройки, которые можно использовать/изменять только программатором ST-LINK?
      И да, разве скорость программирования по USB будет существенно ниже, чем по тому же JTAG или SWD?
      Заранее спасибо за ответы! Заранее предупрежу, чот с микроконтроллерами я раньше работал, но вот от ST что-то более-менее делал только на STM32F030...
    • Автор: Дуч
      Здравствуйте.
      Есть два программатора Pickit3. Один из них китайский клон, другой оригинал от Microchip.
      Китаец стирает калибровочную константу Pic12f629, а оригинал прошивает и проблем нет. Подскажите причину стирания константы?
    • Автор: Stellaris
      Доброго здравия всем участникам.
      Помогите разобраться.Прибор,управляемый контроллером LM3S5749,не хочет работать,требуя ТО, провести которое не представляется возможным.
      Уважаемые форумчане, подскажите как разобраться с этой проблемой. Перевести время назад с вторичного прибора не получается, может сделать сброс счётчика часов наработки ?,но из-за маленького опыта боюсь снести всю программу. Выручайте,помогите добрым советом.
  • Сообщения

    • Не, там уже всё схвачено-захвачено, всякими за...нцами.  
    • Чистую слюду можно намотать, наложив её на скотч. Скотч сгорит,слюда останется.
    • Омметр, бумагу, карандаш в руки и вперёд. Навскидку Ватт 30-40.
    • У тебя МХ 74НС04 питается от 5 вольт, значит к 5 вольтам. А вообще нужно уточнить какой выход в ЭБУ, потом окончательно решить. Что там на выходе транзисторы или МХ.

       
    •  Если намотать спираль и прокалить, то проволока покрывается пленкой окиси, защищая соседние витки от замыкания, тем более, напряжение питания низкое. Материал, диаметр и длина проволоки выбирается исходя из требуемой мощности и параметров источника питания.
      Изолятор - миканит. Это композитный термостойкий материал на основе слюды (чистая слюда хрупкая и намотать её на тонкий стержень сложно).
    • Мало того, в таких датчиках еще и линзы "корявые" (иногда специально для создания нужного сектора). Т.е. аберрации там ого-го. Главное тут дешевизна.
      Я поэтому и говорил что фокусировки тут не требуется. При блуждании объекта на метры там смещение плоскости фокусировки на десятые доли мм. Да. Не все лучи что попали в линзу попадут на чувствительный элемент. Некоторые пройдут "мимо кассы" (зависит от габаритов оного). Этим можно и по регулировать. Исходя из размеров линзы 5 мм, габарита чувствительного элемента 3 мм, Fлинзы=30 мм и расстояния до объекта порядка 6м. Я прорисовывал на сколько это возможно. Да, теория работает, но особо там не по варьируешь. Видимо пропорции такие. Действительно если надо изменить угол сектора значительно это лучше сделать либо площадью сенсора либо фокусным расстоянием линзы (т.е. их заменой).
    • Самый экономичный вариант на полевике. Контакты и питание сами сообразите как подключить. Ёмкость конденсатора подберёте на нужное время.