Cycle and PORTD

SergV
Offline
Зарегистрирован: 25.10.2018
int potPin    = 0;
int lastpot, delayPot;
byte  kan6[] =   {B10101010, B01010101, B10101010, B01010101, B10101010, B01010101, B10101010, B01010101, B10101010, B01010101, B10101010, B01010101, B10101010, B01010101, B10101010, B01010101, B10101010, B01010101, B10101010, B01010101, B10101010, B01010101, B10101010, B01010101};

void setup() {
  // put your setup code here, to run once:
  pinMode(potPin, INPUT);
  DDRD  = DDRD  | B11111111;
}

void loop() {
  // put your main code here, to run repeatedly:
  lastpot = analogRead(potPin);
  delayPot  = map(lastpot, 0, 1023, 600, 6);
  for (int j = 0; j <= 23; j=j+1)
  {
    PORTD = kan6[j];
    delayMicroseconds(delayPot );

  }

}

Как избавиться от этой задержки? изза чего выходной сигнал теряет симметрию ? надо сделать Stop timer 0 ? что это даст ? и как его сделать обращаясь к регистрам авр ...

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

SergV, так и должно быть. Таймер0 каждую миллисекунду падает в прерывание и висит там пару-тройку микросекунд, вот и задержка. Решение -остановить таймер и неиспользовать арудиновские функции работы с временем. А пользовать GCC-шные или свои писать.

SergV
Offline
Зарегистрирован: 25.10.2018

А отключить прерывания таймера 0 возможно?

dimax пишет:

А пользовать GCC-шные.


А можете посоветовать документацию по этому? Есть пример?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

SergV пишет:
Stop timer 0 ? что это даст ? и как его сделать обращаясь к регистрам авр ...

AVR130: "Setup and Use of AVR Timers"