Страница 21 из 21 Первая ... 11192021
Показано с 401 по 410 из 410

Тема: Продолжим ... Микроконтроллер в УМЗЧ

  1. #1 Показать/скрыть первое сообщение.
    Завсегдатай
    Автор темы
    Аватар для Евгений Верис
    Регистрация
    27.05.2004
    Адрес
    Мск
    Сообщений
    1,412

    По умолчанию Продолжим ... Микроконтроллер в УМЗЧ

    в продолжение ране поднимаемой мной темы,
    наконец-то потихоньку начал колупать проц
    планирую:

    1. Поддержка ДУ, СОни или самсунг (провозившись месяц без описания с глюком симулятора я его замучил - теперь работает четко)
    2. Программирование любой клавиши на любую команду
    3. Измерение мощности/уровня сигнала
    4. Регулировка громкости - 2 канала
    5. Установка порога срабатывания защиты по мощности
    6. Таймер на вкл/выкл
    7. 16 команд на 4 лапах через дешифратор/ либо 4 лапы поочередно. (пнапример на коммутатор входа)
    8. Естественно индикация всего этого

    что еще можно? Ваши мысли
    например, в меню настройку - типа ограничить макс мощность на уровне 50Вт - чтоб если более - чип сам громкость чуть снижал итд ...

    вопрос такой,
    регулятор громкоси как не очень сложно и более менее качественно реализовать?
    микрухи типа АД5222 не подходят из-за низкого питания.

    зы. не спрашивайте зачем мне это. просто хочу сделать. все по кускам работает - осталось все нарисовать в одну кучу и попробовать.

    чип - АТМЕГА128 - ибо ест ьнахаляву в лице Белого
    с моими атмега169 фигня произошла, в доке очень серьезная ошибка есть - может атмел поправит - написали им в сапорт.

  2. #401
    Старый знакомый Аватар для Quasar
    Регистрация
    16.03.2005
    Адрес
    Russia, Moscow.
    Сообщений
    620

    По умолчанию Re: Продолжим ... Микроконтроллер в УМЗЧ

    Я бы тебе посоветовал, ввести метки, которые будут высвечиваться на lcd после прохождения определенного участка кода, и смотреть где зависон...
    Спонсор данного сообщения - Газпром.

  3. #402
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    61
    Сообщений
    36,128

    По умолчанию Re: Продолжим ... Микроконтроллер в УМЗЧ

    Цитата Сообщение от Alex_Jet Посмотреть сообщение
    не присваиваю какой-то переменной адрес кнопки пульта.
    А надо присваивать! Можно еще также иметь флаги "кнопка была нажата" и "кнопка сейчас нажата".

    Добавлено через 1 минуту
    Цитата Сообщение от Alex_Jet Посмотреть сообщение
    Ну а все-таки, почему прога глючит?, когда в функцию внешнего прерывания ввожу,
    Стек не переполняется из-за чрезмерной вложенности функций?
    Последний раз редактировалось Alex; 14.03.2007 в 13:56. Причина: Добавлено сообщение
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Ну что, можете меняться обратно."(с)типа анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  4. #403
    Частый гость Аватар для Alex_Jet
    Регистрация
    05.03.2004
    Адрес
    г.Томск
    Возраст
    38
    Сообщений
    391

    По умолчанию Re: Продолжим ... Микроконтроллер в УМЗЧ

    Цитата Сообщение от Quasar Посмотреть сообщение
    Я бы тебе посоветовал, ввести метки, которые будут высвечиваться на lcd после прохождения определенного участка кода, и смотреть где зависон...
    Так я вроде бы обнаружил зависон - он происходит, когда я втсавляю хотя бы одну строчку для выбора входа предусилителя с пульта ДУ.
    Цитата Сообщение от Alex Посмотреть сообщение
    А надо присваивать! Можно еще также иметь флаги "кнопка была нажата" и "кнопка сейчас нажата".
    Я делал раньше так
    Код:
    unsigned char tm;
    
    //Внешнее прерывание по входу INT0
    ISR(SIG_INTERRUPT0)
    { GICR &= ~(_BV(INT0));   //запрет прерывания
      tm=rc5decoder();// считываем значение адреса
      if(#define == tm) {действие}; //проверяем условие
      и тд.
      GICR |= _BV(INT0);     //разрешение прерывания
    }
    Цитата Сообщение от Alex Посмотреть сообщение
    Стек не переполняется из-за чрезмерной вложенности функций?
    Да вроде бы я пока поставил те условия (из-за которых прога виснет) в комментарии и еще других прикрутил. То есть условий стало на 4 больше и все работает. А как только ввожу те самые, так все зависон..
    Как говорите можно проверить переполнение стека???
    1. Pioneer PD-S703, E-MU1212M + Корвет-038 -> SSM2018T -> LM3886T, Class A JLH1969-> TQWP на BG20, Monitor Audio Bronze BX2
    2. ЦАП (PCM2706+CS4398) -> JLH Headphone Amplifiers -> Sennheiser HD595

  5. #404
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    61
    Сообщений
    36,128

    По умолчанию Re: Продолжим ... Микроконтроллер в УМЗЧ

    Цитата Сообщение от Alex_Jet Посмотреть сообщение
    Как говорите можно проверить переполнение стека???
    Хотя бы "на пальцах прикинуть", по мар-файлу.

    Лучше всего конечно с эмулятором работать, все наглядно видно и отлаживается быстро.
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Ну что, можете меняться обратно."(с)типа анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  6. #405
    Частый гость Аватар для Alex_Jet
    Регистрация
    05.03.2004
    Адрес
    г.Томск
    Возраст
    38
    Сообщений
    391

    По умолчанию Re: Продолжим ... Микроконтроллер в УМЗЧ

    Нашел исходники для DS1307. Но кое-что мне не понятно. Что за библиотека intrinsics.h и что значит вот это:
    Код:
    #ifndef __BCPP__
    #include <intrinsics.h>
    #include <string.h>
    #endif
    Что означает запись dec2bcd в ds1307.c? Наверное, это описано как раз в хидере intrinsics.h?
    Что означает запись rtc_var->seconds=bcd2dec(i2c_rx(ACK)); в ds1307.c?
    Как же заносить значения секунд и тд из функции rtc_get_time в переменную, чтобы отобразить все это на ЖКИ?
    В общем что-то я совсем не понимаю что тут к чему...
    Вложения Вложения
    1. Pioneer PD-S703, E-MU1212M + Корвет-038 -> SSM2018T -> LM3886T, Class A JLH1969-> TQWP на BG20, Monitor Audio Bronze BX2
    2. ЦАП (PCM2706+CS4398) -> JLH Headphone Amplifiers -> Sennheiser HD595

  7. #406
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    61
    Сообщений
    36,128

    По умолчанию Re: Продолжим ... Микроконтроллер в УМЗЧ

    Цитата Сообщение от Alex_Jet Посмотреть сообщение
    Что означает запись dec2bcd в ds1307.c?
    "dec" - очевидно означает "decimal"
    "bcd" - binary coded decimal

    значит dec2bcd - перевод из десятичного в двоично-десятичное представление числа.
    Цитата Сообщение от Alex_Jet Посмотреть сообщение
    Что означает запись rtc_var->seconds=bcd2dec(i2c_rx(ACK)); в ds1307.c
    это означает что в поле "seconds" структуры rtc_var заносится дв.десятичное значение i2c_rc(ACK), наверно, прочитанное из ds1307.
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Ну что, можете меняться обратно."(с)типа анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  8. #407
    Частый гость Аватар для Alex_Jet
    Регистрация
    05.03.2004
    Адрес
    г.Томск
    Возраст
    38
    Сообщений
    391

    По умолчанию Re: Продолжим ... Микроконтроллер в УМЗЧ

    Чувствую, что сам напишу библиотеку для DS1307. Только надо разобраться с переводом двойчных чисел в 10-е.
    1. Pioneer PD-S703, E-MU1212M + Корвет-038 -> SSM2018T -> LM3886T, Class A JLH1969-> TQWP на BG20, Monitor Audio Bronze BX2
    2. ЦАП (PCM2706+CS4398) -> JLH Headphone Amplifiers -> Sennheiser HD595

  9. #408
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    61
    Сообщений
    36,128

    По умолчанию Re: Продолжим ... Микроконтроллер в УМЗЧ

    Цитата Сообщение от Alex_Jet Посмотреть сообщение
    Только надо разобраться с переводом двойчных чисел в 10-е.
    Зачем? Пусть себе часы внутри 1307 идут в дв-десятичном, ты их читаешь и посылаешь на дисплей цbфра за цифрой. Ничего преобразовывать не надо.
    Установку часов - проще без перевода далеть.
    Например так:
    Код:
    byte Sec,DSec,Min,DMin,Hour,DHour;
    
    void IncTime(void){
       Sec++;
       if (Sec<10) return;
       Sec=0; DSec++;
       if (DSec<6) return;
       DSec=0; Min++;
       if (Min<9) return;
       Min=0; DMin++;
       if (DMin<6) return;
       DMin=0; Hour++;
      
    // и так далее. разумеется, это только пример
    // пересчет на 24 (для часов) я специально не написал - сам попробуй.
    }
    Дв-десятичное представление неудобно для математики, и нужно только для вывода на дисплей.
    И проще всего делать или по таблице (что быстро, но много места занимает),или вычислением :
    Код:
    // печать байта тремя цифрами:
    void printi(byte i){
     byte d = 100;
     char c;
     do {
        c = i/d+*0*;
        putch(c);
        i %= d; d /= 10;
     } while (d > 0);
    }
    Если надо (почему-то) в шестнадwатеричное переводить, то тоже или таблицей:

    Код:
    byte BinarySample;
    char S1,S2;
    
    const Hex[]={*0*,*1,*2*,*3*,*4*,*5*,*6*,*7*,*8*,*9*,*A*,*B*,*C*,*D*,*E*,*F*};
    
    S1= Hex[ (BinarySample>>4) & 0x0F) ];
    S2= Hex[ (BinarySample  & 0x0F) ];
    или вычислением:
    Код:
    byte BinarySample;
    char S1,S2;
    char temp;
    
     temp=(BinarySample>>4) & 0x0F;
     S1 =   (temp>=10) ?  (temp+*A*-10) : (*0*+temp);
     temp=BinarySample & 0x0F;
     S1 =   (temp>=10) ?  (temp+*A*-10) : (*0*+temp);
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Ну что, можете меняться обратно."(с)типа анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  10. #409
    Частый гость Аватар для Alex_Jet
    Регистрация
    05.03.2004
    Адрес
    г.Томск
    Возраст
    38
    Сообщений
    391

    По умолчанию Re: Продолжим ... Микроконтроллер в УМЗЧ

    Alex!
    Рассскажите, а лучше покажите на примере как сделать, чтобы по короткому нажатию на кнопку выполнилась одна команда, а при длительном нажатии - другая!
    И еще - требуется управлять с ДУ таким образом:
    пока кнопка на пульте нажата на порте выставляется лог.1, иначе порт обнуляется.
    Я думал что это будет выглядеть примерно так:
    Код:
    PORTB |= _BV(PB1);  //Лог.1
    while(условие нажатия кнопки);
    PORTB &= ~_BV(PB1); //Лог.0
    1. Pioneer PD-S703, E-MU1212M + Корвет-038 -> SSM2018T -> LM3886T, Class A JLH1969-> TQWP на BG20, Monitor Audio Bronze BX2
    2. ЦАП (PCM2706+CS4398) -> JLH Headphone Amplifiers -> Sennheiser HD595

  11. #410
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    61
    Сообщений
    36,128

    По умолчанию Re: Продолжим ... Микроконтроллер в УМЗЧ

    Цитата Сообщение от Alex_Jet Посмотреть сообщение
    Рассскажите, а лучше покажите на примере как сделать, чтобы по короткому нажатию на кнопку выполнилась одна команда, а при длительном нажатии - другая!
    Сделать можно очень по разному, в зависимости от общей структуры программы.

    Ну например так: вызываеся функция CheckLongMute:
    Код:
    // return 1 if Short, 2 if Long, 0 - if no key or other key
    byte CheckLongMute(void){ 
      
       if((!bKeypressed)||(!bKbhit)||(Keys!=kMute)) return 0;
       while(bKbhit && (c100msTmrLongKey<cLongTO)) CLRWDT(); // wait for no key or timeout
        if(c100msTmrLongKey>=cLongTO) { 
             c100msTmrLongKey=0;  Keys=0; bKeypressed=0;
             return 2;
        }
        bKeypressed=0;
        return 1;
    }
    которая возвращает, как видно из описания, "1" при котортком нажатии кнопки "Mute", "2" - при длинном, или "0" - если нажата другая кнопка, или вообще никакая не нажата.
    Как видно - тут выход из функции будет или если нет нажатия, или если нажатадругя кнопка, или если нажата Мюте больше заданного времени (длинное нажатие) ибо Мьюте была нажата коротко. Т.е. функйия "мьюте" срабатывет при отпускании кнопки, а функция, срабатывающая отдлительного нажатия - сработает и при нажатой, как только быдет превышено время.
    Это только один пример можно сделать и по другому.

    Сами кнопки - опрашиваются в обработчике таймерного прерывания, там же давится дребезг, делается (если надо) автоповтор и прочее, с учестом программных таймеров.
    Итогом являются код кнопки - Keys и флаги bKbhit, bKeypressed.

    А дальше примерно так:
    Код:
    byte k;
        
              ....
              k=CheckLongMute(); 
              if (k==1) { SetMute(); break; }
              if (k==2) { SetStop(); break; }
              .....
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Ну что, можете меняться обратно."(с)типа анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

Страница 21 из 21 Первая ... 11192021

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •