Генерирование сигнала с частотой 1Мгц

joint931
Offline
Зарегистрирован: 26.09.2011

Требуется на ноге сделать частоту 1Мгц. Как это реализовать?

При таком раскладе получается толкьо 118кГц:

void setup() {               
  pinMode(4, OUTPUT);   
}
 
void loop() {
  digitalWrite(4, HIGH);   
  digitalWrite(4, LOW);    
}

 

polk
Offline
Зарегистрирован: 13.03.2011

 Вот этот код генерирует 8MHz на порту 3

 // configure timer2 for 8MHz output on PD3
  TCCR2B = _BV(CS20);  // prescaler = F_CPU/1
  OCR2A = 0;  // clear timer at 0 count, f = F_CPU/2
  TCCR2A = _BV(COM2B0) | _BV(WGM21);  // toggle PD3 on compare match
  DDRD |= _BV(PORTD3);  // start clock output on XIN/PD3

Частоту можно уменьшить, я так понимаю, изменив OCR2A. Отношение частоты выхода к частоте процессора

 f = F_CPU / (OCR2A + 1) / 2

polk
Offline
Зарегистрирован: 13.03.2011

 Вот это почитать можно http://arduino.cc/en/Tutorial/SecretsOfArduinoPWM

step962
Offline
Зарегистрирован: 23.05.2011

Функция digitalWrite выполняет запись указанного бита в один из выводов портов ввода/вывода микроконтроллера.

Функция удобная, но очень тяжелая - если память мне не изменяет, она весит около полутора сотен инструкций ассемблера. Так что в Вашем случае это тупик.

joint931 пишет:

digitalWrite(4, HIGH);

digitalWrite(4, LOW);



Поменяйте эти строки на

PORTD != (1<<4);  // устанавливает единицу на вывод 4 порта D
PORTD &= ~(1<<4); // устанавливает 0 на вывод 4 порта D

PORTD.4 - четвертый бит порта D - соответствует Arduino DIO4. Так что получится тот же результат, что и с DigitalWrite, но раз в 50 побыстрее.