Перейти к содержанию
    

Исходники программ и библиотек

либо уйдет в небытие...

Это будет правильным решением :(

Посмотрел. На данный момент это графоманство чистой воды - желание писать несомненно есть, но со всем остальным, начиная с чисто ремесленных навыков, очень большой напряг :(

Изменено пользователем zltigo

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрел. Это будет правильным решением :(

Ну, именно от Вас я ожидал подобной фразы...

Аргументируйте, если не трудно.

Пусть будет мне наукой.

 

Я, конечно, не претендую на звание "образец стиля" в написании программ, если Вы это имели ввиду под чисто ремесленными навыками, это оттачивается с годами.

Нельзя ли конкретней? А то Вы только интригуете подобными фразами. Мне снизу не видно! :laughing:

Изменено пользователем injen-d

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

для работы с инкрементным энкодером encoder.rar

для преобразования двоичных чисел в двоично десятичные и вывода на lcd bcd.rar

знакогенератор для LCD от Nokia3310 DriverNokia3310Tx.rar

библиотека для работы с LCD от Nokia3310 с видео буфером. нужно от 1 КБ ОЗУ. DriverNokia3310vb.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Модуль доступа к 16-и битным регистрам AVR (для avr-gcc).

=======================================================================
=====
#define avr_read_word_atomic(addr)                                            \
(__extension__({                                                              \
uint16_t __addr16 = (uint16_t)(addr);                                     \
uint16_t __result;                                                        \
__asm__ __volatile__                                                      \
(                                                                         \
	"in __tmp_reg__,__SREG__"           "\n\t"                            \
	"cli"                               "\n\t"                            \
	"ldd %A0,%a1+0"                     "\n\t"  /*lo*/                    \
	"out __SREG__, __tmp_reg__"         "\n\t"                            \
	"ldd %B0,%a1+1"                             /*hi*/                    \
	: "=r" (__result)                   /* output operands */             \
	: "e" (__addr16)                    /* input operands */              \
	: "memory"                          /* list of clobbered registers */ \
);                                                                        \
__result;                                                                 \
}))

// ============================================================================
#define avr_write_word_atomic(addr,value)                                     \
(__extension__({                                                              \
uint16_t __addr16 = ((uint16_t)(addr));                                   \
uint16_t __value  = (uint16_t)(value);                                    \
__asm__ __volatile__                                                      \
(                                                                         \
	"in __tmp_reg__,__SREG__"           "\n\t"                            \
	"cli"                               "\n\t"                            \
	"std %a1+1,%B0"                     "\n\t"   /*hi*/                   \
	"out __SREG__, __tmp_reg__"         "\n\t"                            \
	"std %a1+0,%A0"                              /*lo*/                   \
	:                                   /* output operands */             \
	: "r" (__value),                    /* input operands */              \
	  "e" (__addr16)                                                      \
	: "memory"                          /* list of clobbered registers */ \
);                                                                        \
}))

avr_reg16.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

для работы с инкрементным энкодером encoder.rar

для преобразования двоичных чисел в двоично десятичные и вывода на lcd bcd.rar

знакогенератор для LCD от Nokia3310 DriverNokia3310Tx.rar

библиотека для работы с LCD от Nokia3310 с видео буфером. нужно от 1 КБ ОЗУ. DriverNokia3310vb.rar

 

Добавлю-ка я вариант с учетверением количества импульсов валкодера. indent-ы в исходном тексте съела форма ответа на сообщение...

 

static uint_least8_t old_val;

void spool_encinterrupt(void)
{
uint_least8_t new_val = hardware_get_encoder_bits();	/* Состояние фазы A - в бите с весом 2, фазы B - в бите с весом 1 */

// dimensions are:
// old_bits new_bits
const static int_least8_t v [4][4] =
{
	{
		+0,		/* 00 -> 00 stopped */
		-1,		/* 00 -> 01 rotate left */
		+1,		/* 00 -> 10 rotate right */
		+0,		/* 00 -> 11 invalid combination */		
	},
	{
		+1,		/* 01 -> 00 rotate right */
		+0,		/* 01 -> 01 stopped */
		+0,		/* 01 -> 10 invalid combination */
		-1,		/* 01 -> 11 rotate left */
	},
	{
		-1,		/* 10 -> 00 rotate left */
		+0,		/* 10 -> 01 invalid combination */
		+0,		/* 10 -> 10 stopped */
		+1,		/* 10 -> 11 rotate right */
	},
	{
		+0,		/* 11 -> 00 invalid combination */
		+1,		/* 11 -> 01 rotate right */
		-1,		/* 11 -> 10 rotate left */
		+0,		/* 11 -> 11 stopped */
	},
};


rotate += v [old_val][new_val];

old_val = new_val;
}

ISR(INT0_vect)
{
spool_encinterrupt();
}

ISR(INT1_vect)
{
spool_encinterrupt();
}

void encoder_clear(void)
{
rotate2 = 0;
disableIRQ();
rotate = 0;
tickcount = TICKCOUNT_MAX;
enableIRQ();
}
/* получение количества шагов и времени с последнего вызова. */
int 
encoder_snapshot(
uint_least8_t * ticks, 
uint_least8_t derate)
{
div_t h;
int hrotate;

disableIRQ();
if (tickcount != 0)
{
	* ticks = tickcount;
	tickcount = 0;
	hrotate = rotate;
	rotate = 0;
}
else
{
	* ticks = 1;
	hrotate = 0;
	//hrotate = rotate;
	//rotate = 0;
}
enableIRQ();

/* Ументшение разрешения валкодера в зависимости от установок в меню */
h = div(hrotate + rotate2, derate);

rotate2 = h.rem;

return h.quot;
}


/* получение "редуцированного" количества прерываний от валкодера.
* То что осталось после деления на scale, остается в накопителе 
*/

int getRotateLoRes(void)
{
uint_least8_t ticks;
return encoder_snapshot(& ticks, ROTATE_LORES_DIV * hiresdiv);
}

Изменено пользователем Genadi Zawidowski

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Простой программный UART-передатчик. STX - Simple TX Удобно в Proteus нацепить на reset-вывод.

Код работает под IAR и CodeVisionAVR. (добавите WinAVR - буду рад добавить в исходник)

В архиве (функция и проекты IAR, CV, Proteus)

 

STX Rev.71

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Простой драйвер символьного lcd на основе контроллеров ks0066. Проверка флага занятости. Поддержка 4-ех и 8-ми разрядной шины. В архиве 2 варианта - для IARa и для WINAVR.

lcd_winstar.rar

Изменено пользователем sansnotfor

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Библиотека V-USB (старое название AVR-USB) - программная реализация протокола USB на AVR. Есть примеры рабочих устройств USB и компутерных программ, работающих с этими устройствами. Библиотека бесплатная. Комментарии в библиотеке и примерах переведены на русский язык.

2. Макетные платы, на которых удобно применять библиотеку V-USB: AVR-USB-MEGA16, AVR-USB-TINY45.

3. Макетные платы с аппаратным интерфейсом USB: AVR-USB162, AT91SAM7X.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Драйвер матричной клавиатуры 3х4. Подходит для любого компилятора, нужно только подключить соответствующих заголовочный файл мк. Позволяет подключать клавиатуру как к разным портам, так и к одному. Единственное условие - столбцы матрицы должны быть подключены к младшим разрядам порта, строки - к старшим.

Keyboard_driver.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Небольшая поправочка к моему сообщению №138 в этой ветке форума,

вот так будет вернее:

============================================================================
#define avr_read_word_atomic(addr)                                            \
(__extension__({                                                              \
uint16_t __addr16 = (uint16_t)(addr);                                     \
uint16_t __result;                                                        \
__asm__ __volatile__                                                      \
(                                                                         \
	"in __tmp_reg__,__SREG__"           "\n\t"                            \
	"cli"                               "\n\t"                            \
	"ldd %A0,%a1+0"                     "\n\t"  /*lo*/                    \
	"out __SREG__, __tmp_reg__"         "\n\t"                            \
	"ldd %B0,%a1+1"                             /*hi*/                    \
	: "=r" (__result)                   /* output operands */             \
	: "b" (__addr16)                    /* input operands */              \
	: "memory"                          /* list of clobbered registers */ \
);                                                                        \
__result;                                                                 \
}))

// ============================================================================
#define avr_write_word_atomic(addr,value)                                     \
(__extension__({                                                              \
uint16_t __addr16 = ((uint16_t)(addr));                                   \
uint16_t __value  = (uint16_t)(value);                                    \
__asm__ __volatile__                                                      \
(                                                                         \
	"in __tmp_reg__,__SREG__"           "\n\t"                            \
	"cli"                               "\n\t"                            \
	"std %a1+1,%B0"                     "\n\t"   /*hi*/                   \
	"out __SREG__, __tmp_reg__"         "\n\t"                            \
	"std %a1+0,%A0"                              /*lo*/                   \
	:                                   /* output operands */             \
	: "r" (__value),                    /* input operands */              \
	  "b" (__addr16)                                                      \
	: "memory"                          /* list of clobbered registers */ \
);                                                                        \
}))

заменил

"e" (__addr16)

на

"b" (__addr16)

 

а то вдруг компилятор попытался сгенерить STD X+1,N (мой косяк)

а можно лишь

STD Y+1,N

STD Z+1,N

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;ah:al/bl 86байт 46 тактов

;ah=]ah:al/bl[ остаток

;al=[ah:al/bl] частное

div16_8:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

lsl al ;1

rol ah ;1

sbc ah,bl ;1

brsh koko7 ;2/1

add ah,bl ;1

koko7: rol al ;1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

rol ah ;1

sbc ah,bl ;1

brsh koko6 ;2/1

add ah,bl ;1

koko6: rol al ;1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

rol ah ;1

sbc ah,bl ;1

brsh koko5 ;2/1

add ah,bl ;1

koko5: rol al ;1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

rol ah ;1

sbc ah,bl ;1

brsh koko4 ;2/1

add ah,bl ;1

koko4: rol al ;1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

rol ah ;1

sbc ah,bl ;1

brsh koko3 ;2/1

add ah,bl ;1

koko3: rol al ;1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

rol ah ;1

sbc ah,bl ;1

brsh koko2 ;2/1

add ah,bl ;1

koko2: rol al ;1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

rol ah ;1

sbc ah,bl ;1

brsh koko1 ;2/1

add ah,bl ;1

koko1: rol al ;1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

rol ah ;1

sbc ah,bl ;1

brsh koko0 ;2/1

add ah,bl ;1

koko0: rol al ;1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

com al ;1

ret ;4 6+7*5+5=46

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

 

 

;;;;;;;;;;;;СRC-CCITT_16 0x1021;;;;;;;;;

;CRC-XMODEM (0x1021) Initial value:0x0 ;

; 50 байт ;

; 18 тактов на байт

;Z-sumbol al=dlin ;

;bh:bl=crc-16 ;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

crc_home: clr bh ;1

clr bl ;1

crc_plus: push al ;2

push ah ;2

push r1 ;2

push r0 ;2

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

crc_loop1: ld ah,Z+ ;2

eor bh,ah ;1

ldi ah,16 ;1

mul ah,bh ;2

eor bh,r1 ;1

mul ah,bh ;2

eor bl,r0 ;1

add r0,r0 ;1

adc r1,r1 ;1

eor r0,bh ;1

eor r1,bl ;1

movw bh:bl,r1:r0;1

dec al ;1

brne crc_loop1 ;2/1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18

pop r0 ;2

pop r1 ;2

pop ah ;2

pop al ;2

ret ;4

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Небольшая утилита для Windows с исходниками

Позволяет осуществлять удобное кодирование таблички для 7ми сегментного (семисегментного) индикатора

Откомпилированный фал в папке realise

В программе можно визуально указать какой сегмент к какому выводу контроллера подсоединен

собственно PB и PD указанно для удобства можно читать что там и PA и PE короче PX и PY

в результирующем фале digs.inc будет табличка из .dw биты которого будут соответствовать PXn и PYn

 

то есть по адресу=адрестаблички+цифра*2 мы получим два байта которые можно сразу outить в PX и PY

ну моджет быть замаскировав неиспользуемые биты

 

это уже вторая версия, предыдущая была рассчитана только на один порт и генерировала готовый код с использованием

оперативной памяти

7SEG2.RAR

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Энергосчетчик 220 В. Позволяет контролировать напряжение, ток и частоту сети. Гальваническая развязка от сети, интерфейс RS-485.

Исходники + схема

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Watchdog таймер для GSM-модема, работающего под управлением внутренней прошивки (например, GE863-GPS, работающего под управлением внутренней Python-программы). Таймер ждет периодических подтверждающих импульсов от GPIO модема, в противном случае перезагружает модем.

Исходник + схема

 

Комбинированный сенсор для робота. Три акселерометра + три гироскопа + АЦП + контроллер + RS232.

Исходник + схема

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...