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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.03.2017, 10:06   #241
sunjob
Member
 
Регистрация: 16.11.2013
Сообщений: 32
Вес репутации: 0
sunjob is an unknown quantity at this point
По умолчанию Re: Ускоряем работу Arduino

шо же мы делаем? :о)

Развернуть для просмотра

Код:
#define A0_Read (AnRead(B01000000))
#define A1_Read (AnRead(B01000001))
#define A2_Read (AnRead(B01000010))
#define A3_Read (AnRead(B01000011))
#define A4_Read (AnRead(B01000100))
#define A5_Read (AnRead(B01000101))
#define A6_Read (AnRead(B01000110))
#define A7_Read (AnRead(B01000111))	

uint16_t AnRead(uint8_t An_pin)
{
ADMUX = An_pin;
...
}
[свернуть]


мать моя женчина!!!
принудительное выставление Aref/ИОН-а на DEFAULT
я чуть не рехнулся, когда до этого дорыл, не мог понять, что у меня за капец ... ну да ладно...

нельзя же так делать!!! ...не, конечно, ни кто нам не запретит..., ну давайте минимизировать хотя бы предполагаемые разрушения от возможного ядерного взрыва, а?!

p.s.
для себя рихтанул "примерно так" (при быстром "набеге" на тесте и текущем проекте - работает), ну а далее смотрим сами ...
все имхо, удачных гонок!

Развернуть для просмотра

Код:
// 
// CyberLib.h
//

uint16_t AnRead(uint8_t pin);

#define A0_Read (AnRead(B000))
#define A1_Read (AnRead(B001))
#define A2_Read (AnRead(B010))
#define A3_Read (AnRead(B011))
#define A4_Read (AnRead(B100))
#define A5_Read (AnRead(B101))
#define A6_Read (AnRead(B110))
#define A7_Read (AnRead(B111))	

#define ADC_AREF_EXTERNAL   0
#define ADC_AREF_DEFAULT    1
#define ADC_AREF_INTERNAL   3

#define ADC_K_2   B001 // 8   MHz
#define ADC_K_4   B010 // 4   MHz
#define ADC_K_8   B011 // 2   MHz
#define ADC_K_16  B100 // 1   MHz 
#define ADC_K_32  B101 // 500 kHz
#define ADC_K_64  B110 // 250 kHz
#define ADC_K_128 B111 // 125 kHz

struct {
uint8_t ref = ADC_AREF_DEFAULT; 
uint8_t k   = ADC_K_128; 
} adc;

void adc_set_ref(uint8_t ref);
void adc_set_k  (uint8_t k  );

//
// CyberLib.cpp
//

////////////////////////////////////////////////////////////////////////////////
uint16_t AnRead(uint8_t pin)
////////////////////////////////////////////////////////////////////////////////
{
uint16_t adch; 

ADMUX = (adc.ref << REFS0) | (pin);
delay_us(10);	  

//
// старшие два бита ADEN & ADSC
// младшие три бита - это как раз и есть предделитель 
//
ADCSRA = (1<<ADEN | 1<<ADSC | adc.k);

while (ADCSRA & (1 << ADSC));

pin  = ADCL;
adch = ADCH; 

return (adch<<8) + pin;
}
////////////////////////////////////////////////////////////////////////////////
void adc_set_ref(uint8_t ref)
////////////////////////////////////////////////////////////////////////////////
{
adc.ref = ref;
ADMUX   = (ADMUX & (B00<<REFS0)) | (adc.ref << REFS0);
}
////////////////////////////////////////////////////////////////////////////////
void adc_set_k(uint8_t k)
////////////////////////////////////////////////////////////////////////////////
{
adc.k  = k;
ADCSRA = (ADCSRA & B000) | adc.k;	
}
////////////////////////////////////////////////////////////////////////////////
[свернуть]

Последний раз редактировалось sunjob; 21.03.2017 в 15:03.
sunjob вне форума   Ответить с цитированием
Старый 07.03.2017, 12:59   #242
Erop23
Junior Member
 
Регистрация: 07.03.2017
Сообщений: 1
Вес репутации: 0
Erop23 is an unknown quantity at this point
По умолчанию Re: Ускоряем работу Arduino

Добрый день! Огромная благодарность за данную библиотеку! Мой проект реализован на 328 камне, но в будущем, ввиду отсутствия необходимости в таком количестве выводов, буду переходить на attiny85. Подскажите в каком направлении двигаться при изменении библиотеки, так как особого опыта в изменении библиотек не имею?
Erop23 вне форума   Ответить с цитированием
Старый 07.03.2017, 14:27   #243
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

Нужно на чистом AVR CИ писать
Admin вне форума   Ответить с цитированием
Старый 08.03.2017, 12:39   #244
Tohin
Moderator
 
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031
Tohin is a jewel in the roughTohin is a jewel in the roughTohin is a jewel in the rough
По умолчанию Re: Ускоряем работу Arduino

To: Admin, Bulatovor
А статья на Wiki подходит под обе библиотеки (в данной теме и от Archat'a)?
Tohin вне форума   Ответить с цитированием
Старый 08.03.2017, 21:49   #245
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 вне форума   Ответить с цитированием
Старый 20.03.2017, 22:25   #246
zl.th
Junior Member
 
Регистрация: 03.08.2016
Сообщений: 5
Вес репутации: 0
zl.th is an unknown quantity at this point
По умолчанию

Не работает чтение по SPI из сдвигового регистра.
На стандартной либе пашет (SPI.h) которая.
Вывод по SPI работает.

Развернуть для просмотра


#include <CyberLib.h>

uint8_t reg1;

void setup() {
StartSPI(0, 2, 1);
Serial.begin(9600);
D10_Out;
}

void loop() {
D10_Low;
D10_High;
reg1 = ReadSPI();
Serial.println(reg1, BIN);
delay(1000);
}
[свернуть]
zl.th вне форума   Ответить с цитированием
Старый 20.03.2017, 22:51   #247
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
По умолчанию

Попробуйте сначала на низкой скорости StartSPI(0, 128, 1);
Возможно устройство подключенное по SPI не тянет по скорости
Admin вне форума   Ответить с цитированием
Старый 21.03.2017, 06:56   #248
zl.th
Junior Member
 
Регистрация: 03.08.2016
Сообщений: 5
Вес репутации: 0
zl.th is an unknown quantity at this point
По умолчанию

Цитата:
Сообщение от Admin Посмотреть сообщение
Попробуйте сначала на низкой скорости StartSPI(0, 128, 1);
Возможно устройство подключенное по SPI не тянет по скорости
Забыл сказать, низкие скорости так же проверял, это первое, что я сделал.

В выше приведенном коде, программа "зависает" на чтении по SPI, следующая строчка с выводом в сериал не исполняется.

update.

Обнаружил, что в функции StartSPI пин 10 тоже конфигурируется. Зачем? SS пин лучше задавать самому программисту, а если 10 пин занят чем то другим?

update2.

Разобрался, зачем конфиг 10-го пина.

Последний раз редактировалось zl.th; 21.03.2017 в 13:56.
zl.th вне форума   Ответить с цитированием
Старый 03.04.2017, 20:02   #249
zl.th
Junior Member
 
Регистрация: 03.08.2016
Сообщений: 5
Вес репутации: 0
zl.th is an unknown quantity at this point
По умолчанию

Прошло уже много времени, ответа нет. SPI так и не работает, и в моем проекте не критично, но тем не менее.
Дабы была повторяемость, у меня не заработало чтение из сдвиговых регистров 1533ир9 (аналог 74HC165). Регистры подключены каскадом в кол-ве 3-х шт. Код с SPI.h работает, с Cyberlib.h нет. Синтаксис точно соблюден. Кому интересно, копайте.
zl.th вне форума   Ответить с цитированием
Старый 23.08.2017, 10:52   #250
krian
Junior Member
 
Регистрация: 23.08.2017
Сообщений: 4
Вес репутации: 0
krian is an unknown quantity at this point
По умолчанию

В исходном файле CyberLib правопреемник (CarMonitor) ссылается на этот форум.
Поэтому и вопрос сюда к ВАМ.
Я сразу столкнулся с неприятностями. Одним словом - неработает!!!
Подключил библиотеку в свой проект и получил кучу ошибок при компиляции. Думал сначала, что сам напортачил. Потом взял пример, который включен в саму библиотеку. Оказалось, что и там функции не работают.
У меня Arduino 1.8.4 Hourly Bild 2017/08/01
сообщение компилятора:
Blink.ino:11: undefined reference to `delay_ms(unsigned int)'
При вызове функций таймера 1 и чтения аналогового входа сообщения аналогичные.
Чем Вы можете это объяснить?
krian вне форума   Ответить с цитированием
Ответ


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

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

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

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


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


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