Yanshun

Стерео Индикатор Уровня Сигнала На Pic16F88

29 сообщений в этой теме

MaratAM    15
В 10.05.2015 в 21:15, Yanshun сказал:

Я прошивал микроконтроллер с помощью прогромматора К-150 в программе DIY-150, данное устройство после прошивки микроконтроллера заработало сразу, все режимы индикации работают отлично. По цене вышло в 3-раза дешевле чем на LM 3916 на такое количество светодиодов

@Yanshun при прошивке нет подводных камней, типа калибровочные константы или фьюзы какие нибудь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Yanshun    377

@MaratAM Добрый день.

У данного контроллера нет калибровочной константы, поэтому стирать нечего. Все необходимые фъюзы уже вшиты в саму прошивку, поэтому выставлять ничего не нужно, как AVR.
Прошиваешь контроллер и устройство сразу готово к работе.

 

  • Одобряю 1

Поделиться сообщением


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сообщения

    • кто сказал что это условие будет выполнятся всегда? Если бы мс инкрементировали в этом же цикле, такое условие допустимо правильно писать if (millis() - lastmillis_mah) >= 1000) { }  
    • Пострадал следователь Лысейко...
      https://life.ru/t/новости/1135847/ubili_sobak_zabrali_20_tysiach_v_novoi_moskvie_oghrabili_eks-sliedovatielia_lysieiko
    • Пересоздал проект, ввел почти тот же код, почти все заработало корректно, но индикация через некоторое время останавливается (хотя микроконтроллер на кнопки реагирует). На железе индикация пропадает после 17 секунды, а в протеусе после 104. #include <EEPROM.h> #include <Bounce2.h> Bounce knopka_m = Bounce(); Bounce knopka_mah_plus = Bounce(); Bounce knopka_mah_minus = Bounce(); Bounce knopka_shl_plus = Bounce(); Bounce knopka_shl_minus = Bounce(); #define CLOCK 13 //SH_CP #define DATA 11  //DS #define LATCH 10  //ST_CP unsigned long lastmillis_show = 0; byte numbers[] = {0, 0, 0, 0, 0, 0}; volatile int rpmmah_count = 0; volatile int rpmshl_count = 0; boolean ee = 0; byte menu = 0; int mh = 1234; int hh = 0; int et_mah = 900; int et_shl = 80; int ot_mah = 30; int ot_shl = 3; int rpm_mah = 0; int rpm_shl = 0; unsigned long lastmillis_mah = 0; unsigned long lastmillis_shl = 0; unsigned char number[] = {   0b01111110, //0   0b00110000, //1   0b01101101, //2   0b01111001, //3   0b00110011, //4   0b01011011, //5   0b01011111, //6   0b01110000, //7   0b01111111, //8   0b01111011, //9   0b00000001, //-   0b00000000  //тушим индикатор }; // чтение int EEPROM_int_read(int addr) {   byte raw[2];   for (byte i = 0; i < 2; i++) raw[i] = EEPROM.read(addr + i);   int &num = (int&)raw;   return num; } // запись void EEPROM_int_write(int addr, int num) {   byte raw[2];   (int&)raw = num;   for (byte i = 0; i < 2; i++) EEPROM.write(addr + i, raw[i]); } void ee_write () {   EEPROM_int_write(0, mh);   EEPROM_int_write(2, hh);   EEPROM_int_write(4, et_mah);   EEPROM_int_write(6, et_shl);   EEPROM_int_write(8, ot_mah);   EEPROM_int_write(10, ot_shl); } void show() {   int x;   for (x = 5; x >= 0; x--) {     //включаем LATCH (Начинаем общение)     digitalWrite(LATCH, LOW);     shiftOut(DATA, CLOCK, LSBFIRST, number[numbers[x]]);     //отключаем LATCH (чтобы регистр не ждал данных)     digitalWrite(LATCH, HIGH);   } } void rpm_mahovik() { /* this code will be executed every time the interrupt 0 (pin2) gets low.*/   rpmmah_count++; } void rpm_shluz() { /* this code will be executed every time the interrupt 0 (pin2) gets low.*/   rpmshl_count++; } void setup() {   // put your setup code here, to run once:   Serial.begin(9600);   attachInterrupt(0, rpm_mahovik, FALLING);   attachInterrupt(1, rpm_shluz, FALLING);   pinMode(CLOCK, OUTPUT);   pinMode(DATA, OUTPUT);   pinMode(LATCH, OUTPUT);   digitalWrite(LATCH, HIGH);   pinMode(19, INPUT_PULLUP);   knopka_m.attach(19); // устанавливаем кнопку   knopka_m.interval(5); // устанавливаем параметр stable interval = 5 мс   pinMode(18, INPUT_PULLUP);   knopka_mah_plus.attach(18); // устанавливаем кнопку   knopka_mah_plus.interval(5); // устанавливаем параметр stable interval = 5 мс   pinMode(17, INPUT_PULLUP);   knopka_mah_minus.attach(17); // устанавливаем кнопку   knopka_mah_minus.interval(5); // устанавливаем параметр stable interval = 5 мс   pinMode(16, INPUT_PULLUP);   knopka_shl_plus.attach(16); // устанавливаем кнопку   knopka_shl_plus.interval(5); // устанавливаем параметр stable interval = 5 мс   pinMode(15, INPUT_PULLUP);   knopka_shl_minus.attach(15); // устанавливаем кнопку   knopka_shl_minus.interval(5); // устанавливаем параметр stable interval = 5 мс } void loop() {   // put your main code here, to run repeatedly:   if (EEPROM.read(0) == 0xFF) {     ee_write ();   }   if ((millis() <= 100) & (ee == 0)) {     mh = EEPROM_int_read(0);     hh = EEPROM_int_read(2);     et_mah = EEPROM_int_read(4);     et_shl = EEPROM_int_read(6);     ot_mah = EEPROM_int_read(8);     ot_shl = EEPROM_int_read(10);     ee = 1;   }   if (millis() - lastmillis_mah == 1000) {     detachInterrupt(0);     rpm_mah = rpmmah_count * 60;     rpmmah_count = 0;     lastmillis_mah = millis();     attachInterrupt(0, rpm_mahovik, FALLING);   }   if (millis() - lastmillis_shl == 5000) {     detachInterrupt(1);     rpm_shl = rpmshl_count * 12;     rpmshl_count = 0;     lastmillis_shl = millis();     attachInterrupt(1, rpm_shluz, FALLING);   }   if (millis() - lastmillis_show == 1000) {     if (menu == 0) {       numbers[0] = rpm_mah / 1000;       numbers[1] = (rpm_mah % 1000) / 100;       numbers[2] = ((rpm_mah % 1000) % 100) / 10;       numbers[3] = ((rpm_mah % 1000) % 100) % 10;       numbers[4] = rpm_shl / 10;       numbers[5] = rpm_shl % 10;     }     if (menu == 1) {       numbers[0] = mh / 1000;       numbers[1] = (mh % 1000) / 100;       numbers[2] = ((mh % 1000) % 100) / 10;       numbers[3] = ((mh % 1000) % 100) % 10;       numbers[4] = 11;       numbers[5] = 11;     }     if (menu == 2) {       numbers[0] = et_mah / 1000;       numbers[1] = (et_mah % 1000) / 100;       numbers[2] = ((et_mah % 1000) % 100) / 10;       numbers[3] = ((et_mah % 1000) % 100) % 10;       numbers[4] = et_shl / 10;       numbers[5] = et_shl % 10;     }     if (menu == 3) {       numbers[0] = ot_mah / 1000;       numbers[1] = (ot_mah % 1000) / 100;       numbers[2] = ((ot_mah % 1000) % 100) / 10;       numbers[3] = ((ot_mah % 1000) % 100) % 10;       numbers[4] = ot_shl / 10;       numbers[5] = ot_shl % 10;     }     show();     lastmillis_show = millis();     Serial.println(lastmillis_show);   }   if (knopka_m.update() && knopka_m.read() == 0) {     if (menu != 3) menu++;     else {menu = 0; ee_write ();} //  Serial.println ("Knopka");   } //////////////////////////////////////////////////////////////////   if (knopka_mah_plus.update() && knopka_mah_plus.read() == 0) {     if (menu == 2) {       if (et_mah < 1000) et_mah = et_mah + 10;     }     if (menu == 3) {       if (ot_mah < 100) ot_mah = ot_mah + 1;     }   }   ////////////////////////////////////////////////////////////////////   if (knopka_mah_minus.update() && knopka_mah_minus.read() == 0) {     if (menu == 2) {       if (et_mah > 800) et_mah = et_mah - 10;     }   }   if (knopka_mah_minus.update() && knopka_mah_minus.read() == 0) {     if (menu == 3) {       if (ot_mah > 10) ot_mah = ot_mah - 1;     }   }   /////////////////////////////////////////////////////////////////////   //////////////////////////////////////////////////////////////////   if (knopka_shl_plus.update() && knopka_shl_plus.read() == 0) {     if (menu == 2) {       if (et_shl < 70) et_shl = et_shl + 1;     }     if (menu == 3) {       if (ot_shl < 20) ot_shl = ot_shl + 1;     }   }   ////////////////////////////////////////////////////////////////////   if (knopka_shl_minus.update() && knopka_shl_minus.read() == 0) {     if (menu == 2) {       if (et_shl > 30) et_shl = et_shl - 1;     }   }   if (knopka_shl_minus.update() && knopka_shl_minus.read() == 0) {     if (menu == 3) {       if (ot_shl > 0) ot_shl = ot_shl - 1;     } } }
    • Мультиметры, лазерные рулетки некоторое количество.
    • Ссылка отсылает на "Инструмент". Никакой "Измерительной техники" на сайте не обнаружил. Ни через меню (крайне неудобные), ни поиском по сайту.
    • А где Вы видели определившегося с выбором клонкостроителя? Как бороться за малое количество гармоник? Не вижу других путей, кроме массивов. Но есть подводные камни. На НЧ сложность одна - надо где то организовывать задние объёмы, пропорционально количеству динамиков. На ВЧ - другая сложность - фазовые приключения. Остаётся  - комплекс мер --строительсво системы --от КдП.
      Ближнее поле, обилие рассеивателей, расстояние от ушей до пищалки не более 2 метров. Тогда хватит одной маленькой пищалки, Герц с 5000, 2-3 порядком. Маленькой, из-за того что клеить к СЧ придётся высоко, и пищалка должна быть как можно более точечной. Хороший частный случай массива - дАпполито. По перегрузочной способности (т.е. и по гармоникам) - выигрыш, с фазой никаких дополнительных приключений в сранении с недапполито.
    • Вот объявление -