alexdarktech_stream
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

alexdarktech_streamВход

В связи с проблемами с дискордом создаю этот ресурс, он больше для меня самого.


descriptionВидосики Ардуино. А также мой говнокод. EmptyВидосики Ардуино. А также мой говнокод.

more_horiz
Тут мои избранные видосики ардуино.

Последний раз редактировалось: AlexDarkTech (Вс Окт 27, 2024 4:40 am), всего редактировалось 1 раз(а)

descriptionВидосики Ардуино. А также мой говнокод. EmptyRe: Видосики Ардуино. А также мой говнокод.

more_horiz


Ардуино и пейджер

descriptionВидосики Ардуино. А также мой говнокод. EmptyRe: Видосики Ардуино. А также мой говнокод.

more_horiz
tiny 13 adc noise reduction работа с ацп на прерываниях, контроллер комутатора микрофона. Последний проект который был на стриме.

Код:


#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#define LED0 PB0 // OC0A
#define LED1 PB1 // OC0B

volatile unsigned char filter;//используется для задержки отпускания ноги при срабатывании ацп чтобы ногу не колбасило.
volatile unsigned char filter2;

// Обработчик прерывания по завершению преобразования АЦП
ISR(ADC_vect) //выполняется когда ацп завершил преобразование.
{
 unsigned char A = ADCL;//читаем данные ацп.
 unsigned char i = ADCH;
 i= A; //делаем так потому что из-за какого-то сглюка компилятора ардуино зависает ацп и нихрена не работает.
 
    if (i >= 1) { //если на ацп есть сигнал
     // PORTB |= (1 << PB2);// ЗАЖИГАЕМ СВЕТОДИОД НА 7
      PORTB &= ~(1 << PB1);// гасим светодиод на 6 ноге
       filter = 12; // установка задержки активации светодиода значение устанавливается когда прилетел сигнал на ацп.
    } else {
      if (filter !=0){// счетчик обратного отсчета если нет сигнала на ацп.
        filter2--;
        if (filter2 ==0){
          filter--;
        }
      }else{ // если счётчик дотикал до нуля а сигнала так и не пришло.
       // PORTB &= ~(1 << PB2);// гасим светодиод на 7 ноге
        PORTB |= (1 << PB1);// ЗАЖИГАЕМ СВЕТОДИОД НА 6
      }  
    }
}


void setup() {
  WDTCR = (1<<WDP3)|(1 << WDP0); //сторожевой таймер в 8 секунд.
  ACSR |= (1 << ACD); //ВЫРУБАЕМ КОМПОРАТОР
  // Светидиоды:
  DDRB |= (1 << PB2)|(1 << PB1); // выходы НОГА 7 И НОГА 6
  PORTB &= ~((1 << PB2)|(1 << PB1)); // по умолчанию отключены = 0
  // Перем. резистор:
  DDRB &= ~((1 << PB3)|(1<<PB4)); // НОГИ 2И 3 НА ВХОД АЦП
  PORTB &= ~((1 << PB3)|(1<<PB4));
    // Настройка АЦП:
  ADCSRA = 0;  
  ADMUX = (1 << REFS0)|(0 << ADLAR)|(1 << MUX1); // опорное напряжение - ВНУТРЕННИЙ ОПОРНЫЙ ВХОД ПОКА 3 НОГА.
  ADCSRA = (1 << ADEN)|(1 << ADSC)|(0 << ADATE)|(1 << ADIE)|(1 << ADPS0);    // АЦП включен, запуск преобразования, режим автоизмерения, прерывание по окончанию преобразования, частота CLK/2
  ADCSRB = 0x00; // режим автоизмерения: постоянно запущено
  DIDR0 = (1 << ADC3D)|(1 << ADC2D); // запрещаем цифровой вход на ноге аналогового входа
  sleep_enable();//активируем слип.
  MCUSR = (1 << SE)|(1 << SM0); //СОН В РЕЖИМ ПОДАВЛЕНИЕ ШУМА.
  delay(200);//задержка чтобы ацп доработал и инициализировался и ничего не сглюкнуло.
  sei(); //разрешаем глобально прерывания
 
}

void loop() {
  // сюда можно засунуть лббой код которвый будет выполняться до ухода контроллера в спящий режим но это снизит частоту опроса ацп.
  asm("sleep");//запускаем преобразование ацп в режиме подавления шума
}
privacy_tip Права доступа к этому форуму:
Вы не можете отвечать на сообщения