Послать несколько байт в SPI

Зинка
Offline
Зарегистрирован: 23.12.2019

Уважаемые форумчане !

В описании http://arduino.ru/Reference/Library/SPI/transfer

велят посылать один байт.

Я так понимаю, что при этом выдается сигнал SCK на время передачи.

А если у меня код длиннее, что делать ?

 

b707
Offline
Зарегистрирован: 26.05.2017

делать это несколько раз... "до удовлетворения"

sadman41
Offline
Зарегистрирован: 19.10.2016

https://www.arduino.cc/en/Reference/SPITransfer

Syntax

receivedVal = SPI.transfer(val)
receivedVal16 = SPI.transfer16(val16)
SPI.transfer(buffer, size)

Parameters

val: the byte to send out over the bus
val16: the two bytes variable to send out over the bus
buffer: the array of data to be transferred

Зинка
Offline
Зарегистрирован: 23.12.2019

Спасибо !

А там не написано сколько байт можно посылать.

Параметр size в битах или в байтах ?

 

 

sadman41
Offline
Зарегистрирован: 19.10.2016

В байтах. 

Посылать можно столько, сколько памяти в МК припаяно: 

uint8_t data[255];
for (uint8_t i = 0; i < 256; i++) { 
   data[i] = i; 
}
...
SPI.transfer(data, sizeof(data));

 

Зинка
Offline
Зарегистрирован: 23.12.2019

Два спасиба !

Я вчера вечером первый раз включила Ардуино, а сегодня решила написать драйвер для DDS AD9910.

Много работала на 8051 итп лет 15-20 назад.

Осталось понять, где у него ассемблер и сгенерированный код. И сколько тактов идет на команду.

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Зинка пишет:

Много работала на 8051 итп лет 15-20 назад.
Осталось понять, где у него ассемблер и сгенерированный код. И сколько тактов идет на команду.

О... сейчас тут набегут, хвосты распушат...

А что, непременно ассемблер нужен? 

http://microsin.net/programming/avr/avr-gcc-inline-assembler.html

По тактам это, наверное, сможет помочь: http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-0856-AVR-Instruction-Set-Manual.pdf

Зинка
Offline
Зарегистрирован: 23.12.2019

Не знаю, какие нынче компиляторы. Отстала от моды.

Может мне и не ассемблер нужен, а симулятор, выдающий временные диаграммы в тактах.

А последовательный порт работает только до 115200 ?

Абыдно, да...

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Зинка пишет:

А последовательный порт работает только до 115200 ?

Может и выше: https://forum.arduino.cc/index.php?topic=21497.0

bwn
Offline
Зарегистрирован: 25.08.2014

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

sadman41
Offline
Зарегистрирован: 19.10.2016

Я с 328PB принимал в один на 115200, отправлял в другой дебаг на 230400. Посередине парсил...

bwn, человек без медицинского понимания тоже все таблетки подряд жрёт. А который с пониманием - только полезные.

Зинка
Offline
Зарегистрирован: 23.12.2019

bwn пишет:

Интересная картина получается, люди, которые знают слова ассемблер и такт на команду, совершенно не гнушаются задавать вопросы в песочнице,

А чего бы и нет, если я вчера в первый раз включила ?

Здесь быстрее ответят.

Кстати ответ "послать байты несколько раз" - не подходит.

Там будет прерываться Chip-Select.

 

negavoid
Offline
Зарегистрирован: 09.07.2016
Зинка
Offline
Зарегистрирован: 23.12.2019

DIYMan пишет:

Зинка пишет:

А последовательный порт работает только до 115200 ?

Может и выше: https://forum.arduino.cc/index.php?topic=21497.0

 

Ага, значит Ардуино может, а комп не хочет ?

Он родил порт COM4 и дает выбор скоростей до 128000.

Ага, попробовала задавать скорость через LabView.

230400 - работает.

460800 - нет.

Работает 256К, 512К, 1024К.

1М, 2М

 

4М не работает, потому что комп не захотел так конфигурить порт USB2.

В другой раз попробую на компе с USB3,

Класс !

 

 

Зинка
Offline
Зарегистрирован: 23.12.2019

Ну совсем классно !

 

bwn
Offline
Зарегистрирован: 25.08.2014

Зинка пишет:

bwn пишет:

Интересная картина получается, люди, которые знают слова ассемблер и такт на команду, совершенно не гнушаются задавать вопросы в песочнице,

А чего бы и нет, если я вчера в первый раз включила ?

Здесь быстрее ответят.

Это ни к Вам относилось, важна вторая часть, когда один неофит сложение-вычитание в разделе "Программирование" проходит, другой, блинк на делеях в "Проекты" постит, третий в "Аппаратных" выясняет, граунд это плюс или минус у батарейки и почему стартер от А23 не крутиться.(((((

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

Зинка пишет:
Там будет прерываться Chip-Select.
Ну это еще ничего. Вот иногда регулярно приходится менять еще команды/данные.  пин DC

Schwarz78
Offline
Зарегистрирован: 19.01.2019

Зинка пишет:

Не знаю, какие нынче компиляторы. Отстала от моды.

Может мне и не ассемблер нужен, а симулятор, выдающий временные диаграммы в тактах.

Компиляторы нынче avr-gcc и IAR.

Симулятор есть в Atmel Studio (бесплатный и вполне рабочий) и в IAR (раньше был кривой и платный).

Кстати, симулятор Atmel умеет и IAR-овские программы симулировать.

Ну, и есть ещё почти настоящий отладчик в Атмел Студии от VisualMicro, но он условно-платный (как и весь VisualMicro).

Приятно встретить коллегу по 8051)

Зинка
Offline
Зарегистрирован: 23.12.2019

Мой восторг несколько поостыл, когда я включила осциллограф и запустила минимальный цикл включить/выключить фонарик.

Оказалось 5 мксек.

Что-то я не поняла, чем оно занимается столько времени на 16 МГц-ах.

Процессор - наверняка похож на линию 8051 и ADUC832.

То есть, если хочешь что-то делать быстро - надо возвращаться на Ассемблер.

 

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

Зинка пишет:
То есть, если хочешь что-то делать быстро - надо возвращаться на Ассемблер.
Ну скорее возвращатся в просто Си, а потом в Ассемблер. А вот если организовывать интеллектуальные и умные системы, то обратно Ассемблер->просто Си->C++>OПП

SLKH
Offline
Зарегистрирован: 17.08.2015

Зинка пишет:

Мой восторг несколько поостыл, когда я включила осциллограф и запустила минимальный цикл включить/выключить фонарик.

Оказалось 5 мксек.

Что-то я не поняла, чем оно занимается столько времени на 16 МГц-ах.

digitalWrite() - проверяет, вычисляет, запоминает-восстанавливает. 

если торопишься, то тебе сюда: http://arduino.ru/Tutorial/Upravlenie_portami_cherez_registry и в CyberLib

 

например, на это посмотреть:

#include "CyberLib.h"

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

void loop()
{
label:  
 
 D13_High;
 D13_Low;
 
goto label; 
}
negavoid
Offline
Зарегистрирован: 09.07.2016

Любит наш народ

всякое создавать проблемы

ладно бы только себе

плохо, когда и остальным

void setup() {
  pinMode(7, OUTPUT);
  TIMSK = 0;
}

void loop() {
  while(1) {
    PORTD ^= 1<<7;
  }
}

а ещё есть микроконтроллеры пошустрее

sadman41
Offline
Зарегистрирован: 19.10.2016

Ускорим a little bit:

void setup() {
  pinMode (7, OUTPUT);
  noInterrupts();
  while(1) {
    PIND = 1<<7;
  }
}

void loop() {}

 

Schwarz78
Offline
Зарегистрирован: 19.01.2019

sadman41 пишет:

Ускорим a little bit:

void setup() {
  pinMode (7, OUTPUT);
  noInterrupts();
  while(1) {
    PIND = 1<<7;
  }
}

void loop() {}

 

8 МГц, быстрее для 328 некуда. А когда я начинал на 51-х, предел программного генератора был что-то около 250 кГц.

В прошлом году столкнулся о проблему, что контроллеры очень медленные, даже 72 Мгц мало. Оказалось ПЛИС - решение, когда надо логику и счётчик. Они умеют делать синхронно и очень быстро. С месяц освоиться только, там очень IDE необычные.

Зинка
Offline
Зарегистрирован: 23.12.2019

Всем огромное спасибо !

Буду разбираться. Правда, у меня психологическая несовместимость с СИ, с очень древних времен.

Писала на Паскале - либо сразу на Ассемблере.

Пока - возвращаюсь к своим ПЛИСам, VHDL/LabView.

И погляжу готовый драйвер на AD9910.