|
07.03.2013, 14:05 | #1 | ||
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,617
Вес репутации: 9822 |
Цитата:
Я хочу еще добавить к nanopins функцию SPI, он тоже есть в библиотеках по умолчанию, но как я уже писал выше мне удобнее обходится одним #include Цитата:
Для подсчета времени придется использовать таймер и это будет не совсем правильно. Если отнять таймер у встроенных функций? то потеряем все стандартные функции связаные с Timer0 Если использовать другой таймер, то для пользователя останется свободным всего один таймер |
||
07.03.2013, 14:11 | #2 |
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 |
|
07.03.2013, 14:20 | #3 |
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 |
ну если не жестко привязываться к конкретному таймеру, а дополнительно сделать функцию инициализации для привязки к любому из 3х таймеров.... или смотреть на текущий делитель таймера выставленный на регистрах.... эххх... чет остапа понесло))))
|
07.03.2013, 00:27 | #4 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,617
Вес репутации: 9822 |
Добавил функцию UART_SendArray(array, size array):
array-имя вашего массива size array-число отправляемых байт массива Функция отправляет в UART порт, массив типа байт, максимальный объем которого не должен превышать 65535 байт, минимальный объем массива 1 байт Можно также отправлять часть массива Приер использования функции: Код:
#include <nanopins.h> uint8_t message[] = "Cyber-Place "; //массив размером 12байт void setup() { UART_Init(115200); //инициализация } void loop() { UART_SendArray( message, 12); //отправить в UART порт, массив размером 12 байт delay_ms(1000); //пауза 1сек. } Для сравнения такой же код(пример ниже), только с использованием встроенной функции Serial.write использует 1592 байта Код:
uint8_t message[] = "Cyber-Place "; //массив размером 12байт void setup() { Serial.begin(115200); } void loop() { Serial.write(message, 12); delay(1000); } |
07.03.2013, 15:10 | #5 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,617
Вес репутации: 9822 |
Может быть проще будет подправить стандартную либу?
Код:
#define MICROSECONDS_PER_TIMER0_OVERFLOW (clockCyclesToMicroseconds(64 * 256)) #define MILLIS_INC (MICROSECONDS_PER_TIMER0_OVERFLOW / 1000) #define FRACT_INC ((MICROSECONDS_PER_TIMER0_OVERFLOW % 1000) >> 3) #define FRACT_MAX (1000 >> 3) volatile unsigned long timer0_overflow_count = 0; volatile unsigned long timer0_millis = 0; static unsigned char timer0_fract = 0; SIGNAL(TIMER0_OVF_vect) { // copy these to local variables so they can be stored in registers // (volatile variables must be read from memory on every access) unsigned long m = timer0_millis; unsigned char f = timer0_fract; m += MILLIS_INC; f += FRACT_INC; if (f >= FRACT_MAX) { f -= FRACT_MAX; m += 1; } timer0_fract = f; timer0_millis = m; timer0_overflow_count++; } unsigned long millis() { unsigned long m; uint8_t oldSREG = SREG; // disable interrupts while we read timer0_millis or we might get an // inconsistent value (e.g. in the middle of a write to timer0_millis) cli(); m = timer0_millis; SREG = oldSREG; return m; } unsigned long micros() { unsigned long m; uint8_t oldSREG = SREG, t; cli(); m = timer0_overflow_count; #if defined(TCNT0) t = TCNT0; #elif defined(TCNT0L) t = TCNT0L; #else #error TIMER 0 not defined #endif Допустим сохранил стандартные настроки таймера, запустил таймер со своими настройками, отработал и опять вернул стандартные настройки |
07.03.2013, 20:02 | #6 |
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 |
Действительно, кк я пропустил, в стандартной библиотеке WinAVR есть millis() и micros(). Подключаются через wiring.h а я их пропустил при разработке pixelight. Cпасибо за наводку....
на счет переключать идея хорошая, но иногда не возможная, т.к. на этом таймере может вистеть активный ШИМ ) |
10.03.2013, 05:37 | #7 |
Senior Member
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1311 |
Эдуард, большое Тебе спасибо за труд!!!
|
10.03.2013, 06:04 | #8 |
Senior Member
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1311 |
А имена пинам не получится присваивать?
PHP код:
|
10.03.2013, 09:43 | #9 | |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,617
Вес репутации: 9822 |
Цитата:
Можно реализовать так как ты хочешь, но при этом уже потеряется смысл, скорость выполнения функции упадет Проще тогда пользоваться стандартной либой |
|
11.03.2013, 01:57 | #10 |
Senior Member
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1311 |
Я лучше код перепишу! Спасибо, крутая либа!!!
|
Здесь присутствуют: 211 (пользователей: 0 , гостей: 211) | |
|
|