05.11.2014, 08:17 | #141 |
Senior Member
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1311 |
Re: Ускоряем работу Arduino
И ещё, CyberLib скачаная давно, работает с атмега168, а скачаная сейчас не хочет работать с 168-ой. IDE 1.5.5.
|
05.11.2014, 10:34 | #142 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: Ускоряем работу Arduino
Если используем тип uint16_t, то нужно делить на 2, потому как sizeof возвращает размер массива не в колличестве элементов , а в байтах. Если используем тип uint8_t, то делить не нужно
|
05.11.2014, 12:34 | #143 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: Ускоряем работу Arduino
Спасибо!
Плюсанул |
05.11.2014, 20:39 | #144 |
Junior Member
Регистрация: 05.11.2014
Сообщений: 1
Вес репутации: 0 |
Re: Ускоряем работу Arduino
Предлагаю выложить библиотеку на публичный хостинг типа гитхаба с целью предоставления сообществу возможности слать pull-реквесты с фиксами и предложениями.
|
06.11.2014, 00:24 | #145 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: Ускоряем работу Arduino
Для меня это темный лес.
В том смысле что я никогда не пользовался и не представляю как им пользоваться |
21.11.2014, 19:01 | #146 |
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 |
Re: Ускоряем работу Arduino
Настоятельно рекомендую включить данную конструкцию в Либу!
Данным подходом, полностью решена проблема перенастраиваемых дефайнами пинов. Т.е. данную конструкцию можно использовать аналогично с digitalRead(pin), при чем абсолютно не теряя в скорости ни одного такта. Поверял след скетчем (Софтварное считывание 32битного значения АЦП) Код:
#include "CyberLib.h" #define _D_In(x) D##x##_In #define D_In(x) _D_In(x) #define _D_Out(x) D##x##_Out #define D_Out(x) _D_Out(x) #define _D_High(x) D##x##_High #define D_High(x) _D_High(x) #define _D_Low(x) D##x##_Low #define D_Low(x) _D_Low(x) #define _D_Inv(x) D##x##_Inv #define D_Inv(x) _D_Inv(x) #define _D_Read(x) D##x##_Read #define D_Read(x) _D_Read(x) #define ADC_CLK_Pin 13 #define ADC_DATA_Pin 6 union AdcType{ uint32_t data32; uint8_t data8[4]; }; uint32_t startT = 0; uint16_t dur =0; void setup() { Serial.begin(9600); D13_Out; D6_In; readAdcFast32bitVAR(); //REAL read uint32_t data 1207kHz = 13.25 (-0.25)= 13 cycles/bit readAdcFast32bitFix(); //REAL read uint32_t data 1207kHz = 13.25 (-0.25)= 13 cycles/bit } void readAdcFast32bitFix() { AdcType adc; startT = micros(); for (byte k=0;k<100;k++){ ///+++++++++++++++++++++++++++++++++++++++++++++++++ for (byte j=3;j!=255;j--){ for (byte i=0;i<8;i++){ D13_High; adc.data8[j]<<=1; D13_Low; if (D6_Read) {adc.data8[j]++;} } } //-------------------------------------------------- } dur = micros()-startT; Serial.println(dur); Serial.println(adc.data32); //чтобы не оптимизировал считывание в adc.data } void readAdcFast32bitVAR() { AdcType adc; startT = micros(); for (byte k=0;k<100;k++){ ///+++++++++++++++++++++++++++++++++++++++++++++++++ for (byte j=3;j!=255;j--){ for (byte i=0;i<8;i++){ D_High(ADC_CLK_Pin); adc.data8[j]<<=1; D_Low(ADC_CLK_Pin); if (D_Read(ADC_DATA_Pin)) {adc.data8[j]++;} } } //-------------------------------------------------- } dur = micros()-startT; Serial.println(dur); Serial.println(adc.data32); //чтобы не оптимизировал считывание в adc.data } void loop(){} Скорость считывания 1203кГц/байт на считывание 1 байта тратится 13 тактов. Последний раз редактировалось HiddenPilot; 10.12.2014 в 22:37. |
22.11.2014, 08:33 | #148 |
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 |
Re: Ускоряем работу Arduino
Admin,
Скоро придет экран с контроллером тача XPT2046 , в сети есть либа Utouch, она работает софтварным дерганьем ног. Есть задумка переделать либу на SPI. Но судя по даташиту(стр26), передавать команду на считывание следующей координаты(X,Y,Z) можно параллельно с приемом текущей координаты. Что позволит сократить "сеанс связи с 8+16bit=24bit до 16 бит. Если функцию viod SendSPI(uint8_t SPI_data), переделать по аналогии с Spi.transfer, т.е. добавить "return SPDR", а так же "void" заменить на "uint8_t", то все преимущество в ускорении, я так понимаю, потеряется ? |
22.11.2014, 11:09 | #149 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: Ускоряем работу Arduino
Вот вырезал из библиотеки фунуфию чтения и отправки данных
PHP код:
Вот этот код реально работает быстрее, но я его закоментирова, так как не все устройства успевают переходить в режим готовности PHP код:
|
25.11.2014, 09:30 | #150 | |
Junior Member
Регистрация: 25.11.2014
Сообщений: 1
Вес репутации: 0 |
Re: Ускоряем работу Arduino
Попробовал пару примеров(Работа с Timer1,Чтение и запись Serial) на Меге 2560 из поста #122 - почему то кидает в в ошибку компиляции - StartTimer1 was not declared in this scope.
Цитата:
|
|
Здесь присутствуют: 72 (пользователей: 0 , гостей: 72) | |
|
|