Запрошуємо, Гість
Ім'я користувача: Пароль: Запам’ятати мене
  • Сторінка:
  • 1
  • ...
  • 3
  • 4
  • 5
  • 6
  • 7

ТЕМА: Цифровий генератор на ATMEGA8

Цифровий генератор на ATMEGA8 25 бер. 2020 18:18 #151

  • Soir
  • Soir аватар
  • онлайн
  • Moderator
  • Дописи: 14111
  • Подякували: 5431
  • sxem.org 2019,2020,2021,2022,2023 Respect Author
У меня нет печатной платы в другом формате.
Могу сделать скрин, если он поможет. Но я бы посоветовал установить программу Proteus. Тогда Вы сможете и открывать такие файлы, и открывать файлы схемы, и открывать проекты для симуляции работы устройства. А при необходимости, делать в них правки или создавать свои проекты.
Увійдіть до облікового запису, щоб писати повідомлення.

Цифровий генератор на ATMEGA8 27 бер. 2020 19:43 #152

  • talibjon
  • talibjon аватар
  • Оффлайн
  • Користувач
  • Дописи: 3
Я собрал устройсва. работает хорошо.несколько нюансов: русский шрифт не получился. украинский и английский шрифт поддерживает мой лсд. при отключении сигнала кнопкой старт/стоп выходной сигнал падает на низкий уровень, а при включении сигнал появляется на высоком уровне и через 5-7 сек постепенно переходит в нормальний режим, то есть в середину. может что то не так сделал. питания +5в +/-12в
Увійдіть до облікового запису, щоб писати повідомлення.

Цифровий генератор на ATMEGA8 27 бер. 2020 20:04 #153

  • Soir
  • Soir аватар
  • онлайн
  • Moderator
  • Дописи: 14111
  • Подякували: 5431
  • sxem.org 2019,2020,2021,2022,2023 Respect Author
talibjon пише:
русский шрифт не получился
Я не понял, нужно что-то со шрифтом делать или нормально?

talibjon пише:
через 5-7 сек постепенно переходит в нормальний режим, то есть в середину.
Выход через конденсатор?
Увійдіть до облікового запису, щоб писати повідомлення.

Цифровий генератор на ATMEGA8 27 бер. 2020 20:31 #154

  • talibjon
  • talibjon аватар
  • Оффлайн
  • Користувач
  • Дописи: 3
да если можно русский шрифт сделайте пожалуйста . да выход с операционного усилителя через резистор и конденсатор.
Увійдіть до облікового запису, щоб писати повідомлення.

Цифровий генератор на ATMEGA8 27 бер. 2020 21:30 #155

  • Soir
  • Soir аватар
  • онлайн
  • Moderator
  • Дописи: 14111
  • Подякували: 5431
  • sxem.org 2019,2020,2021,2022,2023 Respect Author
talibjon пише:
да если можно русский шрифт сделайте
Нет, за шрифт отвечает индикатор. Если он поддерживает кириллицу, тогда можно.
talibjon пише:
выход с операционного усилителя через резистор и конденсатор.
Значит такие прыжки и будут, пока не зарядится (разрядится) конденсатор. Если ОУ питается от двухполярного напряжения, то проверьте, чтобы на выходе у него было 0V без сигнала.
Увійдіть до облікового запису, щоб писати повідомлення.

Цифровий генератор на ATMEGA8 04 груд. 2020 11:01 #156

  • rpz3598
  • rpz3598 аватар
  • Оффлайн
  • Користувач
  • Дописи: 13
Можно ли (оставив режим ШИМ ,ТВ, пилообразного, треугольного , прямоугольного сигналов ,"белого" шума, режим ВЧ выхода и другие ранее введенные) ввести еще один режим : режим свип-генератора синусоиды с введением нижней и верхней границ перестройки частоты (меню на английском под 1602 -й индикатор )? Хватит ли памяти или нужно на АТМЕГА16А переходить ? Можно для варианта схемы с диодами на кнопках (схему добавить в архив).
Моя прошивка с ШИМ , без ГКЧ , которая работала. Желательно под эту схему сделать (с диодами на кнопках ) .

Вкладений файл:

Назва файлу: dds_pwm_diodes.zip
Розмір файлу:26 KB
Останнє редагування: 04 груд. 2020 11:48 від rpz3598.
Увійдіть до облікового запису, щоб писати повідомлення.

Цифровий генератор на ATMEGA8 04 груд. 2020 13:08 #157

  • Soir
  • Soir аватар
  • онлайн
  • Moderator
  • Дописи: 14111
  • Подякували: 5431
  • sxem.org 2019,2020,2021,2022,2023 Respect Author
Наверно нет. По крайней мере, это сильно уменьшит максимальную частоту. Также возможны ступеньки и/или кратковременные срывы генерации...
Какой диапазон частот Вам нужен?
Увійдіть до облікового запису, щоб писати повідомлення.

Цифровий генератор на ATMEGA8 06 груд. 2020 17:30 #158

  • rpz3598
  • rpz3598 аватар
  • Оффлайн
  • Користувач
  • Дописи: 13
Можно сделать разбивку на 2...4 поддиапазона , от 10 Гц до 20 кГц(несколько поддиапазонов ), от 20 до 60 кГц . Можно осуществлять перестройку медленно , за 10...30 с, с выдержкой на каждой частоте несколько периодов , сопрягая по нулям . Перестройку можно обеспечить по прерываниям от таймера, перестраивать аналогично перестройке клавишами "на ходу", только таймером. Можно квазиступенчато с выдержкой на каждой частоте .
Останнє редагування: 06 груд. 2020 17:31 від rpz3598.
Увійдіть до облікового запису, щоб писати повідомлення.

Цифровий генератор на ATMEGA8 06 груд. 2020 17:56 #159

  • Soir
  • Soir аватар
  • онлайн
  • Moderator
  • Дописи: 14111
  • Подякували: 5431
  • sxem.org 2019,2020,2021,2022,2023 Respect Author
Нет, не получится.
Увійдіть до облікового запису, щоб писати повідомлення.

Цифровий генератор на ATMEGA8 17 січ. 2021 01:31 #160

  • rpz3598
  • rpz3598 аватар
  • Оффлайн
  • Користувач
  • Дописи: 13
Можно ли на альтернативной платформе (можно и на АТМега16А, можно и по другой схеме, отдельной темой , на АТМега8А ) имплементовать принцип , аналогичный в afrweb.zip (мои эксперименты по адаптации измерителя уровня на основе веб-аудио и ява скрипт, не дописаны до конца ), вывести строб-вывод блокирования детектора при переходе с частоты на частоту (медленно, по точкам, но автоматичнее , чем вручную по точкам , детектор и индикатор внешние, синхронизацию предусмотреть )?

Вкладений файл:

Назва файлу: afrweb.zip
Розмір файлу:6 KB


Можно ли сделать перестройку частоты автоматически с некоторым интервалом при удержании кнопок с переносом в соседние разряды ?
Останнє редагування: 17 січ. 2021 03:13 від rpz3598.
Увійдіть до облікового запису, щоб писати повідомлення.

Цифровий генератор на ATMEGA8 17 січ. 2021 03:14 #161

  • rpz3598
  • rpz3598 аватар
  • Оффлайн
  • Користувач
  • Дописи: 13
Фото
Долучення:
Увійдіть до облікового запису, щоб писати повідомлення.

Цифровий генератор на ATMEGA8 17 січ. 2021 07:16 #162

  • Soir
  • Soir аватар
  • онлайн
  • Moderator
  • Дописи: 14111
  • Подякували: 5431
  • sxem.org 2019,2020,2021,2022,2023 Respect Author
rpz3598 пише:
вывести строб-вывод блокирования детектора при переходе с частоты на частоту (медленно, по точкам, но автоматичнее , чем вручную по точкам , детектор и индикатор внешние, синхронизацию предусмотреть )?
Нет, это не получится. Во время генерации программа отвлекается только на очень короткое время (менее микросекунды) для проверки кнопки. Иначе будут заметные искажения в форме сигнала. Более того, сам перезапуск генератора также занимает довольно значительное время - это Вы можете наблюдать при ручном изменении частоты.

Поэтому здесь возможен только вариант управления процессом генерации от внешнего контроллера. Это может быть небольшой МК, функции которого будут:
1. Управлять генератором по принципу старт/стоп ручной кнопкой или автоматически с каким-то заданным периодом.
2. Формировать стробирующий импульс.
В самом генераторе можно ввести функцию, чтобы при каждом рестарте производить изменение частоты на заданную величину.
Но при каждом рестарте все равно будет наблюдаться кратковременный срыв генерации.

P.S.
Но не лучше ли будет использовать специализированную микросхему-генератор (например AD9850), а управлять ею уже от микроконтроллера? Такие проекты на форуме есть.
Останнє редагування: 17 січ. 2021 07:21 від Soir. Причина: Дополнение.
Увійдіть до облікового запису, щоб писати повідомлення.

Цифровий генератор на ATMEGA8 04 черв. 2021 00:44 #163

  • rpz3598
  • rpz3598 аватар
  • Оффлайн
  • Користувач
  • Дописи: 13
В рабочем варианте у вас данные
//sine 256 values 01A00-01AFF


80 83 86 89 8C 8F 92 95 98 9C 9F A2 A5 A8 AB AE B0 B3 B6 B9 BC BF C1 C4 C7 C9 CC CE D1 D3 D5 D8 DA DC DE E0 E2 E4 E6 E8 EA EC ED EF F0 F2 F3 F5 F6 F7 F8 F9 FA FB FC FC FD FE FE FF FF FF FF FF FF FF FF FF FF FF FE FE FD FC FC FB FA F9 F8 F7 F6 F5 F3 F2 F0 EF ED EC EA E8 E6 E4 E2 E0 DE DC DA D8 D5 D3 D1 CE CC C9 C7 C4 C1 BF BC B9 B6 B3 B0 AE AB A8 A5 A2 9F 9C 98 95 92 8F 8C 89 86 83 80 7C 79 76 73 70 6D 6A 67 63 60 5D 5A 57 54 51 4F 4C 49 46 43 40 3E 3B 38 36 33 31 2E 2C 2A 27 25 23 21 1F 1D 1B 19 17 15 13 12 10 0F 0D 0C 0A 09 08 07 06 05 04 03 03 02 01 01 00 00 00 00 00 00 00 00 00 00 00 01 01 02 03 03 04 05 06 07 08 09 0A 0C 0D 0F 10 12 13 15 17 19 1B 1D 1F 21 23 25 27 2A 2C 2E 31 33 36 38 3B 3E 40 43 46 49 4C 4F 51 54 57 5A 5D 60 63 67 6A 6D 70 73 76 79 7C


 //square wave 01B00-01BFF

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

//sawtooth wave 01C00-01CFF
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF

//reverse sawtooth wave 01D00-01DFF
FF FE FD FC FB FA F9 F8 F7 F6 F5 F4 F3 F2 F1 F0 EF EE ED EC EB EA E9 E8 E7 E6 E5 E4 E3 E2 E1 E0 DF DE DD DC DB DA D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 CF CE CD CC CB CA C9 C8 C7 C6 C5 C4 C3 C2 C1 C0 BF BE BD BC BB BA B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 AF AE AD AC AB AA A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 9F 9E 9D 9C 9B 9A 99 98 97 96 95 94 93 92 91 90 8F 8E 8D 8C 8B 8A 89 88 87 86 85 84 83 82 81 80 7F 7E 7D 7C 7B 7A 79 78 77 76 75 74 73 72 71 70 6F 6E 6D 6C 6B 6A 69 68 67 66 65 64 63 62 61 60 5F 5E 5D 5C 5B 5A 59 58 57 56 55 54 53 52 51 50 4F 4E 4D 4C 4B 4A 49 48 47 46 45 44 43 42 41 40 3F 3E 3D 3C 3B 3A 39 38 37 36 35 34 33 32 31 30 2F 2E 2D 2C 2B 2A 29 28 27 26 25 24 23 22 21 20 1F 1E 1D 1C 1B 1A 19 18 17 16 15 14 13 12 11 10 0F 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00


//triangle wave  01E00-01EFF 
00 02 04 06 08 0A 0C 0E 10 12 14 16 18 1A 1C 1E 20 22 24 26 28 2A 2C 2E 30 32 34 36 38 3A 3C 3E 40 42 44 46 48 4A 4C 4E 50 52 54 56 58 5A 5C 5E 60 62 64 66 68 6A 6C 6E 70 72 74 76 78 7A 7C 7E 80 82 84 86 88 8A 8C 8E 90 92 94 96 98 9A 9C 9E A0 A2 A4 A6 A8 AA AC AE B0 B2 B4 B6 B8 BA BC BE C0 C2 C4 C6 C8 CA CC CE D0 D2 D4 D6 D8 DA DC DE E0 E2 E4 E6 E8 EA EC EE F0 F2 F4 F6 F8 FA FC FE FF FD FB F9 F7 F5 F3 F1 EF EF EB E9 E7 E5 E3 E1 DF DD DB D9 D7 D5 D3 D1 CF CF CB C9 C7 C5 C3 C1 BF BD BB B9 B7 B5 B3 B1 AF AF AB A9 A7 A5 A3 A1 9F 9D 9B 99 97 95 93 91 8F 8F 8B 89 87 85 83 81 7F 7D 7B 79 77 75 73 71 6F 6F 6B 69 67 65 63 61 5F 5D 5B 59 57 55 53 51 4F 4F 4B 49 47 45 43 41 3F 3D 3B 39 37 35 33 31 2F 2F 2B 29 27 25 23 21 1F 1D 1B 19 17 15 13 11 0F 0F 0B 09 07 05 03 01



//TV bars 01F00-01FFF
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

 


















//define signals
const uint8_t  sinewave[] __attribute__ ((section (".MySection1")))= //sine 256 values
{
0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,
0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,
0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf5,
0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,
0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe2,0xe0,0xde,0xdc,
0xda,0xd8,0xd5,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb3,
0xb0,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x98,0x95,0x92,0x8f,0x8c,0x89,0x86,0x83,
0x80,0x7c,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,
0x4f,0x4c,0x49,0x46,0x43,0x40,0x3e,0x3b,0x38,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,
0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0a,
0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,
0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x15,0x17,0x19,0x1b,0x1d,0x1f,0x21,0x23,
0x25,0x27,0x2a,0x2c,0x2e,0x31,0x33,0x36,0x38,0x3b,0x3e,0x40,0x43,0x46,0x49,0x4c,
0x4f,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x67,0x6a,0x6d,0x70,0x73,0x76,0x79,0x7c
};
const uint8_t squarewave[] __attribute__ ((section (".MySection2")))= //square wave
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
};
const uint8_t sawtoothwave[] __attribute__ ((section (".MySection3")))= //sawtooth wave
{
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,
0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,
0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,
0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf,
0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,
0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf,
0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,
0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff
};
const uint8_t rewsawtoothwave[] __attribute__ ((section (".MySection4")))= //reverse sawtooth wave
{
0xff,0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf3,0xf2,0xf1,0xf0,
0xef,0xee,0xed,0xec,0xeb,0xea,0xe9,0xe8,0xe7,0xe6,0xe5,0xe4,0xe3,0xe2,0xe1,0xe0,
0xdf,0xde,0xdd,0xdc,0xdb,0xda,0xd9,0xd8,0xd7,0xd6,0xd5,0xd4,0xd3,0xd2,0xd1,0xd0,
0xcf,0xce,0xcd,0xcc,0xcb,0xca,0xc9,0xc8,0xc7,0xc6,0xc5,0xc4,0xc3,0xc2,0xc1,0xc0,
0xbf,0xbe,0xbd,0xbc,0xbb,0xba,0xb9,0xb8,0xb7,0xb6,0xb5,0xb4,0xb3,0xb2,0xb1,0xb0,
0xaf,0xae,0xad,0xac,0xab,0xaa,0xa9,0xa8,0xa7,0xa6,0xa5,0xa4,0xa3,0xa2,0xa1,0xa0,
0x9f,0x9e,0x9d,0x9c,0x9b,0x9a,0x99,0x98,0x97,0x96,0x95,0x94,0x93,0x92,0x91,0x90,
0x8f,0x8e,0x8d,0x8c,0x8b,0x8a,0x89,0x88,0x87,0x86,0x85,0x84,0x83,0x82,0x81,0x80,
0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x76,0x75,0x74,0x73,0x72,0x71,0x70,
0x6f,0x6e,0x6d,0x6c,0x6b,0x6a,0x69,0x68,0x67,0x66,0x65,0x64,0x63,0x62,0x61,0x60,
0x5f,0x5e,0x5d,0x5c,0x5b,0x5a,0x59,0x58,0x57,0x56,0x55,0x54,0x53,0x52,0x51,0x50,
0x4f,0x4e,0x4d,0x4c,0x4b,0x4a,0x49,0x48,0x47,0x46,0x45,0x44,0x43,0x42,0x41,0x40,
0x3f,0x3e,0x3d,0x3c,0x3b,0x3a,0x39,0x38,0x37,0x36,0x35,0x34,0x33,0x32,0x31,0x30,
0x2f,0x2e,0x2d,0x2c,0x2b,0x2a,0x29,0x28,0x27,0x26,0x25,0x24,0x23,0x22,0x21,0x20,
0x1f,0x1e,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,
0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00,
};

const uint8_t trianglewave[] __attribute__ ((section (".MySection5")))= //triangle wave
{
0x00,0x02,0x04,0x06,0x08,0x0a,0x0c,0x0e,0x10,0x12,0x14,0x16,0x18,0x1a,0x1c,0x1e,
0x20,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e,0x30,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3e,
0x40,0x42,0x44,0x46,0x48,0x4a,0x4c,0x4e,0x50,0x52,0x54,0x56,0x58,0x5a,0x5c,0x5e,
0x60,0x62,0x64,0x66,0x68,0x6a,0x6c,0x6e,0x70,0x72,0x74,0x76,0x78,0x7a,0x7c,0x7e,
0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e,0x90,0x92,0x94,0x96,0x98,0x9a,0x9c,0x9e,
0xa0,0xa2,0xa4,0xa6,0xa8,0xaa,0xac,0xae,0xb0,0xb2,0xb4,0xb6,0xb8,0xba,0xbc,0xbe,
0xc0,0xc2,0xc4,0xc6,0xc8,0xca,0xcc,0xce,0xd0,0xd2,0xd4,0xd6,0xd8,0xda,0xdc,0xde,
0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xee,0xf0,0xf2,0xf4,0xf6,0xf8,0xfa,0xfc,0xfe,
0xff,0xfd,0xfb,0xf9,0xf7,0xf5,0xf3,0xf1,0xef,0xef,0xeb,0xe9,0xe7,0xe5,0xe3,0xe1,
0xdf,0xdd,0xdb,0xd9,0xd7,0xd5,0xd3,0xd1,0xcf,0xcf,0xcb,0xc9,0xc7,0xc5,0xc3,0xc1,
0xbf,0xbd,0xbb,0xb9,0xb7,0xb5,0xb3,0xb1,0xaf,0xaf,0xab,0xa9,0xa7,0xa5,0xa3,0xa1,
0x9f,0x9d,0x9b,0x99,0x97,0x95,0x93,0x91,0x8f,0x8f,0x8b,0x89,0x87,0x85,0x83,0x81,
0x7f,0x7d,0x7b,0x79,0x77,0x75,0x73,0x71,0x6f,0x6f,0x6b,0x69,0x67,0x65,0x63,0x61,
0x5f,0x5d,0x5b,0x59,0x57,0x55,0x53,0x51,0x4f,0x4f,0x4b,0x49,0x47,0x45,0x43,0x41,
0x3f,0x3d,0x3b,0x39,0x37,0x35,0x33,0x31,0x2f,0x2f,0x2b,0x29,0x27,0x25,0x23,0x21,
0x1f,0x1d,0x1b,0x19,0x17,0x15,0x13,0x11,0x0f,0x0f,0x0b,0x09,0x07,0x05,0x03,0x01
};


 
const uint8_t TVBars[] __attribute__ ((section (".MySection6")))= // TV bars
{  
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 
0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 
0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 
0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x60, 0x60, 0x60, 
0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 
0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 
0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 
0xA0, 0xA0, 0xA0, 0xA0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 
0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 
0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 
0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};





Длительность кадровых синхроимпульсов неадекватна, но как пробник сигналов псевдовидеоформы сойдет. Можно steps написать в названии
Останнє редагування: 04 черв. 2021 01:04 від rpz3598.
Увійдіть до облікового запису, щоб писати повідомлення.

Цифровий генератор на ATMEGA8 04 черв. 2021 19:48 #164

  • rpz3598
  • rpz3598 аватар
  • Оффлайн
  • Користувач
  • Дописи: 13
Для полос светлая слева (тогда это просто ступенчатый сигнал ).
const uint8_t TVBars[] __attribute__ ((section (".MySection6")))= // TV bars
{  
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //синхро
0xFF, 0xFF,... //белый

  0x40, 0x40 //черный 
};
 обычнее?
Периодическое изменение длительности синхроимпульсов отсутствует (только строчные СИ).
Может частот добавите для ШИМ?
Адрес 0x00097C-0x0009B4 (ваше изобретение, не я придумывал , но DB не команды с операндами): может пробелы введете(не занимайтесь пропагандой )?
Может, нормальные исходники покажете, иначе альтсборку с нормального прототипа на Мега16 можно придумать независимо.
Долучення:
Останнє редагування: 04 черв. 2021 21:41 від rpz3598.
Увійдіть до облікового запису, щоб писати повідомлення.

Цифровий генератор на ATMEGA8 04 черв. 2021 21:41 #165

  • Soir
  • Soir аватар
  • онлайн
  • Moderator
  • Дописи: 14111
  • Подякували: 5431
  • sxem.org 2019,2020,2021,2022,2023 Respect Author
Если честно, мне телевизионный сигнал совершенно не интересен. Ни на момент написания программы, ни сейчас. Он получился как бы "бесплатно" и было интересно лишь его запустить. Собственно, это относится и к большинству форм сигналов этого генератора.

rpz3598 пише:
...не занимайтесь пропагандой...
Это Вы о чем?

rpz3598 пише:
Может, нормальные исходники покажете
Исходники не распространяются.
Останнє редагування: 04 черв. 2021 21:43 від Soir. Причина: Дополнение
Увійдіть до облікового запису, щоб писати повідомлення.

Цифровий генератор на ATMEGA8 04 черв. 2021 23:36 #166

  • rpz3598
  • rpz3598 аватар
  • Оффлайн
  • Користувач
  • Дописи: 13
На радиокоте есть аналог

Вкладений файл:

Назва файлу: 03.7z
Розмір файлу:30 KB

Вкладений файл:

Назва файлу: 15.zip
Розмір файлу:100 KB



Если переделать под другую цоколевку DDS Soir с диодами ?
Увійдіть до облікового запису, щоб писати повідомлення.

Цифровий генератор на ATMEGA8 05 черв. 2021 05:48 #167

  • rpz3598
  • rpz3598 аватар
  • Оффлайн
  • Користувач
  • Дописи: 13
В ddsproj.zip (от атмега16 к атмега8а, 16МГц ) как правильно использовать таймер0 , таймер 1, таймер 2, смысл прерываний INT0 для управления кнопками и для инлайнового кода ? OC1A у нас ШИМ, OC1B у нас не на вывод, OC2 у нас не на вывод (там кнопки). INT0 у нас на вывод ЦАП (фишка в инлайновых кодах ). Таймер0 в ней есть .



Вкладений файл:

Назва файлу: ddsproj_баги-2.zip
Розмір файлу:96 KB






1 0x000(1) RESET External Pin, Power-on Reset, Brown-out Reset,and Watchdog Reset
2 0x001 INT0 External Interrupt Request 0
3 0x002 INT1 External Interrupt Request 1
4 0x003 TIMER2 COMP Timer/Counter2 Compare Match
5 0x004 TIMER2 OVF Timer/Counter2 Overflow
6 0x005 TIMER1 CAPT Timer/Counter1 Capture Event
7 0x006 TIMER1 COMPA Timer/Counter1 Compare Match A
8 0x007 TIMER1 COMPB Timer/Counter1 Compare Match B
9 0x008 TIMER1 OVF Timer/Counter1 Overflow
10 0x009 TIMER0 OVF Timer/Counter0 Overflow
11 0x00A SPI, STC Serial Transfer Complete
12 0x00B USART, RXC USART, Rx Complete
13 0x00C USART, UDRE USART Data Register Empty
14 0x00D USART, TXC USART, Tx Complete
15 0x00E ADC ADC Conversion Complete
16 0x00F EE_RDY EEPROM Ready
17 0x010 ANA_COMP Analog Comparator
18 0x011 TWI Two-wire Serial Interface
19 0x012 SPM_RDY Store Program Memory Ready
Останнє редагування: 05 черв. 2021 05:51 від rpz3598.
Увійдіть до облікового запису, щоб писати повідомлення.

Цифровий генератор на ATMEGA8 05 черв. 2021 07:01 #168

  • rpz3598
  • rpz3598 аватар
  • Оффлайн
  • Користувач
  • Дописи: 13
void static inline Signal_OUT(const uint8_t *signal, uint8_t ad2, uint8_t ad1, uint8_t ad0)
{
asm volatile(	 "eor r18, r18 	;r18<-0"	"\n\t"
		 "eor r19, r19 	;r19<-0"	"\n\t"
		 "1:"						"\n\t"
		  "add r18, %0	;1 cycle"			"\n\t"
		  "adc r19, %1	;1 cycle"			"\n\t"	
		  "adc %A3, %2	;1 cycle"			"\n\t"
		  "lpm 			;3 cycles" 	"\n\t"
		  "out %4, __tmp_reg__	;1 cycle"	"\n\t"
		  "sbis %5, 2		;1 cycle if no skip" "\n\t"
		  "rjmp 1b		;2 cycles. Total 10 cycles"	"\n\t"
		  :
		  :"r" (ad0),"r" (ad1),"r" (ad2),"e" (signal),"I" (_SFR_IO_ADDR(PORTD)), "I" (_SFR_IO_ADDR(SPCR))
		  :"r18", "r19" 
	);
}

У нас

%0 - ad0
%1 - ad1
%2 - ad2
%A3 - *signal
%4 - "I"_SFR_IO_ADDR(PORTD)
%5 - "I"(_SFR_IO_ADDR(SPCR))
Используется бит nSS для PB2 ( нестандартное использование бита схемы SPI), через SPCR.CPHA
(SPI Control Register – SPCR(7...0):SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0 )


Bit 2 – CPHA: Clock Phase
The settings of the Clock Phase bit (CPHA) determine if data is sampled on the leading
(first) or trailing (last) edge of SCK. Refer to Figure 67 and Figure 68 for an example.
The CPHA functionality is summarized below:
CPHA; Leading Edge; Trailing Edge
0 ; Sample ; Setup
1 ; Setup ; Sample
Bit 3 – CPOL: Clock Polarity
When this bit is written to one, SCK is high when idle. When CPOL is written to zero,
SCK is low when idle. Refer to Figure 67 and Figure 68 for an example. The CPOL functionality is summarized below:

CPOL Leading Edge Trailing Edge
0 Rising Falling
1 Falling Rising
Bit 4 – MSTR: Master/Slave Select
This bit selects Master SPI mode when written to one, and Slave SPI mode when written
logic zero. If SS is configured as an input (for button) and is driven low while MSTR is set, MSTR will be cleared, and SPIF in SPSR will become set. The user will then have to set MSTR to
re-enable SPI Master mode
;(1<<SPE) - разрешение работы SPI
;(1<<MSTR) - режим ведущего
;(1<<CPOL) - во время ожидания на SCK присутствует ВЫСОКИЙ уровень
;(1<<CPHA) - данные считываются по спадающему фронту SCK



;(1<<SPE) - разрешение работы SPI
;(0<<MSTR) - режим ведомого
;(1<<CPOL) - во время ожидания на SCK присутствует ВЫСОКИЙ уровень
;(1<<CPHA) - данные считываются по спадающему фронту SCK
;(1<<SPR1)|(1<<SPR0) - частота SCK равна СК/128
www.gaw.ru/pdf/Atmel/AVR/atmega16.pdf
www.gaw.ru/pdf/Atmel/AVR/atmega8.pdf (в АТМега8а аналогично атмега16,атмега8 только другие пины ).


Поэтому плохо переместимо без других хардовых прерываний на другие пины .
Останнє редагування: 05 черв. 2021 07:07 від rpz3598.
Увійдіть до облікового запису, щоб писати повідомлення.

Цифровий генератор на ATMEGA8 05 черв. 2021 07:44 #169

  • rpz3598
  • rpz3598 аватар
  • Оффлайн
  • Користувач
  • Дописи: 13
С PROGMEM билдится в седьмой АтмелСтудии , но выпадают нули, с секциями и указанием в проекте в новом компиляторе это менее удобно (в старом с тулчейном сверху в опциях проекта задавались или в мєйкфайле ).
const uint8_t TVBars[] PROGMEM = // TV bars
{
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x60, 0x60, 0x60,
 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
 0xA0, 0xA0, 0xA0, 0xA0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFF, 0xFF,
 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};



Вкладений файл:

Назва файлу: dds8app-1.zip
Розмір файлу:70 KB

а в файле прошивки мэппится, в .lss нули пропускает.
Останнє редагування: 05 черв. 2021 09:00 від rpz3598.
Увійдіть до облікового запису, щоб писати повідомлення.

Цифровий генератор на ATMEGA8 05 черв. 2021 07:58 #170

  • Soir
  • Soir аватар
  • онлайн
  • Moderator
  • Дописи: 14111
  • Подякували: 5431
  • sxem.org 2019,2020,2021,2022,2023 Respect Author
rpz3598, прочтите Правила форума. Обратите внимание на раздел 5, п.8.
Предупреждение. Постарайтесь больше не нарушать.
Увійдіть до облікового запису, щоб писати повідомлення.
Користувачі які сказали Дякую: rpz3598

Цифровий генератор на ATMEGA8 07 черв. 2021 07:44 #171

  • rpz3598
  • rpz3598 аватар
  • Оффлайн
  • Користувач
  • Дописи: 13
У вас по какой формуле фаза считается (если 10 тактов ): через деление на 5 или на 3125?

Пример для сравнения на обычном Си++(тормозит , но в узлах интерполяции считает ).
В некоторых компиляторах потом плохо деление на резолюцию считается (cvavreval , codevision , глядя на прототипы ).
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdint.h>
 #define RESOLUTION 0.095367431640625 //    1/10,48576
 #define NTICKS 10
 #define FCPU 16000000UL  //F4 2400
//  #define RESOLUTION  FCPU/NTICKS/2^24    16 777 216   (0x100 0000   1 0000 0000 0000 0000 0000 0000  ) (1<<24)
 
 //10=5*2
 //FCPU/10=FCPU/5/2=(FCPU>>1)/5
 
 //((FCPU>>1)/(5*  (1<<24))
 //((FCPU)/(10*  (1<<24)) 
 
 //2^n     2<<(n-1)    =    1<<n;
 //m-тую степень 2  n << m;
 
 //freq/ RESOLUTION=freq *10*(2^24)/ 16000000=freq *(2^24)/ 1600000
 //freq*10*(1<<24)/16000000
 //freq*10*(16777216)/16000000
 //freq*2*5*(16777216)/2*8000000           16000000
 //freq*5*(16777216)/8000000
//16000000/2^10    (or  1024) =15625   

// 2^10  --> (1<<10)
//(uint32_t) (((uint64_t)freq<<24)/(15625*(1<<10));
//(uint32_t) (((uint64_t)  freq<<(24-10))*10/(15625 );
//(uint32_t) (((uint64_t)  freq<<14 )*10/(15625 );  15625 =5^6
//(uint32_t) (((uint64_t)  freq<<14 )*2*5/(15625 /5);  15625 =5^6

uint32_t  div_5( uint32_t N   )
{
int32_t Q=0;
int32_t R=(int32_t ) N; 
while(R>=0x00000005){ Q++; R-=0x00000005; }
//printf ("\nN=%ld R=%ld  Q=%ld  ",N,R,Q ); 
return  (uint32_t)Q;
}

 

//uint32_t  div_10( uint32_t N   )
//{
//int32_t Q=0;
//int32_t R=(int32_t ) N; 
//while(R>=10UL){ Q++; R-=10UL; }
//printf ("\nN=%ld R=%ld  Q=%ld  ",N,R,Q ); 
//return  (uint32_t)Q;
//}

uint32_t  div_3125( uint32_t N   )
{
int32_t Q=0;
int32_t R=(int32_t ) N; 
while(R>=0x00000C35){ Q++; R-=0x00000C35; }
//printf ("\nN=%ld R=%ld  Q=%ld  ",N,R,Q ); 
return  (uint32_t)Q;
}


int main(void)
{
  
FILE *fp;
char name[80];
 
 
 
if((fp=fopen("data.txt", "w")) == NULL) {printf("Cannot open directory file."); exit(1);}
 for(int i=0; i<65536;i++)
{
int freq=(uint32_t)i;
 uint32_t phase=( uint32_t )freq/ RESOLUTION;
 
 //uint32_t ph1=(uint32_t) (((uint64_t)freq<<24)/1600000);
 
  uint32_t ph1= (uint32_t) ( (uint64_t) ((uint32_t) (freq<<15)) /3125) ;
  
  //uint32_t ph2= (uint32_t) ( (uint32_t) ((uint32_t) (freq<<15)) /3125) ;
  //3125=5^5 5 callings of the sub. dib by 5 
    uint32_t ph2= (uint32_t) ( (uint32_t) ((uint32_t) (freq<<15))   ) ;
    ph2=div_3125( ph2  );
 

 //   ph2=div_5( ph2  ) ;
 //   ph2=div_5( ph2  ) ;
 //   ph2=div_5( ph2  ) ;
 //   ph2=div_5( ph2  ) ;
 //   ph2=div_5( ph2  ) ;*/
 //  for(uint8_t i1=0; i1<5;i1++){    ph2=div_5( ph2  ) ;  }
 
 
 
fprintf(fp,"f= %d    ph=%d    ph1(64bit)=%d   ph2(32bit)=%d \n",  (int) freq, (int) phase, (int) ph1,  (int) ph2);
 
 
 
}
fclose(fp);
return 0;
}
Останнє редагування: 07 черв. 2021 07:45 від rpz3598.
Увійдіть до облікового запису, щоб писати повідомлення.

Цифровий генератор на ATMEGA8 16 січ. 2022 17:11 #172

  • rpz3598
  • rpz3598 аватар
  • Оффлайн
  • Користувач
  • Дописи: 13

Вкладений файл:

Назва файлу: dds8app.zip
Розмір файлу:75 KB


Вкладений файл:

Назва файлу: dds8app105...d152.zip
Розмір файлу:13 KB


Вкладений файл:

Назва файлу: схема.zip
Розмір файлу:70 KB



Альтернативная сборка с экспонентой и альтернативным ТВ-сигналом (без диодов). Обсуждал на киберфоруме. Вся не помещается, на сайте лимит 100 килобайт (пока ограничивается правилами форума, для нормального проекта это немного проблема).
Останнє редагування: 16 січ. 2022 17:28 від rpz3598. Причина: аттач
Увійдіть до облікового запису, щоб писати повідомлення.
  • Сторінка:
  • 1
  • ...
  • 3
  • 4
  • 5
  • 6
  • 7
Модератори: Wolf, Vakula, Айнцвайдрайченко, Soir