Частота портов

krikus
Offline
Зарегистрирован: 22.07.2011

Можно ли генерировать сигнал частотой 2MHz на портах у ArduinoUno/Mega/Mini/Pro/Duemil/Free? Знаю, что есть какой-то коэффициент соотношения рабочей частоты и частоты портов.

maksim
Offline
Зарегистрирован: 12.02.2012
01#define OUT 9          // вывод выходного сигнала
02 
03uint32_t frequency = 2000000;  // частота в Гц
04 
05void setup()
06{
07  pinMode(OUT, OUTPUT);
08  cli();
09  uint16_t ocr = 8000000/frequency - 1;
10  TCCR1A = 0b01000000;
11  TCCR1B = 0b00001001;      
12  OCR1AH = highByte(ocr); 
13  OCR1AL = lowByte(ocr);
14  TIMSK1 = 0b00000010;
15  sei();
16}
17 
18ISR(TIMER1_COMPA_vect){}
19 
20void loop(){}

 

krikus
Offline
Зарегистрирован: 22.07.2011

Спасибо. Про таймер понял. А если напрямую в порт контроллера? Мне нужно байт(8 пинов задействовать) отправлять с частотой 2MHz. 

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

ну дык мигайте в обработчике таймера хоть всеми ножками

а если без таймера, открываете даташиту и смотрите сколько тактов приходится на команды, которые будете использовать для вывода, суммируете и получаете период вывода на ножку(и)

axill
Offline
Зарегистрирован: 05.09.2011

вам надо определиться с задачей, не понятно что хотите - уж наверняка не светодиодом моргать на такой частоте))

есть SPI - он работает на частоте до 8мгц (половина частоты МК)

axill
Offline
Зарегистрирован: 05.09.2011

maksim пишет:

01#define OUT 9          // вывод выходного сигнала
02 
03uint32_t frequency = 2000000  // частота в Гц
04 
05void setup()
06{
07  pinMode(OUT, OUTPUT);
08  cli();
09  uint16_t ocr = 8000000/frequency - 1;
10  TCCR1A = 0b01000000;
11  TCCR1B = 0b00001001;      
12  OCR1AH = highByte(ocr); 
13  OCR1AL = lowByte(ocr);
14  TIMSK1 = 0b00000010;
15  sei();
16}
17 
18ISR(TIMER1_COMPA_vect){}
19 
20void loop(){}

 

ВАХ! зачэм 4 байта растеряли?)))

лучше так:

01#define OUT 9          // вывод выходного сигнала
02 
03#define frequency  2000000UL;  // частота в Гц
04 
05void setup()
06{
07  pinMode(OUT, OUTPUT);
08  cli();
09  uint16_t ocr = 8000000/frequency - 1;
10  TCCR1A = 0b01000000;
11  TCCR1B = 0b00001001;      
12  OCR1AH = highByte(ocr); 
13  OCR1AL = lowByte(ocr);
14  TIMSK1 = 0b00000010;
15  sei();
16}
17 
18ISR(TIMER1_COMPA_vect){}
19 
20void loop(){}

в таком варианте "8000000/frequency - 1" будет вычисляться не каждый раз, а только в момент компиляции  и переменная не будет занимать 4 байта памяти

krikus
Offline
Зарегистрирован: 22.07.2011

axill пишет:

вам надо определиться с задачей, не понятно что хотите - уж наверняка не светодиодом моргать на такой частоте))

есть SPI - он работает на частоте до 8мгц (половина частоты МК)

Мне нужно сделать VGA генератор. Пока что, я хочу выводить цветное изображение(палитры, текст) на экран монитора в формате 256x208x50Hz и 256цветов. Я сделал r2-r ЦАП, который занимает 8пинов, для генерации "видео данных". Я подсчитал чатоту вывода пикселей на экран: (256x208x50)/1000000 = 2MHz. Если пойду дальше, то понадобиться доп.ОЗУ, которое у меня уже есть. Вот и все...

krikus
Offline
Зарегистрирован: 22.07.2011

krikus пишет:

axill пишет:

вам надо определиться с задачей, не понятно что хотите - уж наверняка не светодиодом моргать на такой частоте))

есть SPI - он работает на частоте до 8мгц (половина частоты МК)

Мне нужно сделать VGA генератор. Пока что, я хочу выводить цветное изображение(палитры, текст) на экран монитора в формате 256x208x50Hz и 256цветов. Я сделал r2-r ЦАП, который занимает 8пинов, для генерации "видео данных". Я подсчитал чатоту вывода пикселей на экран: (256x208x50)/1000000 = 2MHz. Если пойду дальше, то понадобиться доп.ОЗУ, которое у меня уже есть. Вот и все...

Ой-ой... Что-то я напутал с чатотой вывода пикселей... Знаю, что 800x600x60Hz - частоты должна быть 40MHz, а если перемножить - нифига на 40MHz... 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

krikus пишет:

Мне нужно сделать VGA генератор. 

А можно поинтересоваться, нафига козе баян?

Просто пытался придумать практическое применение и не смог...

axill
Offline
Зарегистрирован: 05.09.2011

Что то я сомневаюсь, что ардуина справится с такой задачей

выбрали бы какой нибудь raspberry у которого видеоконтроллер встроен вместе с hdmi

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

axill пишет:

Что то я сомневаюсь, что ардуина справится с такой задачей

выбрали бы какой нибудь raspberry у которого видеоконтроллер встроен вместе с hdmi

да тут просто не понятна сама цель такого извращения... если хочется использовать дисплей. так есть вон TFT с тач скрином и всеми делами 320х240 за 12-14 баксов с доставкой...

если хочется большой  телевизер присоединить. так как бы есть библиотека дуиновская уже для вывода на телевизер типа из одного вывода делается AV и погнали наши городских...

krikus
Offline
Зарегистрирован: 22.07.2011

Puhlyaviy пишет:

krikus пишет:

Мне нужно сделать VGA генератор. 

А можно поинтересоваться, нафига козе баян?

Просто пытался придумать практическое применение и не смог...

Хорошо. Вы хотите самую суть. У меня есть Arduino Due, Arduino Mega и 4 микросхемы ОЗУ с параллельным доступом, каждая по 128кб. По сути дела: ArduinoDue - Центральный проц., ArduinoMega - видео-процессор. Я подключу их к одной микросхеме ОЗУ.(буду переключать доступ к ОЗУ буферными элементами, тем самым сделаю dual port ram) ArduinoDue будет формировать изображение и "оставлять" его в определенном месте на ОЗУ. А ArduinoMega уже, в свою очередь, будет (когда ей нужно) забирать эти данные из ОЗУ и отправлять их по VGA интерфейсу. Тем самым, получается независимая схема: CPU, RAM, GPU.

Однако, пока не могу сообразить как наладить работу ArduinoMega... С ArduinoDue - все в порядке, у нее даже спец. интерфейс есть для подключения внешней RAM.

Как то так.

krikus
Offline
Зарегистрирован: 22.07.2011

Я полагаю, особой "мощи" не нужно, чтобы стаскивать данные с внешней ОЗУ и формировать VGA сигнал.

krikus
Offline
Зарегистрирован: 22.07.2011

Если дело совсем худо, и подключить к этому делу ArduinoMega как GPU - не получится, то одна ArduinoDue должна справиться...хоть и сбольшими потерями в производительности. Вот результат работы одной ArduinoDue без Доп.ОЗУ и GPU: http://www.youtube.com/watch?v=E8qSB1Fm8WE

Хотелось бы сделать все "по делу". (с точки зрения архитектуры)

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Вы так и не ответили на вопрос НАФИГА это все нужно? тем более с таким разрешением?

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

если у вас есть Due, то для нее есть готовые библиотеки, правда готовое не всегда лучшее :)

krikus
Offline
Зарегистрирован: 22.07.2011

Michal пишет:

если у вас есть Due, то для нее есть готовые библиотеки, правда готовое не всегда лучшее :)

Бибилиотеки есть. Как видите, (я ссылку на видео присылал) с ними все работает. Но все же хотелось бы проиводительности больше, так как формирование VGA сигнала "отжирает" много ресурсов. А если бы был второй проц(GPU) все было бы идеально. :)

Monsel
Offline
Зарегистрирован: 27.10.2013

krikus пишет:
Мне нужно сделать VGA генератор. Пока что, я хочу выводить цветное изображение(палитры, текст) на экран монитора в формате 256x208x50Hz и 256цветов. Я сделал r2-r ЦАП, который занимает 8пинов, для генерации "видео данных". Я подсчитал чатоту вывода пикселей на экран: (256x208x50)/1000000 = 2MHz. Если пойду дальше, то понадобиться доп.ОЗУ, которое у меня уже есть. Вот и все...

VGA Signal Generator LCD Display Tester 8 Output Module 9v

VGA генератор  http://www.ebay.com/itm/New-VGA-Signal-Generator-LCD-Display-Tester-8-Ou...