![]() |
|
|
#141 |
|
Senior Member
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1312 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
И ещё, CyberLib скачаная давно, работает с атмега168, а скачаная сейчас не хочет работать с 168-ой. IDE 1.5.5.
|
|
|
|
|
|
#142 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Если используем тип uint16_t, то нужно делить на 2, потому как sizeof возвращает размер массива не в колличестве элементов , а в байтах. Если используем тип uint8_t, то делить не нужно
|
|
|
|
|
|
#143 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Спасибо!
Плюсанул |
|
|
|
|
|
#144 |
|
Junior Member
Регистрация: 05.11.2014
Сообщений: 1
Вес репутации: 0 ![]() |
Предлагаю выложить библиотеку на публичный хостинг типа гитхаба с целью предоставления сообществу возможности слать pull-реквесты с фиксами и предложениями.
|
|
|
|
|
|
#145 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Для меня это темный лес.
В том смысле что я никогда не пользовался и не представляю как им пользоваться |
|
|
|
|
|
#146 |
|
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 ![]() |
Настоятельно рекомендую включить данную конструкцию в Либу!
Данным подходом, полностью решена проблема перенастраиваемых дефайнами пинов. Т.е. данную конструкцию можно использовать аналогично с 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. |
|
|
|
|
|
#148 |
|
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 ![]() |
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", то все преимущество в ускорении, я так понимаю, потеряется ? |
|
|
|
|
|
#149 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Вот вырезал из библиотеки фунуфию чтения и отправки данных
PHP код:
Вот этот код реально работает быстрее, но я его закоментирова, так как не все устройства успевают переходить в режим готовности PHP код:
|
|
|
|
|
|
#150 | |
|
Junior Member
Регистрация: 25.11.2014
Сообщений: 1
Вес репутации: 0 ![]() |
Попробовал пару примеров(Работа с Timer1,Чтение и запись Serial) на Меге 2560 из поста #122 - почему то кидает в в ошибку компиляции - StartTimer1 was not declared in this scope.
Цитата:
|
|
|
|
|
![]() |
| Здесь присутствуют: 12 (пользователей: 0 , гостей: 12) | |
|
|