Cycle and PORTD
- Войдите на сайт для отправки комментариев
Чт, 25/10/2018 - 20:25
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 ? что это даст ? и как его сделать обращаясь к регистрам авр ...
SergV, так и должно быть. Таймер0 каждую миллисекунду падает в прерывание и висит там пару-тройку микросекунд, вот и задержка. Решение -остановить таймер и неиспользовать арудиновские функции работы с временем. А пользовать GCC-шные или свои писать.
А отключить прерывания таймера 0 возможно?
А пользовать GCC-шные.
А можете посоветовать документацию по этому? Есть пример?
AVR130: "Setup and Use of AVR Timers"