Страница 18 из 21 Первая ... 81617181920 ... Последняя
Показано с 341 по 360 из 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. #341
    Частый гость Аватар для Alex_Jet
    Регистрация
    05.03.2004
    Адрес
    г.Томск
    Возраст
    39
    Сообщений
    391

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

    Цитата Сообщение от Quasar Посмотреть сообщение
    А в каком контексте ты её применял (я про switch) и что выдавал компилятор???
    Типа этого:
    if((key_adc(POWER)) == 0)
    { switch (i)
    { case 0: PORTB |=_BV(PB2);//Включение реле питания
    lcd_com(0x87); lcd_puts("Privet");break;
    case 1: PORTB &=~_BV(PB2);//Выключение реле питания
    lcd_com(0x87); lcd_puts("Goodby");
    }
    Как раз думал в case 0 делать инициализацию дисплея и весь последующий опрос кнопок. Компилятор никаких ошибок не выдавал - просто компилировал. Надо попробовать в VMLab все это.
    Цитата Сообщение от Quasar Посмотреть сообщение
    Пошли на LCD команду 1 экран и очистится
    Пробовал - думал, что это просто очистка дисплея, а нифига - надо его заного инициализировать, чтобы что-то вывести... ..интересно сейчас попробовал заного:
    if((key_adc(MENU)) == 0) //Проверка нажатия кнопки MENU
    { lcd_com(0x01);}
    Выводит какую-то бегущую по 1-й и 3-й строкам абракадабру. Ну и надписи, "висящие" на других кнопках такие же...
    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

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

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

    Пробовал - думал, что это просто очистка дисплея, а нифига - надо его заного инициализировать, чтобы что-то вывести... ..интересно сейчас попробовал заного:
    Странно, я всегда так делаю, и вроде работает, единственное, что необходимо заново ввести позицию, с какой печатать...

  4. #343
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    62
    Сообщений
    38,707

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

    Цитата Сообщение от Quasar Посмотреть сообщение
    3) Как при выводе нового сообщения очищать экран (чтобы сообщения не накладывались друг на друга), но чтобы не приходилось инициализировать его снова?

    Пошли на LCD команду 1 экран и очистится
    Нет, то что ты предлагаешь:
    1) сделать ClrScr,
    2) потом установить курсор на начало строки
    3) вывести новую строку

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

    Проще так:
    1) установить курсор на начало строки
    2) вывести новую строку
    3) добить пробелами до конца строки (вдруг там что-то осталось от старой).
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

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

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

    Цитата Сообщение от Alex Посмотреть сообщение
    Проще так:
    1) установить курсор на начало строки
    2) вывести новую строку
    3) добить пробелами до конца строки (вдруг там что-то осталось от старой).
    Это конечно все хорошо, но если у меня последующее слово, например, на 2 символа меньше и я его вывожу по середине экрана, тогда до него и после остаются символы от предыдущего слова. В таком случае пробелами можно убрать остатки после. Или же впереди слова тоже поставить пробелы и не изменять позицию начала? Тогда как бы обновиться все. В общем получается обновлять все можно только небольшими ухищрениями...

    А как насчет всего остального, перечисленного в посте №339
    Последний раз редактировалось Alex_Jet; 23.02.2007 в 07:46. Причина: Неправильная ссылка
    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

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

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

    Как реализовать режим POWER (St/By)
    Ну если отталкиваться от того, что ты написал в посте №341, то это в принципе должно работать, но я бы сделал так:
    if (!(key_adc(POWER)))
    {
    PORTB ^= (1<<2); //Изменение состояния реле питания
    lcd_com(0x87);
    lcd_puts(((PORTB & (1<<2)) ? ("Goodby") : ("Privet")))
    }
    а в плане инициализации и очистки дисплея, Alex конечно правильно написал, но иногда стоит задуматься, что лучше, простота выполнения или скорость и т.п. На мой взгляд, легче воспользоваться пунктом 1:
    1) сделать ClrScr,
    2) потом установить курсор на начало строки
    3) вывести новую строку
    4) Также интересно как сделать блокировку всех кнопок, кнопкой POWER? То есть если аппарат в St/By, то он откликнется только на кнопку POWER или соответствующую кнопку на пульте ДУ.
    Я бы не делал так:
    Цитата Сообщение от Alex_Jet(пост 334)
    if((key_adc(POWER)) == 0)
    {выполнение действий}
    Лучше один раз, считать значение из ADC в какую-нибудь переменную, а потом уже с ней работать.(Допустим это переменная ADC).
    //stand_by - переменная указывающая на режим
    //0 - stand-by
    //1 - on
    //VolUP,VolDown - переменные указывающие на код конкретного действия.
    if (stand_by)
    { if (VolUP == ADC) //Проверка кнопок
    ; //что-то делать
    if (VolDown == ADC)
    ; //что-то делать
    //и т.д.
    };
    if (Power == ADC) //кнопка power не подчиняется stand-by
    ; //что-то делать
    Соответственно когда ус-во в режиме stand-by работать будет только Power.

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

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

    Цитата Сообщение от Alex_Jet Посмотреть сообщение
    Сообщение от Alex
    Проще так:
    1) установить курсор на начало строки
    2) вывести новую строку
    3) добить пробелами до конца строки (вдруг там что-то осталось от старой).

    Это конечно все хорошо, но если у меня последующее слово, например, на 2 символа меньше и я его вывожу по середине экрана, тогда до него и после остаются символы от предыдущего слова. В таком случае пробелами можно убрать остатки после.
    Да, надо убирать. Но весьма часто - строка разбита на зоны, и новое надо нгаписать в одной зоне, не трогая других.
    Например такая строка:
    Код:
    "MODE VOL 40  CH1"
    Если надо поменять только цифру после "VOL" - то ее и менять, не трогая всего остального.


    Цитата Сообщение от Quasar Посмотреть сообщение
    а в плане инициализации и очистки дисплея, Alex конечно правильно написал, но иногда стоит задуматься, что лучше, простота выполнения или скорость и т.п. На мой взгляд, легче воспользоваться пунктом 1:

    Цитата:
    1) сделать ClrScr,
    2) потом установить курсор на начало строки
    3) вывести новую строку
    Легче, но выглядеть это удет некрасиво. потому что при выполнении п1 - ВЕСЬ экран очистится (причем не так быстро), потом выведется новая строка.
    Если очистку экрана не делать,а выводить новое поверх старого, забивая где надо проблемами, не будет мельканий на экране.

    Это особенно актуально, если индикатор подключен только на запись (а он так подключен в 99.9999% случаев), и нельзя прочитать "готовность", т.е все реализуется на фиксированных временных задержках.
    Такой "синхронный" режим получается чуть-чуть медленее "асинхронного", но ребует на одну ногу МК меньше, потому его и используют в основном - пин ценнее!


    Цитата Сообщение от Alex_Jet Посмотреть сообщение
    А как насчет всего остального, перечисленного в посте №339
    "Все остальное" - как захочешь, так и сделаешь, вариантов море.
    Тут нет однозначного алгоритма, полная свобода для творчества
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

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

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

    Quasar
    Спасибо! Принцип понял, а вот что означает вот это: if (!(key_adc(POWER))) и разъясните вот это: lcd_puts(((PORTB & (1<<2)) ? ("Goodby") : ("Privet"))). Вообще этот синтаксис применим к WinAVR?
    Цитата Сообщение от Quasar Посмотреть сообщение
    Лучше один раз, считать значение из ADC в какую-нибудь переменную, а потом уже с ней работать.(Допустим это переменная ADC).
    Дык я так и делаю в функции key_adc:
    //Функция проверки нажатия кнопки по каналу АЦП
    unsigned char key_adc(unsigned int button)
    { unsigned long input;
    input = ADCH;
    input = input*Vref/256;
    if((input>(button-delta)) && (input<(button+delta))) return(0);
    return(1);
    }
    Цитата Сообщение от Quasar Посмотреть сообщение
    Соответственно когда ус-во в режиме stand-by работать будет только Power.
    Тогда не понимаю - а откуда брать состояние Stand_By? Или записывать в какую-нибудь переменную 0 или 1 при нажатии на Power?
    Цитата Сообщение от Alex Посмотреть сообщение
    "Все остальное" - как захочешь, так и сделаешь, вариантов море.
    Тут нет однозначного алгоритма, полная свобода для творчества
    Это все хорошо - свобода творчества, как захочешь и тд. НО! Я алгоритм понимаю, но с синтаксисом Си для WinAVR (и тем более чего-нибудь другого) знаком очень мало. Поэтому просто не знаю как записать это все "как захочешь" на Си.
    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. #348
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    62
    Сообщений
    38,707

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

    Цитата Сообщение от Alex_Jet Посмотреть сообщение
    Я алгоритм понимаю, но с синтаксисом Си для WinAVR (и тем более чего-нибудь другого) знаком очень мало.
    RTFM - "Керниган и Ричи"
    Цитата Сообщение от Alex_Jet Посмотреть сообщение
    lcd_puts(((PORTB & (1<<2)) ? ("Goodby") : ("Privet"))). Вообще этот синтаксис применим к WinAVR?
    Если WinAVR - это "Си", то должен быть применим. Я не вижу в этой строчке ничего "компиляторо-зависимого", все на "чистом Си".
    но нормальный компилятор для микроконроллеров, понял бы (или точнее - это ему "обьяснено" уже девайнами в стандартных инклудах вместо "PORTB & (1<<2)" более простую и короткую запись типа "RB2", "PORTB.2" или что-то аналогичное.

    Добавлено через 1 минуту
    Цитата Сообщение от Alex_Jet Посмотреть сообщение
    Тогда не понимаю - а откуда брать состояние Stand_By? Или записывать в какую-нибудь переменную 0 или 1 при нажатии на Power?
    Разумеется. Вообще такие вещи обычно удобно делать при использовании технологии "State Machine", но это довольно длинно и у меня сейчас нет времени рассказывать что это такое.
    Последний раз редактировалось Alex; 23.02.2007 в 21:12. Причина: Добавлено сообщение
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

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

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

    Что означает вот это: if (!(key_adc(POWER)))
    Это означает проверку не истинности для key_adc(POWER).
    Например:
    Если *a* равно 1(то есть не ноль(истинно)) то делаем действие 1, если равно 0(ложно) то делаем действие 2
    if (a)
    делаем действие 1;
    else
    делаем действие 2;

    или
    if (!a)
    делаем действие 2;
    else
    делаем действие 1;
    разъясните вот это: lcd_puts(((PORTB & (1<<2)) ? ("Goodby") : ("Privet")))
    Это стандартное условное выражение языка C.
    Функция lcd_puts будет печатать "Goodby" если бит 2 PORT*a B высокий, в противном случае будет печатать "Privet". (правда надо было наоборот, но это на суть не влияет )

    Вообще этот синтаксис применим к WinAVR?
    Конечно. Я сам его использую .

    Добавлено через 3 минуты
    Цитата Сообщение от Alex
    "Керниган и Ричи"


    Есть книга некоего Шпака, С для микроконтроллеров, для начинающего, очень даже рекомендую
    Последний раз редактировалось Quasar; 23.02.2007 в 22:10. Причина: Добавлено сообщение

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

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

    Цитата Сообщение от Alex Посмотреть сообщение
    но это довольно длинно и у меня сейчас нет времени рассказывать что это такое
    В общем как всегда. Сказал ам и нет...
    Цитата Сообщение от Quasar Посмотреть сообщение
    Это означает проверку не истинности для key_adc(POWER). ...Это стандартное условное выражение языка C.
    Спасибо большое за разъяснение! Попробовал - обработка POWER работает (только if проверяет истинность), особенно если добавить задержку! Такой вариант как раз пойдет для управления режимом MUTE, только во втором случае (когда выводится Goodby) надо возвращаться к индикации обычного состояния.
    А как же быть с включением по первому нажатию кнопки POWER - в этом случае надо инициализировать дисплей, прочитать EEPROM, вывести управляющие команды, вывести приветствие, убрать его и отобразить текущее состояние устройства (№ входа, громкость и тд). В другом случае - по второму нажатию - надо убрать управляющие команды, вывести на дисплей прощание и отключить дисплей. Как же объединить эти команды?
    Цитата Сообщение от Alex Посмотреть сообщение
    RTFM - "Керниган и Ричи"
    Ага - скажите еще и все прочитать... Лучше это найти:
    Есть книга некоего Шпака, С для микроконтроллеров, для начинающего
    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

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

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

    Сейчас пробую разобраться с передачей данных в DAC8512. Получается, что в начальном состоянии линии SDI и CLK должны иметь лог.0 (или все-таки лог.1), а LD - лог.1. В момент перепада из лог.0 в лог.1 на SDI уже должен установиться информационный бит. И так в течении 12 циклов. При этом до начала тактирования по CLK на LD должен быть установлен лог.0, а после 12 циклов - лог.1.
    Вот так я понял диаграммы, приведенные в даташите, только там, ИМХО, неправильно изображена диаграмма для LD - он ведь инверсный, как и CS!
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	DAC8512_1.gif 
Просмотров:	157 
Размер:	34.2 Кб 
ID:	19084   Нажмите на изображение для увеличения. 

Название:	DAC8512_2.gif 
Просмотров:	149 
Размер:	12.6 Кб 
ID:	19085   Нажмите на изображение для увеличения. 

Название:	DAC8512_3.gif 
Просмотров:	192 
Размер:	14.3 Кб 
ID:	19086  
    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

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

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

    только if проверяет истинность
    а if(!a) проверяет не истинность.

    А как же быть с включением по первому нажатию кнопки POWER - в этом случае надо инициализировать дисплей, прочитать EEPROM, вывести управляющие команды, вывести приветствие, убрать его и отобразить текущее состояние устройства (№ входа, громкость и тд). В другом случае - по второму нажатию - надо убрать управляющие команды, вывести на дисплей прощание и отключить дисплей. Как же объединить эти команды?
    Лично я не понимаю чего ты не понимаешь??

    Ага - скажите еще и все прочитать...
    Ну а почему бы и нет

    А Шпак у меня есть в djvu. Весит 9Мб. Надо бы его куда-нибудь залить...

  14. #353
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    62
    Сообщений
    38,707

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

    Цитата Сообщение от Alex_Jet Посмотреть сообщение
    Сообщение от Alex
    RTFM - "Керниган и Ричи"

    Ага - скажите еще и все прочитать... Лучше это найти:
    Цитата:
    Есть книга некоего Шпака, С для микроконтроллеров, для начинающего
    Нет, лучше для начала - Кернигана-Ричи. Это классический учебник по языку Си.
    Когда будут в голове основные понятия - уже можно переходить к частным диалектам.
    Хотя, насколько я понимаю - у тебя проблема не столько с языком Си, сколько с самими технологиями программирования. Это более важно, поскольку на чем писать программу - на ассемблере, на Си, на Паскале, на PL/M или АДА - в основном определяется наличием конкретных компиляторов для данного процессора, и их качеством.
    А вот что читать именно по технологиям - тут сразу не подскажу. Рекомендовать Кнута - там всё хорошо и правильно, даны азы алгоритмов, но всё оно там весьма далеко от технологий, применяемых в embedded устройствах (коими являются практически все устройства на МК).


    Цитата Сообщение от Alex_Jet Посмотреть сообщение
    Сообщение от Alex
    но это довольно длинно и у меня сейчас нет времени рассказывать что это такое

    В общем как всегда. Сказал ам и нет...
    Ну согласись все же, что форум не учебник. И если ты не знаешь как работают стандартные операторы IF/WHILE или " ? : " - обьяснять все на пальцах несколько утомительно.
    Но если ты хочешь вкратце, то технологию стейт-машины я тебе могу показать на простом примере, но боюсь что вопросов это вызовет еще больше.
    Я написал только касающее сути стейт-машины, и только один из вариантов, без слипа.

    Код:
    enum States {stOff, stStart, stSteady, stChange1, stChange2};
    enum Comands{cmdNone,cmdON, cmdOFF, cmdCommand1, cmdCommand2};
    
    volatile persistent byte cState;
    volatile persistent byte cCmd;
    
    
    void ColdInit(){
    // тут делаем начальную инициализацию всех переменных и регистров
     cState=stStart;
    }
    void HotInit(){
    // тут можно сделать какие-нибудь действия, без переинициализации
    }
    
    void main (){
       if (ColdStart) ColdInit() else HotInit();
    
       while(1){ // main execution loop
            CLRWDT();
            Input(); // тут устанавливаем cCmd в соотв с вводом
    
            switch (cState){
              case stOff:  // ждем включения
                                if (cCmd == cmdON) cState=stStart;
                                cCmd=CmdNone;
                                break;
              case stStart:
                               // делаем что-то вначале
                               if (доделали) cState=stSteady;
                               break;
              case stSteady:
                               // тут крутимcя основное время во время работы,
                               // ожидая например ввода с кнопок или команды с ДУ
                               if (cCmd != cmdNone)
                                    switch(cCmd){
                                       case cmd OFF: ProcOff(); cState=stOff; break;
                                       case cmdCommand1: cState=stChange1; break;
                                       case cmdCommand2: cState=stChange2; break;
                                    }
                               break;
              case stChange1:    // тут меняем что-то, потом возвращаемся
                                        cCtate=stSteady;
                                        break;
              case stChange2:   // тут меняем что-то, потом возвращаемся
                                        cCtate=stSteady;
                                        break;
             default:  cCtate = stSteady; break;
            }
       }
    }
    P.S. Есть еще технология "синхронного исполнения", где вся программа находится в обработчике таймерного прерывания, а в основном цикле (в main) делаются вспомогательные действия.
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

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

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

    Цитата Сообщение от Quasar Посмотреть сообщение
    а if(!a) проверяет не истинность
    Я понял, просто когда "тестировал" сделал по обычному - if ((key_adc(POWER)) == 0), то есть проверку на истинность.
    Цитата Сообщение от Quasar Посмотреть сообщение
    Лично я не понимаю чего ты не понимаешь??
    У меня сложно с синтаксисом, поэтому я не знаю как это сделать.

    Цитата Сообщение от Quasar Посмотреть сообщение
    А Шпак у меня есть в djvu. Весит 9Мб. Надо бы его куда-нибудь залить...
    Если не трудно закиньте мне на почту: Alex_Jet (dog) mail ru
    Цитата Сообщение от Alex Посмотреть сообщение
    у тебя проблема не столько с языком Си, сколько с самими технологиями программирования
    Да! С этим согласен. С технологиями я не зхнаком, поэтому пытаюсь разобраться.
    Цитата Сообщение от Alex Посмотреть сообщение
    И если ты не знаешь как работают стандартные операторы IF/WHILE
    Ну это вы слишком, работу стандартных операторов я знаю, а вот с такими записями как " ? : " не встречался.
    Цитата Сообщение от Alex Посмотреть сообщение
    написал только касающее сути стейт-машины, и только один из вариантов, без слипа.
    Спасибо! Вариант со слипом я видел.
    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

  16. #355
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    62
    Сообщений
    38,707

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

    Цитата Сообщение от Alex_Jet Посмотреть сообщение
    Ну это вы слишком, работу стандартных операторов я знаю, а вот с такими записями как " ? : " не встречался.
    Это не "запись", это ОПЕРАТОР. Такой же как IF или WHILE.
    Написанное
    A = ( B ? C : D );

    это тоже самое, что написать:

    if (B) A=C; else A=D;
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

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

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

    А что вы скажете по посту №351 о передаче данных в DAC8512? - в каком начальном состоянии должны быть линии SDI, CLK, LD? Выставлять эти состояния портами МК или внешними резисторами как, например, в I2C?
    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

  18. #357
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    62
    Сообщений
    38,707

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

    В шине SPI не используются 2-направленные линии, поэтому подтяжки не нужны, Z-состояние пинов МК тоже не нужно, все фиксированно, поэтому разумеется, выставлять портами.
    Последний раз редактировалось Alex; 27.02.2007 в 18:34.
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

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

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

    Цитата Сообщение от Alex Посмотреть сообщение
    В шине SPI не используются 2-направленные линии, поэтому подтяжки не нужны, Z-состояние пинов МК тоже не нужно, все фиксированно, поэтоу разумеется выставлять портами.
    Понял, а тогда какие начальные состояния у SDI, CSL, LD должны быть? У LD я так понимаю лог.1 раз он инверсный, а у SDI, CSL - не знаю, наверное тоже лог.1 раз на временных диаграммах (https://forum.vegalab.ru/attachment....1&d=1172337953) в начале и конце присутствует лог.1?!
    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

  20. #359
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    62
    Сообщений
    38,707

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

    Цитата Сообщение от Alex_Jet Посмотреть сообщение
    Понял, а тогда какие начальные состояния у SDI, CSL, LD должны быть?
    А это в даташите смотри на временные диаграмм. Там обычно все хорошо видно.
    LD обычно в "1", и пока он в "1" пофиг что с остальными происходит.
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  21. #360
    Новичок
    Регистрация
    09.10.2005
    Адрес
    Латвия
    Возраст
    40
    Сообщений
    87

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

    Alex_Jet, я очень извиняюсь, может я что-то упустил. Но atmega8 (ведь он используется?) имеет аппаратный SPI. И в таком случае поищи доку AVR151.pdf - там все подробненько изложено.

Страница 18 из 21 Первая ... 81617181920 ... Последняя

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

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

Ваши права

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