Ускоряем digitalWrite PORTB = ???

dragonfly
Offline
Зарегистрирован: 02.04.2015
1
2
3
4
5
6
7
8
9
10
11
12
13
void setup()
{
DDRB = B10000000; // устанавливаем 13 пин как OUTPUT
}
void loop()
{
// создаем свой бесконечный цикл
 while (1)
{
  PORTB = B10000000; // устанавливаем состояние pin13 как HIGH
  PORTB = B00000000; // устанавливаем состояние pin13 как LOW
}
}

Как такое же сделать для D2 или D3 порта?

Что нужно писать в стройчке 10,11 и 3

С уважением,

dimin21590
dimin21590 аватар
Offline
Зарегистрирован: 26.10.2016

https://www.youtube.com/watch?list=PLBLtydguylgDUtd9qRAt82u-pUa9x6O8Y&pa...
Вот видеокурс по AVR. Там подробно описано ка работать с портами.

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

А вот даташит.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

#65  второй скетч

dragonfly
Offline
Зарегистрирован: 02.04.2015

Спасибо...

Конктерно по моему вопросу тут:

http://arduino.net.ua/Arduino_articles/Opisanie%20jazyka%20Arduino%20na%...

Но почему то пример ВЫШЕ не работает даже на 13 ноге.

На D2, см. ниже, работает пачками нет стабильной работы, проверял на трех арду.
Может из за того что питаю от компа?
 
int var = 0;
void setup() 
{
DDRD = B00000100; // устанавливаем 2 пин как OUTPUT
}
 
 
void loop() 
{
    while(var < 200){
    asm("nop");
    var++;
    }
    PORTD = B00000100; // устанавливаем состояние pin2 как HIGH
    PORTD = B00000000; // устанавливаем состояние pin2 как LOW
    var = 0;
}
dragonfly
Offline
Зарегистрирован: 02.04.2015

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Ну а надо то што? Как написано, так и работает.

dragonfly
Offline
Зарегистрирован: 02.04.2015
int var = 0;
void setup() 
{
//DDRD = B00000100; // устанавливаем 2 пин как OUTPUT
pinMode(2, OUTPUT);
}
 
 
void loop() 
{
    while(var < 200){
    asm("nop");
    var++;
    }
    //PORTD = B00000100; // устанавливаем состояние pin2 как HIGH
    digitalWrite(2, HIGH);   // turn the LED on (HIGH is the voltage level)
    //PORTD = B00000000; // устанавливаем состояние pin2 как LOW
    digitalWrite(2, LOW);    // turn the LED off by making the voltage LOW
    var = 0;
}
 
Если использовать digitalWrite
dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

dragonfly, вы сначала ознакомьтесь с материалами, а потом вопросы зададите если что-то останется непонятным. В скетче из топика и в вашем  комментарий не соответсвует программируемым регистрам.  (B10000000 -не 13 пин.   B00000100 -не 2 пин) 

 

dragonfly
Offline
Зарегистрирован: 02.04.2015

Мне нужно простенький генератор импульсов...

Я хотел циклом подогнать время затем дать короткий импульс.

semaawp
semaawp аватар
Offline
Зарегистрирован: 29.05.2017

У вас же задержки нет между переключениями и что вы на ослике хотите увидеть?
И да, как вам советовали, ознакомьтесь с даташитом, там вроде даже примеры инициализации портов есть
https://www.google.com/search?q=arduino+schematic&hl=ru-RU&prmd=ivn&sour...
И это гляньте

dragonfly
Offline
Зарегистрирован: 02.04.2015

задержка циклом, нужен короткий импульс

dragonfly
Offline
Зарегистрирован: 02.04.2015

Ребята, я и так знаю что не знаю.

Мне просто нужен короткий импульс.

инфу братл тут...

http://robotosha.ru/arduino/digitalwrite-optimizing-arduino.html

 

С уважением,

sadman41
Онлайн
Зарегистрирован: 19.10.2016

dragonfly пишет:

Мне нужно простенький генератор импульсов...

Я хотел циклом подогнать время затем дать короткий импульс.

Так же имейте в виду, что за пределами loop() ардуина тоже делает всякое. Так что все ваши nop-ы могут оказаться бесполезными. Ну и обработка прерывания таймера для millis потенциально подпортит красивую картинку...

dragonfly
Offline
Зарегистрирован: 02.04.2015

Это понятно...

Почему такие провалы во времени когда не использую digitalWrite?

Почему все глючит?

Если кривой код асс. поправте меня пожалуйста...

 

С Уважением,

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

dragonfly, какой у Вас контроллер и какой именно импульс Вам нужен? С какой частотой?

semaawp
semaawp аватар
Offline
Зарегистрирован: 29.05.2017

Какая вам задержка нужна перед импульсом?

duinor
Offline
Зарегистрирован: 16.01.2016

Для ускорения есть библиотека CyberLib

dragonfly
Offline
Зарегистрирован: 02.04.2015

задержка 7-9 кГц

импульс на сколько можно короткий 62 нс заявляли

NOP нужен что бы максимально точно подогнать частоту в Гц... 

задержка мс не даст такого...

dragonfly
Offline
Зарегистрирован: 02.04.2015

Использую ардуино нано от разныx производителей, разная серия...

 

semaawp
semaawp аватар
Offline
Зарегистрирован: 29.05.2017

duino.ru пишет:

Для ускорения есть библиотека CyberLib

И таким образом закрепляем поломаный костыль другим костылем)))

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

dragonfly пишет:

задержка 7-9 кГц

Это, правда, не задержка, но я понял, что Вы имеете в виду

dragonfly пишет:

импульс на сколько можно короткий 62 нс заявляли

62,5 - меньше - никак

dragonfly пишет:

NOP нужен что бы максимально точно подогнать частоту в Гц... 

задержка мс не даст такого...

delayMicrosends - наше всё

Что Вам нужно? Обучение или готовое решение?

Первое длительный и тяжёлый процесс, сейчас не готов. Второе - я обычно не делаю, но сегодня Луна в седьмом круге, а Юпитер стал Раком на Весы ХЗ почему, но я готов для Вас сделать пример. Только имейте в виду, комментарии-то к примеру я напишу, но на длительный "учебный процесс" не подписываюсь.

Нужен пример? 

-------------

да, кстати, 

1.
Научитесь, наконец правильно вставлять код. Человеку с Вашей датой регистрации даже неудобно об этом говорить.

2.
Никогда так не делайте

PORTB = B10000000; // устанавливаем состояние pin13 как HIGH

не знаю у какого чайника Вы это переписали, но, давайте я Вам напишу правильный комментарий, что там на самом деле делается:

PORTB = B10000000; //  пытаемся установить пин XTAL2 в HIGH, а пин XTAL1 в LOW (не выйдет, но пытаемся)
              // ЗАОДНО устанавливаем в LOW ВСЕ пины с 8-го по 13-ый)

Вы этого хотели?

semaawp
semaawp аватар
Offline
Зарегистрирован: 29.05.2017

dragonfly пишет:

задержка 7-9 кГц

импульс на сколько можно короткий 62 нс заявляли

NOP нужен что бы максимально точно подогнать частоту в Гц... 

задержка мс не даст такого...

Задержка 7-9 кГц это гдето 125 микросекунд, я вас правильно понял? То есть вам каждые 125 микросекунд нужен импульс минимальной длительности?

dragonfly
Offline
Зарегистрирован: 02.04.2015

 

#include <CyberLib.h>
 
void setup()
{
  D2_Out; //Настраиваем пин D13 на выход
}
 
void loop()
 D2_High;
 asm("nop");
 D2_Low;
 
}
 
 
Спрашивай и ответят )))
semaawp спасибо огромное...
dragonfly
Offline
Зарегистрирован: 02.04.2015

Задержка нужна точная т.к. подстройка под контур

без nop почему то глюки открытия закрытия у арду...

С уважением, 

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

ЕвгенийП пишет:

не знаю у какого чайника Вы это переписали, но, давайте я Вам напишу правильный комментарий, что там на самом деле делается:

Пример от меги 2560, там оно придётся на 13 пин :) Ну и видимо автор решил, что прицепить лишние 7 ног ради скорости -не большая плата.. (когда на плате >50 ног то наверное да:))

dragonfly
Offline
Зарегистрирован: 02.04.2015

 

#include <CyberLib.h>
 
 
int var = 0;
void setup() 
{
D2_Out;
}
 
 
void loop() 
{
    while(var < 200){
    asm("nop");
    var++;
    }
    D2_High;
    asm("nop");
    D2_Low;
    var = 0;
}
 
 
 
Почему то все равно пачками.
Выдаст с задержками 7-10 импульсов, потом пробел огромный...
 
С уважением,
dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

dragonfly, "как написано так и работает".   А что вы хотите то собссно?

dragonfly
Offline
Зарегистрирован: 02.04.2015

Парни хорош стебаться, помогите лучше.

Не ужели так сложно "три" строчки черкнуть, 

 

С Уважением,

dragonfly
Offline
Зарегистрирован: 02.04.2015

Если оной стройчкой то...

Есть контур мне нужно попасть в частоту его, если угодно то, аЛяя ФАПЧ.

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

dragonfly пишет:

Парни хорош стебаться, помогите лучше.

Не ужели так сложно "три" строчки черкнуть, 

Мля, Вы мой пост #21 видели? Читали? И где ответ на него? Или Вам это настолько "нужно", что даже лень читать, что Вам пишут?

Предложение пока в силе (и вопросы тоже), но ещё один такой тупизм, и оно будет отозвано!

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

dimax пишет:

Пример от меги 2560, 

ТС написал, что у него Нано. Хотя, это, конечно, не мешает тащить примеры для 2560 и удивляться почему не работает :)

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

пробуй

void setup() {
DDRD |= (1 << 2);
}
void loop() {
PORTD |= (1 << 2);
PORTD &= ~(1 << 2);
}

 

dragonfly
Offline
Зарегистрирован: 02.04.2015

Valera

На нано выдает пачками с частотой 1 кГц примерно...

Перезалил на UNO нормально.

Т.е. на нано не реально?

 

 

С уважением,

 

 

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

если нано на 328, то не вижу отличий :)

duinor
Offline
Зарегистрирован: 16.01.2016
#include "CyberLib.h"

void setup()
{
  D2_Out; //Настраиваем пин на выход
}

void loop()
{
label:  
 
 D2_High;
 asm(nop);
 D2_Low;
 
goto label; 
}

вот так будет без разрывов