Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2015.12.20;
Скачать: [xml.tar.bz2];

Вниз

Midi 2 Beep-код   Найти похожие ветки 

 
brother ©   (2015-02-09 18:14) [40]

[37] хотелось бы посмотреть на готовый аппарат...


 
Дмитрий С ©   (2015-02-09 18:17) [41]


> brother ©   (09.02.15 18:14) [40]

Как будет готово видео выложу.


 
Kilkennycat ©   (2015-02-09 18:52) [42]


> стоит ли припаять кварц и получить 16 MHz или 8и будет достаточно
> для этой задачи?


для этой задачи хватило бы и внутреннего генератора, тут больше вопрос энергопотребления... если батарейное - старайся снизить частоту и избавляться от кварца.
в случае батарейки - светодиоды обязательно шимом, снизишь в десяток раз потребление, кроме того, теоретически светодиодик тогда можно напрямую на порт контроллера вешать (это зависит от светодиодика, конечно, от контроллера, ну и от уверенности, что не возникнет ситуации, когда все светодиодики зажгутся без шима).
по поводу пищалки: динамик, конечно, приятнее. но сожрет больше, что опять же, нежелательно при батарейном питании.


 
Inovet ©   (2015-02-10 03:05) [43]

> [35] Дмитрий С ©   (09.02.15 16:53)
> А как она может синусоиду

Настоящие джедаи пишут "Синусойда" и для полного пассворда добавлялют "джа", а особо продвинутые в искусствах ингаляций знают тайное слово "Растафари".


 
Дмитрий С ©   (2015-02-10 23:19) [44]

Пока что-то не выходит:(

Настроил таймер в режиме ШИМ на частоте примерно 15KHz (8 битный таймер в два прохода на частоте генератора 8MHz. 8000000/512=15625).
Повесил прерывание на переполнение счетчика этого самого таймера (выполняется раз в 512 тактов процессора), где обновляю регистр сравнения шима (1 раз за 8 срабатываний таймера):

 tickCount ++;
 OCR1A = sinCache[(tickCount >> 3) % sizeof(sinCache)]; // (tickCount div 8) mod sizeof(sinCache);

Где:

volatile byte sinCache[64];
 for(int i =0; i<sizeof(sinCache); i++) {
   sinCache[i] = 127 + round(127*sin(6.283 * 440 * i / 1962)); // sin(2*pi*440*i/1962). 1962=15625/8
 }

Звук всеравно получается мерзский и даже рядом не стоит с частотой 440 Гц.


 
Kilkennycat ©   (2015-02-10 23:40) [45]

этот мк случайно не st7fox?


 
Дмитрий С ©   (2015-02-10 23:48) [46]


> Kilkennycat ©   (10.02.15 23:40) [45]

Нет. Atmega328, извлеченная из ардуиноподобной платы.


 
Kilkennycat ©   (2015-02-11 00:14) [47]

странно, что не угадал, ведь так мало вариантов было...
а как ты думаешь, есть ли какая-нибудь разница между микроконтроллерами, их компиляторами, конфигурацией?
и в чем выражается мерзский и даже рядом не стоит с частотой 440 Гц.?
какую частоту выдает?


 
Дмитрий С ©   (2015-02-11 00:40) [48]

Точно не скажу, но намного выше. Ощушение, что на  уши давит.
При это есть и более низкий звук с гуляющей частотой.

Я не настолько глубоко знаком с программированием мк. Я отключил все  прерывания, кроме своего, и не использовал ардуиновские функции в его обработчике
Это то что было в моих силах:)

Поискал ещё в ютубе мелодии на ардуино. - почти везде обычный писк (включение/выключение пина с заданной частотой). В одном месте я увидел идею, которая может сработать: формировать напряжение не с помощью pwm, а с помощью 8 ног МК и кучи резисторов. В этом случае,я полагаю, можно значительно увеличить частоту дискретизации. Хотя я, конечно, не уверен что проблема в ней.


 
Kilkennycat ©   (2015-02-11 00:47) [49]


> 8 ног МК и кучи резисторов

это примитивный цап


> Я не настолько глубоко знаком с программированием мк.

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


 
RWolf ©   (2015-02-11 01:01) [50]

Припаяйте какую-нибудь YM2149F и выгружайте в неё любую из статыщмильёнов спектрумовских чиптюнов.


 
Inovet ©   (2015-02-11 01:20) [51]

У тебя 15625 - это частота прерывайний? При этом ШИМ 8 бит? Тогда
15625 / 256 примерно 61 Гц. Откуда взялись 440?


 
Kilkennycat ©   (2015-02-11 02:20) [52]


> Откуда взялись 440?

че-нить включил прескалерное. нет данных, бесполезно гадать. 3 режима пвм, какой юзает - неясно. 8 или 16 бит - только со слов, инициализации невидно. информацию ищет на ютубе...


 
Дмитрий С ©   (2015-02-11 12:32) [53]

Настало время рассказать подробнее.

Сейчас я хочу сделать двухголосную полифонию с поддержкой аккордов (т.к. они есть в выбранной мной мелодии).

Я действительно искал примеры в ютубе, чтобы быть уверенным, что это возможно сделать на моем МК.

МК у меня следующий: Atmega328P-PU с ардуиновским бутлоадером. IDE: тоже ардуино. Компилятор в ней GCC. Сторонних библиотек никаких нет.

Кварц я не припаивал, и с помощью fuse битов включил встроенный в микросхему генератор 8МГц. Сделал я это давно и уже не помню как.

Схема подключения такая: одна нога динамика припаяна к ноге PB4, другая через резистор 120 Ом (корич,красн,корич) к PB1 (т.к. на ней выход выбранного мной таймера и ШИМ-а). Так же к контактам динамика я припаял конденсатор 0,1 мкф (вот такой http://neoviservis.narod.ru/images/cap_k10_17_104.jpg ).
Динамик вытащил из дешевой нокии (он состоит из пленочки, катушки и магнита).
На ногу PB4 я подаю просто минус. На ногу PB1 - ШИМ-сингал.

Была идея вместо минуса в PB4 припаять к другому ШИМ выходу этого же таймера (PB2), чтобы увеличить разрядность потока на 1 бит и увеличить амплитуду колебаний, путем поочередного включения шимов. Но пока до нее не дошел.

Скетч следующий:

volatile unsigned long tickCount = 0;
volatile byte sinCache[1024];

void setup() {
 Serial.begin(9600);
 
 // http://www.jameco.com/Jameco/workshop/JamecoBuilds/arduinocircuit_fig12.jpg
 pinMode(9, OUTPUT);  // Режим ноги PB1 (так что для ШИМа)
 pinMode(12, OUTPUT); // Режим ноги PB4
 digitalWrite(12, 0); // Минус на PB4
 
 for(int i=0; i<sizeof(sinCache); i++) {
   sinCache[i] = 127 + round(127*sin(2 * 3.1415926 * 440 * i / 15700));
   Serial.print(i);
   Serial.print(" ");
   Serial.println(sinCache[i]);
 }

 // Неинвертированный | Шим 8 бит http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh/mega103_38.htm
 // и http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh/mega103_43.htm
 TCCR1A = (1<<7) | (1<<0);

 // http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh/mega103_39.htm
 TCCR1B = (1 << 0); // Без делителя частоты
 
 SREG |= (1<<7); // Глобальное разрешение прерываний.
 TIMSK1 = (1<<TOIE1); // Разрешить прерывание по переполнению Т1. (остальные выключены)
 
 // Для диагностики, значения не имеет:
 unsigned long predTickCount = tickCount;
 while(1) {
   Serial.print(OCR1A);
   Serial.print(" ");
   Serial.print(tickCount);
   Serial.print(" ");
   Serial.println(tickCount - predTickCount);
   predTickCount = tickCount;
   delay(1000);
 }
}

ISR(TIMER1_OVF_vect) {
 tickCount ++;
 // http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh/mega103_43.htm
 OCR1A = sinCache[(tickCount) % sizeof(sinCache)];
}

void loop() {
}



Записать результат смогу вечером.


> Inovet ©   (11.02.15 01:20) [51]
> У тебя 15625 - это частота прерывайний? При этом ШИМ 8 бит?
>  Тогда
> 15625 / 256 примерно 61 Гц. Откуда взялись 440?

15625 раз в секунду таймер успевает дойти с 0 до 255 и затем до 0.
440 образуется путем формирования синусоиды с помощью изменения ширины ШИМ-а.


 
Kilkennycat ©   (2015-02-11 13:19) [54]


> Схема подключения такая: одна нога динамика припаяна к ноге
> PB4, другая через резистор 120 Ом (корич,красн,корич) к
> PB1 (т.к. на ней выход выбранного мной таймера и ШИМ-а).
>  Так же к контактам динамика я припаял конденсатор 0,1 мкф

то есть, если напутаешь с начальным состоянием порта мк, достигаешь тока в 40 миллиампер. Скоро пойдешь покупать новый проц.


 
RWolf ©   (2015-02-11 13:40) [55]

Ну, то есть, частота ШИМ 15625/2 = 7.8125 кГц?
Чтобы получить оценку верхней границы частот сигнала, делим ещё на 4. Грязноватый звук выйдет.


 
Дмитрий С ©   (2015-02-11 13:42) [56]


> то есть, если напутаешь с начальным состоянием порта мк,
>  достигаешь тока в 40 миллиампер. Скоро пойдешь покупать
> новый проц.

Вряд-ли. Во-первых динамик тоже имеет сопротивление, хоть и незначительное. Во-вторых, отлаживаюсь я на 3,3 В, а в итоге работать будет от 4,5 В (три батарейки по 1,5 В). Поэтому ток не превысит 40 мА и всегда будет являться допустимым.


 
Inovet ©   (2015-02-11 13:43) [57]

Т.е. ты исходил из предположения о сопротивлении динамика больше килоома, что-то мне кажется, что его сопротивление несколько десятков Ом, 32 Ома например. Про увеличение разрядности на 1 бит не понял, тем более не понял про увеличение амплитуды. Ладно. У тебя динамик воспроизводит эти твои 15625 Гц с соответсвующими артефактами. ФНЧ надо ниже настроить, да и усилитель надо бы сделать, хоть на одном транзисторе.


 
Дмитрий С ©   (2015-02-11 13:47) [58]


> Ну, то есть, частота ШИМ 15625/2 = 7.8125 кГц?
> Чтобы получить оценку верхней границы частот сигнала, делим
> ещё на 4. Грязноватый звук выйдет.

Почему на два делить?
15625, а по факту получается 15700, это грубо говоря количество минимумов на рисунке:
http://www.gaw.ru/im/_micros/avr/arh/34.gif
т.е. это и есть частота шима.

Можно по подробнее по поводу "делим еще на 4"?


 
Дмитрий С ©   (2015-02-11 13:51) [59]


> Inovet ©   (11.02.15 13:43) [57]

Я исходил из пункта "Во-вторых" из [56].

3,3 В / 120 Ом = 27,5 мА (при допустимых 50)
4,5 В / 120 Ом = 37,5 мА (при допустимых чуть более 40)

Что значит "ФНЧ надо ниже настроить" ?

Усилитель сделаю, как получу нормальный звук без него.


 
Inovet ©   (2015-02-11 13:53) [60]

> [59] Дмитрий С ©   (11.02.15 13:51)
> Что значит "ФНЧ надо ниже настроить" ?

Ты кондесатор тот на 0,1 мкФ от фонаря впаял?

> [59] Дмитрий С ©   (11.02.15 13:51)
> Усилитель сделаю, как получу нормальный звук без него.

Утром деньги, вечером стулья.


 
Inovet ©   (2015-02-11 13:55) [61]

Это если предположить, что в программе всё правильно сделано, и на вышоде действительно шим той синусоиды на 440 Гц, а не фигня какая-нибудь.


 
RWolf ©   (2015-02-11 13:59) [62]


> Почему на два делить?15625, а по факту получается 15700,

Всё верно, я уже прочитал выше.


>  Можно по подробнее по поводу "делим еще на 4"?

Ну, меня так учили: настраивай ФНЧ на четверть частоты ШИМ, чтобы полезный сигнал в звоне не тонул.


 
Дмитрий С ©   (2015-02-11 14:05) [63]

По-поводу увеличения битности и амплитуды вот мои соображения:

Мы имеем два 8-битных ШИМ выхода, подключаем к ним динамик, назовем их А и Б.

Далее формируем 9-битный сигнал: от -255 до 255. Пусть значение сигнала в рассматриваемый момент времени t: S(t).

Динамик расположен так, что его диафрагма двигается вверх и вниз.

Рассмотрим несколько ситуаций:

1. S(t) = 0.  На ноги А и Б одновременно подается 0 или 1. Диафрагма находится в нейтральном положении.
2. S(t) = 200 (т.е. >0). На ногу Б подается 0, на ногу А - ШИМ сигнал 200/255. Диафрагма находится выше нейтрального положения на 200/255 от предельного.
3. S(t) = -200 (т.е. <0). На ногу А подается 0, на ногу Б - ШИМ сигнал 200/255.
Диафрагма находится ниже нейтрального положения на 200/255 от предельного.

------------------------

Пока писал, пришел в голову другой вариант с одним ШИМ-ом. Положим, что нога А - ШИМ, а Б - обычная 0/1.

Рассмотрим несколько ситуаций:
1. S(t) = 0.  На ноги А и Б одновременно подается 0 или 1. Диафрагма находится в нейтральном положении.
2. S(t) = 200 (т.е. >0). На А - ШИМ сигнал 200/255, на Б - 0. Диафрагма находится выше нейтрального положения на 200/255 от предельного.
3. S(t) = -200 (т.е. <0). На А - ШИМ (255-200)/255, на ногу Б - 1. Диафрагма находится ниже нейтрального положения на 200/255 от предельного.

В итоге получаем, что диафрагма динамика перемещается не от 0 до 1, а от -1 до 1 (амплитуда увеличена в два раза), а сигнал получился 9 битный (-255 до 255).


 
Kilkennycat ©   (2015-02-11 14:09) [64]


> Поэтому ток не превысит 40 мА и всегда будет являться допустимым.

неверно.
во-первых, даже при 3.3 в. ток более 20 ма.
при 4.5 ты приблизился к максимальному значению потребления.
Напомню, что максимальное вовсе не равно номинальному.
ну и реализация моста на двух ногах... в момент переключения может выйти кака.


 
Дмитрий С ©   (2015-02-11 14:10) [65]


> Ты кондесатор тот на 0,1 мкФ от фонаря впаял?

Практически.
А вообще отсюда http://www.pic24.ru/doku.php/osa/ref/appendix/quartet


> Ну, меня так учили

Я правильно понял, частота дискретизации самого звука минимум в 4 раза меньше чем частота ШИМ-а должна быть?
На виндовом waveOut я проверил, что частоты дискретизации самого звука 1,96 кГц мне хватит, поэтому у меня даже с запасом.


var
 WF: tWAVEFORMATEX;
 WaveOutHandle: HWAVEOUT;
 i: Integer;

 Buf: array[0..3*8000-1] of byte;
 H: TWaveHdr;
begin
  wf.cbSize := SizeOf(wf);
 wf.wFormatTag:=WAVE_FORMAT_PCM;
 wf.nChannels := 1;    //1 канала
 wf.wBitsPerSample := 8;    //8 бит
 wf.nBlockAlign:=(wf.nChannels * wf.wBitsPerSample) div 8;
 wf.nSamplesPerSec := 1960;    //1,96 кГц
 wf.nAvgBytesPerSec := wf.nSamplesPerSec * wf.nBlockAlign;

 Winapi.Windows.Beep(880, 2000);
 for I := 0 to Length(Buf) - 1 do
 begin
   if I < 8000 then
     Buf[I] := ( 127 +  Round(127 * ( Sin(2 * Pi * I * 880 / wf.nSamplesPerSec) )))
   else
   if I < 16000 then
     Buf[I] := ( 127 +  Round(127 * ( Sin(2 * Pi * I * 440 / wf.nSamplesPerSec) )))
   else
     Buf[I] := ( 127 +  Round(127 * ( Sin(2 * Pi * I * 440 / wf.nSamplesPerSec) + Sin(2 * Pi * I * 880 / wf.nSamplesPerSec) )/2));

 end;
 ZeroMemory(@H, SizeOf(H));
 H.lpData := PAnsiChar(@Buf);
 H.dwBufferLength := SizeOf(Buf);
 H.dwBytesRecorded := 0;
 H.dwFlags := WHDR_INQUEUE;
 H.dwLoops := 10;

 waveOutOpen(@WaveOutHandle, WAVE_MAPPER, @wf, 0, 0, WAVE_ALLOWSYNC or CALLBACK_NULL);
 waveOutPrepareHeader(WaveOutHandle, @H, sizeof(H));
 waveOutWrite(WaveOutHandle, @H,sizeof(H));
 waveOutReStart(WaveOutHandle);
end;


 
Дмитрий С ©   (2015-02-11 14:14) [66]


> неверно.
> во-первых, даже при 3.3 в. ток более 20 ма.
> при 4.5 ты приблизился к максимальному значению потребления.
>
> Напомню, что максимальное вовсе не равно номинальному.
> ну и реализация моста на двух ногах...
>  в момент переключения
> > может выйти кака.


Там в любом случае ШИМ сигнал - даже за пределами этого тока - маловероятно что МК испортится. И при 3.3 V допустимый ток - 50 мА - это из описания МК.

А до "каки" еще дойти нужно:) Учитывая что выходы на одном порту будут, то переключатся они будут одновременно практически. Не знаю, правда, как конденсатору будет от этого:) Но, повторюсь, до этого еще дойти нужно.


 
Inovet ©   (2015-02-11 14:16) [67]

> [65] Дмитрий С ©   (11.02.15 14:10)
> Практически.
> А вообще отсюда

Ну так там сколько написано? 78 кГц, а у тебя 15 кГц.


 
Дмитрий С ©   (2015-02-11 14:17) [68]


> Ну так там сколько написано? 78 кГц, а у тебя 15 кГц.

Если хочешь помочь - помоги, а это я и сам вижу :(


 
Inovet ©   (2015-02-11 14:24) [69]

> [68] Дмитрий С ©   (11.02.15 14:17)

На 78 уже сам динамик добавит фильтрации, потому что не воспроизведёт такую частоту и будет усреднять. А 15 воспроизведёт достаточно хорошо, надо фильтровать сильнее, увеличь ёмкость конденсатора до 0,5 мкФ.


 
Дмитрий С ©   (2015-02-11 14:32) [70]

Пока у меня идея: увеличить частоту ШИМа.

И следующие идеи:
1. Сделать формирования ШИМ-сигнала вручную с периодом 128, вместо 512, тем самым увеличить частоту в 4 раза, до примерно 62 кГц. Пожертвовав 1-им битом звуковой полосы.

2. Впаять кварц на 16 или 20 МГц. Для 8-битного шима, получаем: 20MHz/256 = 78 КГц - уже лучше.

Интересно: а можно переключаться *на ходу* между внешним кварцем и внутренним генератором?


 
Kilkennycat ©   (2015-02-11 14:45) [71]


> Там в любом случае ШИМ сигнал - даже за пределами этого
> тока - маловероятно что МК испортится. И при 3.3 V допустимый
> ток - 50 мА

не в любом случае. есть три случая, когда его там не будет. в момент включения, при сбое-зависании и при ошибке.
и там не допустимый, а максимальный. работа на максимальном ни чем не гарантированна, попадется один мк - проработает долго, другой - сдохнет сразу.
и где ты увидел в даташите 50? там 40. И ты говорил, что 3.3 - это отладка, а работа при 4.5, как-то странно, обычно отлаживают-тестируют в рабочем или более экстремальном режиме, но никак наоборот


> а можно переключаться *на ходу* между внешним кварцем и
> внутренним генератором?


читай даташит. там все есть.


 
RWolf ©   (2015-02-11 15:24) [72]


> Дмитрий С ©   (11.02.15 14:32) [70]
> Пока у меня идея: увеличить частоту ШИМа. И следующие идеи:
> кварц на 16 или 20 МГц.

есть специальные меги с встроенным умножителем частоты ШИМ.


 
Kilkennycat ©   (2015-02-11 16:13) [73]


> 2. Впаять кварц на 16 или 20 МГц. Для 8-битного шима, получаем:
>  20MHz/256 = 78 КГц - уже лучше.

я могу на твоей атмеге при внутреннем генераторе 8 МГц получить шим максимально 4 МГц... просто почитал даташит. еще и занижать придется.


> 20MHz/256 = 78 КГц - уже лучше.

формула неверна. в даташите иной расчет.


 
Дмитрий С ©   (2015-02-11 16:35) [74]


> я могу на твоей атмеге при внутреннем генераторе 8 МГц получить
> шим максимально 4 МГц... просто почитал даташит. еще и занижать
> придется.

Так я хочу программный шим сделать. Перевести таймер в обычный режим. А в прерывании на достижении таймером определенного значения обновлять настройки таймера так, чтобы получить шим длиной 128 тактов, вместо 512, который является минимальным аппаратным.

Хотя, конечно, в крайних положениях обработчику не хватит времени выполниться.

Выходит что этот МК неспособен сделать то что я от него хочу?


 
RWolf ©   (2015-02-11 16:40) [75]

Чем Fast PWM не угодил?


 
Дмитрий С ©   (2015-02-11 16:55) [76]


> RWolf ©   (11.02.15 16:40) [75]

Начал искать что это такое и нашел клевую статью, как раз на похожую тему.

http://easyelectronics.ru/avr-uchebnyj-kurs-ispolzovanie-shim.html

Спасибо.

P.S. Кто-нить знает места в Москве, куда можно придти поработать с этим всем и где будет оборудование (паяльник, осциллограф) и возможно советчик:)


 
Kilkennycat ©   (2015-02-11 17:53) [77]


> Так я хочу программный шим сделать.

зачем? есть замечательный аппаратный, и не один, можно полифонию забабахать. меньшими усилиями. а ты хочешь программный.... развивая идею дальше, тебе и мк не нужен будет - несколько резисторов, счетчик ИД, одна ЛА3 и операционный усилитель.


 
RWolf ©   (2015-02-11 17:57) [78]


>  [77]

Есть замечательные аппаратные музыкальные процессоры за сущие копейки. Вся эта возня с шимами не стоит домашнего применения; я понимаю, если в серийном приборе — там надо экономить.


 
Дмитрий С ©   (2015-02-11 18:49) [79]


> Kilkennycat ©   (11.02.15 17:53) [77]

У аппаратного частота слишком маленькая.


> RWolf ©   (11.02.15 17:57) [78]

Ну уже поздно, устройство уже собрано. А идея "забабахать" полифонию пришла уже после того как я его собрал.


 
Kilkennycat ©   (2015-02-11 20:17) [80]


> У аппаратного частота слишком маленькая.

вовсе нет... ты просто не чувствуешь.
сам подумай - чем обусловлено наличие аппаратного шима? неужели разработчики занизили его б частотную характеристику, к коему нет никаких предпосылок, в угоду чему либо? размышляй объективно, что разработчики мк несколько сильнее тебя и меня вместе взятых (и это так), и невозможность извлечь правильный звук, это не их косяк, а наш.
попробуй осознать шим, что это не только частота, т.е. отношение периода к единице, но и скважность и длительность, что существует множество режимов шим, которые позволяют моделировать в какой-то степени и ам и чм модуляцию, там такие звуки можно извлекать, что просто жуть. Вся фишка именно в осознании того, как это работает.
в противном случае проще потратить 3*N+1 резисторов и собрать примитивный Цап и гнать 8(16)-битный wav



Страницы: 1 2 3 вся ветка

Форум: "Прочее";
Текущий архив: 2015.12.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.65 MB
Время: 0.006 c
2-1403613872
Dennis I. Komarov
2014-06-24 16:44
2015.12.20
function Format


2-1403717600
Sakipiel
2014-06-25 21:33
2015.12.20
как добавить элемент в наследника TCollection


15-1429825354
Rouse_
2015-04-24 00:42
2015.12.20
К девятому мая


15-1429522423
pavelnk
2015-04-20 12:33
2015.12.20
По Андроиду


2-1403765627
Вася
2014-06-26 10:53
2015.12.20
Раскраска строк DBGrid относительно значения поля текущей строки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский