Контроллер управления усилителем (ищу наставника!)

Тема в разделе "Arduino & Shields", создана пользователем Барбос, 6 ноя 2015.

?

Поможем?

  1. Да

    2 голосов
    100,0%
  2. Нет

    0 голосов
    0,0%
  1. Барбос

    Барбос Нуб

    Всем привет!
    Начал осваивать программирование, и по ходу дела сделать что-то полезное. Хочу сделать блок для управления усилителем на основе arduino nano и TDA 7439, основными функциями которого будет:
    -Мягкий старт усилителя
    -Дистанционное упраление
    -Кнопочное управление
    -Переключатель на 4 входа (интегрировано в ИМС)
    -Регулировка частот (интегрировано в ИМС)
    -Контроль температуры на основе терморезистора
    -Подключение LCD по I2C
    -Часы реального времени на DS1307 (если хватит сил)

    На данном этапе нарисована схем. разведена плата и написана часть кода которая отвечает за контроль температуры.(маловато :( )
    Ищу наставника который мог бы помочь понять как это все реализовать и настроить. Попутно помочь с разработкой алгоритма. Есть желание учиться и получать новые знания.
     

    Вложения:

    • AMP_CONTROL.ino
      Размер файла:
      1,7 КБ
      Просмотров:
      455
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    Наставников тут навалом. Вы вопросы формулируйте поконкретней и кто-нибудь обязательно поможет.
     
  3. AlexU

    AlexU Гуру

    Поэтому есть вопросы, связанные с кодом AMP_CONTROL:
    1. Использование констант 'PD6', 'PC3' в функциях -- это нестандартный подход или просто где-то в инете увидели и решили использовать, не понимая, что это такое?
    2. Вы ознакомились с документацией на функции 'analogRead' и 'analogWrite'? Или посмотрели на их название и решили, что этого достаточно для понимания сути их работы?
     
  4. Vetrinus

    Vetrinus Гик

    Так, для того, чтоб было проще обсуждать, выкладываю код сюда:
    Код (C++):

    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>

    void setup ()
    {
      pinMode(PD6, INPUT); //PD6 пин — на вход сигнала
      pinMode(PC3, OUTPUT); //PC3 пин - на выход вентилятора
      pinMode(A6, OUTPUT); //A6 пин - на выход светодиода перегрева
      Serial.begin(9600); //связь с компьютером 9600 бит/с
      LiquidCrystal_I2C lcd(0x27, 16, 2); //установлен адрес дисплея to 0x27 на 16 символов и 2 строки
      lcd.init(); // Инициализация lcd
      lcd.backlight(); // Включаем подсветку
      lcd.print("HELLO"); // Выводим текст
      lcd.setCursor(0, 1);// Устанавливаем курсор в начало 2 строки
      lcd.print("NANO"); // Выводим текст
    }

    void loop()
    {
      int TEMP = analogRead(PD6); //читаем значение температуры с PD6
      int LEDTEMP = analogRead(PD6); //значение на индикатор перегрева
      int FAN = analogRead(PC3); //венитлятор на порт PC3
      if (TEMP >= 200) //Если значение температуры больше или равно 200
      {
        digitalWrite(PC3, LOW); //То выключить вентилятор
        analogWrite(A6, 0); //То выключить светодиод
      }

      else //В ином случае

      {
        digitalWrite(PC3, HIGH); //Включить вентилятор
        analogWrite(A6, 150); //Включить ШИМ на светодиод на 150
      }

      Serial.println(TEMP); //пишем это значение в последовательный порт (для калибровки)

      delay(10); // немного ждём
    }
     
     
  5. Vetrinus

    Vetrinus Гик

    Первый же вопрос у меня аналогичен вопросу оратора выше: что за PD6 и PC3 (что это выходы ног процессора - понятно, но где вы их взяли?)
    Далее.. Что у вас подключено к PD6 и PC3? Я, конечно, не копался в даташите TDA 7439, но терзают меня смутные сомнения, что для получения правильных значений не нужно производить никаких манипуляций с TEMP и FAN.
    Дистанционное управление - какое? ИК, радио, Wi-Fi? опишите подробнее.
    UPD.
    Код (C++):
    int TEMP = analogRead(PD6); //читаем значение температуры с PD6
      int LEDTEMP = analogRead(PD6); //значение на индикатор перегрева
    Как так? Что за считывание данных с двух периферийных устройств с одного порта? Это вообще законно?)))
     
    Последнее редактирование: 7 ноя 2015