Вопрос программистам

Флейм в чистом виде - все что угодно...
Но - в рамках закона :)
roman.com
Друг Кота
Сообщения: 9157
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Вопрос программистам

Сообщение roman.com »

TovarishAleksey писал(а):Обойдусь пока без программатора, а то ещё на неделю затянется.
а может наоборот... всё ускорится))
:)
[uquote="TovarishAleksey",url="/forum/viewtopic.php?p=4640576#p4640576"]TCCR1B = (1 << CS12);
Говорят, что CS12 это 2[/uquote]
второй бит в регистре TCCR1B
Screenshot_1.jpg
(11.4 КБ) 41 скачивание
[uquote="TovarishAleksey",url="/forum/viewtopic.php?p=4640576#p4640576"]должны получить 4[/uquote]
получили 4
[uquote="TovarishAleksey",url="/forum/viewtopic.php?p=4640576#p4640576"]но получаем 256[/uquote]
получаем 256
Screenshot_2.jpg
(33.5 КБ) 55 скачиваний
так устроен микроконтроллер ))
Screenshot_3.jpg
(45.97 КБ) 43 скачивания
:dont_know:
Реклама
Аватара пользователя
TovarishAleksey
Потрогал лапой паяльник
Сообщения: 313
Зарегистрирован: Вс сен 22, 2024 12:16:47
Откуда: Село Лютенька

Re: Вопрос программистам

Сообщение TovarishAleksey »

А! Так дело даже не в сдвигах, а в соченатии битов таймера?

Добавлено after 2 minutes:
с ассемблером и в правду быстрее было бы, а вот сделать программатор - это мне ещё задачка. Если с видеокартой получится, то можно будет и программатором заняться))
"Умный может зарабатывать триста рублей, а проживать три тысячи"
Реклама
Аватара пользователя
Фунтик
Собутыльник Кота
Сообщения: 2706
Зарегистрирован: Пт фев 12, 2010 13:47:17

Re: Вопрос программистам

Сообщение Фунтик »

TovarishAleksey писал(а):с ассемблером и в правду быстрее было бы
ассемблерные вставки никто даже в ардуине, насколько помню, не отменял.
roman.com
Друг Кота
Сообщения: 9157
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Вопрос программистам

Сообщение roman.com »

[uquote="TovarishAleksey",url="/forum/viewtopic.php?p=4640605#p4640605"]А! Так дело даже не в сдвигах, а в соченатии битов таймера?[/uquote]
весь микроконтроллер от начала и до конца построен на соченатии битов в регистрах...
Фунтик писал(а):
TovarishAleksey писал(а):с ассемблером и в правду быстрее было бы
ассемблерные вставки никто даже в ардуине, насколько помню, не отменял.
на всякий случай напомню...

TovarishAleksey пишет в ардуино IDE
TovarishAleksey пишет на с++
TovarishAleksey делает ассемблерные вставки NOP

вот только пока не получается чёткого сигнала...
:dont_know:
теперь перешли на таймеры...
:)
но есть сомнения что с таймерами будет лучше))
:tea:
а что делать ?
:roll:
в идеале сразу переходить на асм... и не тратить нервы))
:))
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
TovarishAleksey
Потрогал лапой паяльник
Сообщения: 313
Зарегистрирован: Вс сен 22, 2024 12:16:47
Откуда: Село Лютенька

Re: Вопрос программистам

Сообщение TovarishAleksey »

не, таймеров должно хватить. Я пробовал разные библиотеки, там тоже таймеры используются, всё отлично работает. А вот те библиотеки, использующие nopы работают корявенько. Вывод: либо си++, либо ассемблер, но не вместе. Я могу в принципе просто скопировать код оттуда, но это бессмысленно делать, так как основная цель - научиться новому. Чистый ассемблер всё равно я пока не буду использовать, программатора нет.
"Умный может зарабатывать триста рублей, а проживать три тысячи"
Реклама
roman.com
Друг Кота
Сообщения: 9157
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Вопрос программистам

Сообщение roman.com »

TovarishAleksey писал(а):либо си++, либо ассемблер, но не вместе.
во)) умные мысли пошли))
:tea:
только не ясно зачем там делитель 256...
TCCR1B = (1 << CS12);
получим 1/16МГц = 62,5нс * 256 = 16мкс.
а нам надо 31,77мкс.
строка.jpg
(44.55 КБ) 38 скачиваний
хотя... за два прерывания получим 32мкс... в принципе работать должно и так...
главное чтоб картинка не дрожала))
а для этого надо выводить в порт VGA данные с постоянной скорость... что на си++ в принципе возможно... но надо быть осторожным))
:tea:
Реклама
Аватара пользователя
TovarishAleksey
Потрогал лапой паяльник
Сообщения: 313
Зарегистрирован: Вс сен 22, 2024 12:16:47
Откуда: Село Лютенька

Re: Вопрос программистам

Сообщение TovarishAleksey »

делитель 256 я выбрал на эники беники, просто для того, чтобы понять что это за монстр таймер1, и как им управлять. Вот как изучу его, так сразу и по делу заюзаю. Картинка не будет дрожать, так как наши таймеры вызывают прерывания в точно заданные промежутки времени!

Добавлено after 3 minutes 22 seconds:
Могут возникнуть неприятные артефакты картинки, если сильно отклоняться от "стандарта", такие как белые полосы, уменьшенные пиксели.
"Умный может зарабатывать триста рублей, а проживать три тысячи"
roman.com
Друг Кота
Сообщения: 9157
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Вопрос программистам

Сообщение roman.com »

Да, таймеры вызывают прерывания в точно заданные промежутки времени...
Но, нам же надо и писать тоже в точно заданные промежутки времени...
А где мы будем писать ? логично предположить что в прерываниях... ))
А как мы будем писать ? в цикле ? на с++ ? ну... знаете... на с++ никто ничего не гарантирует))
Аватара пользователя
TovarishAleksey
Потрогал лапой паяльник
Сообщения: 313
Зарегистрирован: Вс сен 22, 2024 12:16:47
Откуда: Село Лютенька

Re: Вопрос программистам

Сообщение TovarishAleksey »

циклы в си++ - довольно вкусная вещь, не стоит их недооценивать. Главное не использовать посторонние функции, которые весь таймер могут сбить, а использовать регистры!
"Умный может зарабатывать триста рублей, а проживать три тысячи"
roman.com
Друг Кота
Сообщения: 9157
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Вопрос программистам

Сообщение roman.com »

регистры... на С++ ?
:roll:
что то новенькое))
:tea:

таймер... таймер...
чё там с ним разбираться))

два регистра - режим работы и делитель... настраивать надо))
TCCR1A=0x02; //WGM11=1, WGM10=0
TCCR1B=0x1C; //WGM13=1, WGM12=1

речистр счётчика... его настраивать не надо)) его читать надо... если вообще надо))
TCNT1H=0x00;
TCNT1L=0x00;

регистр захвата... он определяет длительность импульсов... настраивать надо))
ICR1H=0x00; //регистр захвата - верхний предел счета
ICR1L=0x00; //регистр захвата - верхний предел счета

регистр для вывода b1... настраивать надо))
OCR1AH=0x00;
OCR1AL=0x00;

регистр для вывода b2... настраивать не надо))
OCR1BH=0x00;
OCR1BL=0x00;
Screenshot_1.jpg
(26.5 КБ) 29 скачиваний
ну... как бы просто всё))
Аватара пользователя
TovarishAleksey
Потрогал лапой паяльник
Сообщения: 313
Зарегистрирован: Вс сен 22, 2024 12:16:47
Откуда: Село Лютенька

Re: Вопрос программистам

Сообщение TovarishAleksey »

та нет, регистры в си++ совсем не новая вещь! Конечно, в теории всё просто, и вроде всё понятно, а на практике, мне даже не ясно с чего начать. Посему, я экспериментирую со значениями, смотрю что в итоге получается.
"Умный может зарабатывать триста рублей, а проживать три тысячи"
roman.com
Друг Кота
Сообщения: 9157
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Вопрос программистам

Сообщение roman.com »

TovarishAleksey писал(а):мне даже не ясно с чего начать.
начни с таймера))

режим 14 (быстрая шим)
WGM13=1, WGM12=1, WGM11=1, WGM10=0
режим.jpg
(105.93 КБ) 50 скачиваний
записываем...
TCCR1A = (1 << WGM11);
TCCR1B = (1 << WGM13) | (1 << WGM12);
начало положено))
:tea:

сейчас таймер остановлен... а чтоб запустить надо включить делитель...
CS12, CS11, CS10
делитель.jpg
(41.62 КБ) 46 скачиваний
записываем...
TCCR1A = (1 << WGM11);
TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS10);
таймер завёлся)) с частотой кварца 16МГц
1/16МГц = 62,5нс - один такт таймера.
:tea:
сколько у нас трока ?
строка.jpg
(48.31 КБ) 42 скачивания
31,77мкс
сколько это тактов ?
31,77мкс / 62,5нс = 508,32 тактов

записываем... 508 тактов
ICR1H=1; //регистр захвата - верхний предел счета
ICR1L=252; //регистр захвата - верхний предел счета
или так... не знаю как ардуина лучше понимает))
ICR1H=0x01; //регистр захвата - верхний предел счета 508 тактов
ICR1L=0xFC; //регистр захвата - верхний предел счета 508 тактов
теперь таймер работает с частотой строк...
:tea:

Добавлено after 35 minutes 5 seconds:
сколько длительность импульса ?
импульс.jpg
(51.78 КБ) 42 скачивания
3,77мкс
сколько это тактов ?
3,77мкс / 62,5нс = 60,32 тактов
записываем... 60 тактов
регистр для вывода b1...
OCR1AH=0;
OCR1AL=60;
или так... не знаю как ардуина лучше понимает))
OCR1AH=0x00; //регистр ШИМ 60 тактов
OCR1AL=0x3C; //регистр ШИМ 60 тактов
:tea:
начальное значение... сбрасываем в ноль))
TCNT1H=0x00;
TCNT1L=0x00;
:tea:


TCCR1A = (1 << WGM11);
TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS10);
ICR1H=0x01; //регистр захвата - верхний предел счета 508 тактов
ICR1L=0xFC; //регистр захвата - верхний предел счета 508 тактов
OCR1AH=0x00; //регистр ШИМ 60 тактов
OCR1AL=0x3C; //регистр ШИМ 60 тактов
TCNT1H=0x00;
TCNT1L=0x00;
уже лучше))
:tea:
настраиваем форму сигнала на выводе b1... обычная или инверсная... у нас инверсная...

Добавлено after 16 minutes 33 seconds:
вроде это...
COM1A1, COM1A0, COM1B1, COM1B0
вывод b1.jpg
(44.61 КБ) 41 скачивание
записываем...
TCCR1A = (1 << COM1A1) | (1 << COM1A0) | (1 << WGM11);
:roll:

осталось настроить сам пин на ардуине... PB1 на выход...

итого:
TCCR1A = (1 << COM1A1) | (1 << COM1A0) | (1 << WGM11);
TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS10);
ICR1H=0x01; //регистр захвата - верхний предел счета 508 тактов
ICR1L=0xFC; //регистр захвата - верхний предел счета 508 тактов
OCR1AH=0x00; //регистр ШИМ 60 тактов
OCR1AL=0x3C; //регистр ШИМ 60 тактов
TCNT1H=0x00; // начальное значение таймера
TCNT1L=0x00; // начальное значение таймера

на пине PB1 должны получить сигнал строчной развертки для VGA...
если мы ничего не перепутали))
Аватара пользователя
Transformer-V
Друг Кота
Сообщения: 4253
Зарегистрирован: Пн окт 03, 2016 22:50:22
Контактная информация:

Re: Вопрос программистам

Сообщение Transformer-V »

[uquote="TovarishAleksey",url="/forum/viewtopic.php?p=4640605#p4640605"]с ассемблером и в правду быстрее было бы, а вот сделать программатор - это мне ещё задачка. Если с видеокартой получится, то можно будет и программатором заняться))[/uquote]
Можешь сделать юзая аппаратный LPT(bitbang), COM(bitbang) или USB мост. Если с "нуля", во всех случаях придется изучать API операционной системы это GUI, IO, и API моста, если "не с нуля" найдешь в инете.
Adrift
Вымогатель припоя
Сообщения: 553
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Вопрос программистам

Сообщение Adrift »

[uquote="TovarishAleksey",url="/forum/viewtopic.php?p=4640747#p4640747"]Картинка не будет дрожать, так как наши таймеры вызывают прерывания в точно заданные промежутки времени![/uquote]
Будет, перечитай что я выше писал. В точно заданные промежутки времени только флаги таймера выставятся, а 2-х и более тактовую инструкцию cpu сначала выполнит до конца и только потом попадем в прерывание. STM32, например, вызывает прерывание оставляя инструкцию в наполовину выполненном состоянии и там таких проблем нет, хотя есть другие )
Аватара пользователя
TovarishAleksey
Потрогал лапой паяльник
Сообщения: 313
Зарегистрирован: Вс сен 22, 2024 12:16:47
Откуда: Село Лютенька

Re: Вопрос программистам

Сообщение TovarishAleksey »

Роман, спасибо огромнейшее, за то что направили на путь верный! Осталось только понять, что же это всё означает. :))
А как своё разрешение рассчитать? Как понимаю, нужно начинать с частоты, а дальше..

Adrift, если не смешивать сладкое с горьким(ассемблер и си++), то ничего не будет. Низкоуровневые библиотеки я уже протестировал - всё отлично, никакого дрожания.
"Умный может зарабатывать триста рублей, а проживать три тысячи"
Adrift
Вымогатель припоя
Сообщения: 553
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Вопрос программистам

Сообщение Adrift »

[uquote="TovarishAleksey",url="/forum/viewtopic.php?p=4640842#p4640842"]если не смешивать сладкое с горьким(ассемблер и си++), то ничего не будет.[/uquote]
Ну ок, тебе виднее )
Аватара пользователя
TovarishAleksey
Потрогал лапой паяльник
Сообщения: 313
Зарегистрирован: Вс сен 22, 2024 12:16:47
Откуда: Село Лютенька

Re: Вопрос программистам

Сообщение TovarishAleksey »

Не то, чтобы мне виднее, просто у меня всё работает. У кого-то может быть по-другому, у меня вот так.
"Умный может зарабатывать триста рублей, а проживать три тысячи"
Adrift
Вымогатель припоя
Сообщения: 553
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Вопрос программистам

Сообщение Adrift »

Что у тебя работает? Фото в студию, а лучше видео )
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25363
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопрос программистам

Сообщение КРАМ »

[uquote="TovarishAleksey",url="/forum/viewtopic.php?p=4640848#p4640848"]у меня всё работает.[/uquote]
Работает - это означает лишь одно - вас устраивает как работает. Но прерывания являются самым нестабильным инструментом при реализации режима реального времени в МК. Получаемый в результате джиттер вас не волнует и не фиксируется вашими инструментами наблюдений. Но он есть. И он не зависит от языка написания кода.
Аватара пользователя
TovarishAleksey
Потрогал лапой паяльник
Сообщения: 313
Зарегистрирован: Вс сен 22, 2024 12:16:47
Откуда: Село Лютенька

Re: Вопрос программистам

Сообщение TovarishAleksey »

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

Вернуться в «МЯЯЯУ!»