Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.11.2014, 08:17   #141
stD
Senior Member
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1311
stD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant future
По умолчанию Re: Ускоряем работу Arduino

И ещё, CyberLib скачаная давно, работает с атмега168, а скачаная сейчас не хочет работать с 168-ой. IDE 1.5.5.
stD вне форума   Ответить с цитированием
Старый 05.11.2014, 10:34   #142
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Ускоряем работу Arduino

Если используем тип uint16_t, то нужно делить на 2, потому как sizeof возвращает размер массива не в колличестве элементов , а в байтах. Если используем тип uint8_t, то делить не нужно
Admin вне форума   Ответить с цитированием
Старый 05.11.2014, 12:34   #143
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Ускоряем работу Arduino

Спасибо!
Плюсанул
Admin вне форума   Ответить с цитированием
Старый 05.11.2014, 20:39   #144
4eyes
Junior Member
 
Регистрация: 05.11.2014
Сообщений: 1
Вес репутации: 0
4eyes is an unknown quantity at this point
По умолчанию Re: Ускоряем работу Arduino

Предлагаю выложить библиотеку на публичный хостинг типа гитхаба с целью предоставления сообществу возможности слать pull-реквесты с фиксами и предложениями.
4eyes вне форума   Ответить с цитированием
Старый 06.11.2014, 00:24   #145
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Ускоряем работу Arduino

Для меня это темный лес.
В том смысле что я никогда не пользовался и не представляю как им пользоваться
Admin вне форума   Ответить с цитированием
Старый 21.11.2014, 19:01   #146
HiddenPilot
Member
 
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0
HiddenPilot is an unknown quantity at this point
По умолчанию 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(){}
в обоих вариантах 2660 мкс на 100 замеров
Скорость считывания 1203кГц/байт
на считывание 1 байта тратится 13 тактов.

Последний раз редактировалось HiddenPilot; 10.12.2014 в 22:37.
HiddenPilot вне форума   Ответить с цитированием
Старый 21.11.2014, 19:10   #147
HiddenPilot
Member
 
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0
HiddenPilot is an unknown quantity at this point
По умолчанию Re: Ускоряем работу Arduino

Про использование Оператора ## в теле макроса можно прочитать тут. Очень не сложный в освоении оператор и при этом достаточно полезный.
HiddenPilot вне форума   Ответить с цитированием
Старый 22.11.2014, 08:33   #148
HiddenPilot
Member
 
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0
HiddenPilot is an unknown quantity at this point
По умолчанию 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", то все преимущество в ускорении, я так понимаю, потеряется ?
HiddenPilot вне форума   Ответить с цитированием
Старый 22.11.2014, 11:09   #149
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Ускоряем работу Arduino

Вот вырезал из библиотеки фунуфию чтения и отправки данных
PHP код:
uint8_t ReadSPI(void
{
    while(!(
SPSR & (1<<SPIF)));
    return 
SPDR;
}

void SendSPI(uint8_t SPI_data
{
  
SPDR SPI_data;
  while(!(
SPSR & (1<<SPIF)));            

Там же есть функция отправки данных, как раз для тебя на ASM-е
Вот этот код реально работает быстрее, но
я его закоментирова, так как не все устройства успевают переходить в режим готовности

PHP код:
    __asm__ volatile
             
(
             
".spi_not_ready: out %[spdr], %[spi_data]"    "\n\t" //отправляем пользовательские данные в SPI
             
"in __tmp_reg__,%[spsr]"                "\n\t"    //Читаем регистр SPSR
            
"sbrs __tmp_reg__, %[spif]"                "\n\t"    //и проверяем флаг SPIF
            
"rjmp .spi_not_ready"                    "\n\t"    //если данные не отправлены повторяем процедуру
             
::
            [
spsr"I" (_SFR_IO_ADDR(SPSR)),
            [
spif"I" (SPIF),
            [
spdr"I" (_SFR_IO_ADDR(SPDR)),
            [
spi_data"r" (SPI_data)
             ); 
Admin вне форума   Ответить с цитированием
Старый 25.11.2014, 09:30   #150
aspic
Junior Member
 
Регистрация: 25.11.2014
Сообщений: 1
Вес репутации: 0
aspic is an unknown quantity at this point
По умолчанию Re: Ускоряем работу Arduino

Попробовал пару примеров(Работа с Timer1,Чтение и запись Serial) на Меге 2560 из поста #122 - почему то кидает в в ошибку компиляции - StartTimer1 was not declared in this scope.
Цитата:
C:\Users\aspic\Downloads\arduino-1.0.5\hardware\tools\avr\bin\avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu=atmega2560 -DF_CPU=16000000L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=105 -IC:\Users\aspic\Downloads\arduino-1.0.5\hardware\arduino\cores\arduino -IC:\Users\aspic\Downloads\arduino-1.0.5\hardware\arduino\variants\mega -IC:\Users\aspic\Documents\Arduino\librar ies\CyberLib C:\Users\aspic\AppData\Local\Temp\build4 096162444315916375.tmp\sketch_nov24a.cpp -o C:\Users\aspic\AppData\Local\Temp\build4 096162444315916375.tmp\sketch_nov24a.cpp .o
sketch_nov24a.ino: In function 'void setup()':
sketch_nov24a:6: error: 'StartTimer1' was not declared in this scope
Для 328 ошибок компиляции нет. К сожилению на 328 ног маловато, есть желание прицепить экран с тачскрином а ставить 2 дуины жаба душит :|
aspic вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 52 (пользователей: 0 , гостей: 52)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 02:45. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика