0
набрел нечаянно на эту статью…

по поводу быстродействия — в void main() неплохо было бы вызвать SystemInit() — а то у вас камень работает от внутреннего кварца и без умножителей…
в кейле это делается в стартапе (в асм файле при старте прошивки) а вот в кокосе это автоматом не прописывается, и нужно самому добавлять вызов…
кстати еще нужно проверить а что там с коэффициентами — бывают стоят не правильно…
вот я как то писал про STM32F4, но у вас точно такая же ситуация vg.ucoz.ru/publ/programmirovanie_mikrokontrollerov_stm32/stm32_nastrojka_taktirovanija_kontrollera_v_srede_coocox/9-1-0-29
  • avatar
  • WitGo
  • 30 декабря 2015, 19:22
0
эхх… а еще для графического дисплея писал как то вывод символов с попиксельной точностью и по X (это просто) и по Y (а вот это, если конечно не попиксельно рисовать, уже сложнее) — тоже где то лежит библиотечка… ааа вот например ноги -> vg.ucoz.ru/forum/9-100-1 и там же описание краткое как сделано...(если кому ссылка мешает — сотрите ее нафиг :-)
  • avatar
  • WitGo
  • 15 января 2014, 20:41
0
для гурманов вот перекодировка на лету из вин кодировки…
извиняюсь за асм, там по чипу ограничения были, поэтому ужал си до асма :-)))

;***************************************************************************
;*
;* ПЕЧАТЬ строки с кодировкой Win
;* Z — адрес строки для печати, в конце строки нулевой байт
;*
;***************************************************************************
PRN_WRSF:; печать строки, с кодировкой Windows!
PUSH R16
PUSH R17
PRN_WRSF_LOOP:
LPM R16, Z+; прочитали текущий символ
CPI R16, 0; проверим символ на маркер конца
BREQ PROC_WRSF_RET; если маркер конца — то выходим

RCALL PRN_CHAR; печатаем символ
RJMP PRN_WRSF_LOOP
PROC_WRSF_RET:; выход
POP R17
POP R16
RET

PRN_CHAR:; печать одного символа! с перекодировкой и токенами
PUSH ZL
PUSH ZH
PUSH R17
CPI R16, 0x09; проверка на код символа <0x09
BRSH PRN_CHAR_CH09; проверяем другие условия
; сюда попадаем когда код символа <9, но не ноль (его обработали выше)
; это имена моделей для печати!
DEC R16; номер модели с 1, а нам нужно с 0: уменьшаем на 1
LDI R17, MODEL_NAME-MODEL_AIL; 181 смещение имени от начала описателя модели
LDI ZL, low (FLASH_DISK_AREA*2)
LDI ZH, high(FLASH_DISK_AREA*2)
ADD ZL, R17; смещение имени модели
ADC ZH, R16; номер модели
; здесь в Z адрес строки для печати
RCALL PRN_WRSF; печатаем строку имени модели
PRN_CHAR_EXIT:
POP R17
POP ZH
POP ZL
RET

PRN_CHAR_PRNLINE:; печать символа
CALL LCD_CHAR
RJMP PRN_CHAR_EXIT; выходим с восстановлением Z

PRN_CHAR_CH09:
CPI R16, 0xC0; это русский символ
BRCS PRN_CHAR_NOTRUS; это не русский символ
; процедура перекодировки русских символов
LDI ZL, low (LCD_RUSTABLE*2)
LDI ZH, high(LCD_RUSTABLE*2)
SUBI R16, 0xC0; определим номер русского символа
CLR R17
ADD ZL, R16
ADC ZH, R17
LPM R17, Z
RJMP PRN_CHAR_PRNLINE

PRN_CHAR_NOTRUS:; в R16 у нас символ перекодированный если он вдруг был русский
MOV R17, R16
; проверка на печать строкового токена
CPI R17, 0x80
BRLO PRN_CHAR_PRNLINE; код символа меньше 80 — печатаем!
CPI R17, 0xA0
BRSH PRN_CHAR_PRNLINE; код символа больше A0 — печатаем!
; сюда попадаем когда нам нужно напечатать токен

CPI R17, 0x9F; печатаем токен задаваемый пользователем
BRNE PRN_CHAR_T9E
LDS ZL, LCD_TOKEN_9F
LDS ZH, LCD_TOKEN_9F+1
RJMP PRN_CHAR_TOKEN_PRN; печать токена
PRN_CHAR_T9E:
CPI R17, 0x9E; печатаем токен задаваемый пользователем
BRNE PRN_CHAR_T9D
LDS ZL, LCD_TOKEN_9E
LDS ZH, LCD_TOKEN_9E+1
RJMP PRN_CHAR_TOKEN_PRN; печать токена
PRN_CHAR_T9D:
CPI R17, 0x9D; печатаем токен задаваемый пользователем
BRNE PRN_CHAR_T
LDS ZL, LCD_TOKEN_9D
LDS ZH, LCD_TOKEN_9D+1
PRN_CHAR_TOKEN_PRN:
RCALL PRN_WRSF

RJMP PRN_CHAR_EXIT; и идем на выход
PRN_CHAR_T:
LDI ZL, low (LCD_TOKEN_LIB*2)
LDI ZH, high(LCD_TOKEN_LIB*2); в Z адрес библиотеки токенов
SUBI R16, 0x80; вычтем из кода символа 0x80

RCALL PRN_DICT; печать словарного значения
RJMP PRN_CHAR_EXIT; и выходим

; токены печати
LCD_TOKEN_LIB:

; ВНИМАНИЕ! токены 0x9D 0x9E 0x9F задаются пользователем и в этой таблице не обрабатываются!

; коды токенов ниже начинаются с 0x80!
.DB «НАСТР. », 0, «КАНАЛ», 0, «РАСХОД», 0, «ЭКСПО.», 0, «Р1 », 0, «Р2 », 0
; 0x80 0x81 0x82 0x83 0x84 0x85

.DB «Р3 », 0, 0, «MAX», 0, «ЦЕНТР», 0, «MIN», 0, «ДВИГ.», 0, «ПУЛЬТ» ,0, «ЭЛЕР», 0
; 0x86 0x87 0x88 0x89 0x8A 0x8B 0x8C 0x8D

.DB «РВ», 0, «РН» ,0
; 0x8E 0x8F

LCD_RUSTABLE: .DB 0x41, 0xA0; А Б
.DB 0x42, 0xA1; В Г
.DB 0xE0, 0x45; Д Е
.DB 0xA3, 0xA4; Ж З
.DB 0xA5, 0xA6; И Й
.DB 0x4B, 0xA7; К Л
.DB 0x4D, 0x48; М Н
.DB 0x4F, 0xA8; O П
.DB 0x50, 0x43; Р С
.DB 0x54, 0xA9; Т У
.DB 0xAA, 0x58; Ф Х
.DB 0xE1, 0xAB; Ц Ч
.DB 0xAC, 0xE2; Ш Щ
.DB 0xAD, 0xAE; Ъ Ы
.DB 0x62, 0xAF; Ь Э
.DB 0xB0, 0xB1; Ю Я

; в этом проекте маленькие буквы не используем, перекодировать их не нужно
; .DB 0x61, 0xB2; а б
; .DB 0xB3, 0xB4; в г
; .DB 0xE3, 0x65; д е
; .DB 0xB6, 0xB7; ж з
; .DB 0xB8, 0xB9; и й
; .DB 0xBA, 0xBB; к л
; .DB 0xBC, 0xBD; м н
; .DB 0x6F, 0xBE; о п
; .DB 0x70, 0x63; р с
; .DB 0xBF, 0x79; т у
; .DB 0xE4, 0x78; a x
; .DB 0xE5, 0xC0; ц ч
; .DB 0xC1, 0xE2; ш щ
; .DB 0xC2, 0xC3; ъ ы
; .DB 0xC4, 0xC5; ь э
; .DB 0xC6, 0xC7; ю я
  • avatar
  • WitGo
  • 15 января 2014, 20:36
0
посмотрите в токенах как печатается слово ПОЗИЦИЯ — печать токенов рекурсивна! то есть при желании можно токен составлять из другого токена и букв, или других токенов или в любых других комбинациях…
  • avatar
  • WitGo
  • 15 января 2014, 20:32
0
я в одном из своих проектов пошел еще дальше и сделал токен-печать…
у меня шрифт был только прописной (плотность высокая) — поэтому коды для строчных букв я использовал для токенов…
в прошивках много совпадающих строк например печатать слово или часть одним кодом и быстро и экономично для прошивки…

что то такое по коду
void LCD_token(unsigned char tknum, unsigned char mode) { // печать токена по номеру
char *tokenpointer;
tokenpointer=(char*)pgm_read_word(&(token_tbl[tknum])); // получим адрес указателя на строку (адрес элемента массива)

while (pgm_read_byte(tokenpointer)!='\0') {
LCD_prn(pgm_read_byte(tokenpointer), mode);
tokenpointer++;
}
}

и вот так примерно массивы токенов

// таблица токенов печати
#include <avr/pgmspace.h>
// ТОКЕН НОМЕР
char tkn_channel[] PROGMEM = «КАНАЛ»; // x64
char tkn_value[] PROGMEM = «ЗНАЧЕНИ»; // x65
char tkn_number[] PROGMEM = «НОМЕР»; // x66
char tkn_position[] PROGMEM = "\x68Я"; // x67 ПОЗИЦИЯ
char tkn_position1[] PROGMEM = «ПОЗИЦИ»; // x68
char tkn_name[] PROGMEM = «НАЗВАНИЕ »; //x69
char tkn_param[] PROGMEM = «ПАРАМ»; // x6A

char *token_tbl[] PROGMEM = { // таблица адресов токенов
tkn_channel,
tkn_value,
tkn_number,
tkn_position,
tkn_position1,
tkn_name,
tkn_param
};

это простенький пример, в больших проектах текстовые данные в 7-8 кб сжимались в фантастические 2 кб!!!
причем по скорости печати потерь практически нет (грубо говоря обрабатываем один лишний символ на токен)
  • avatar
  • WitGo
  • 15 января 2014, 20:30
0
В принципе думки делать замер уровня заряда конденсатора с последующей оцифровкой при помощи АЦП…
следовательно каждые 12.5 нс считываем значение с конденсатора, и между этими считываниями — еще нужно обнулить конденсатор по внешнему событию
  • avatar
  • WitGo
  • 11 ноября 2013, 14:08
0
да, это видел,
но такое разрешение в общем-то не нужно…
нужен замер каждые 12,5 нс,
замер 1 нс внутри 12.5 нс, каждый 12.5 нс, с выдачей параллельного кода
  • avatar
  • WitGo
  • 11 ноября 2013, 12:44
0
немного отвлеченный вопрос: а насколько реально измерять временные интервалы измерением заряда конденсатора на частоте 40-50 мгц (то есть измерять период 0,02 мкс с разрешением хотя бы в 64 отсчета)

ктото делал чтото подобное?
  • avatar
  • WitGo
  • 10 ноября 2013, 18:43
0
ааа, все, убрал запятую :-)
  • avatar
  • WitGo
  • 14 апреля 2013, 10:18
0
документ не найден на сервере

в интернете полно. но они то платные, по бесплатно только конвертируют но не дают сохранить, то сохраняют но в свой формат :-( устал перебирать и решил спросить чем _all_ пользуется
  • avatar
  • WitGo
  • 14 апреля 2013, 10:17
0
А есть еще какие нить шрифты, других размеров или других стилей?
  • avatar
  • WitGo
  • 13 апреля 2013, 18:12
0
да, я уже тоже об этом подумал… нужно будет попробовать
  • avatar
  • WitGo
  • 19 марта 2013, 14:59
0
а где бы купить отдельно эти контакты?

а то у меня есть дисплеи нокиа1100
и к ее контактам припаиваться нельзя (дисплей через какое то время перестанет работать из-за пропадания контакта)…

думаю что можно попробовать этот же способ…
  • avatar
  • WitGo
  • 17 марта 2013, 08:57
0
мне как то проще показался SPI дисплей 1.8 дюйма… на ебай легко заказывается (доставка бесплатна), но у него разрешение меньше :-(
  • avatar
  • WitGo
  • 19 февраля 2013, 13:23
0
а меня в таких дисплейчиках всегда больше всего интересует переходник для подключения контактов или разъем какой на плату.
что использовали вы?
  • avatar
  • WitGo
  • 19 февраля 2013, 13:22
0
работаю с microSD картой, емкостью 2 гб
я отправляю на карту cmd0, а в ответ получаю ответ R1=0
чтото не так или повторить отправку cmd0?
  • avatar
  • WitGo
  • 18 ноября 2012, 20:28
0
это я понял, на avr на асме можно писать (сам люблю на avr на ассемблере писать)…

но собирать как то не актуально…
раньше были дискеты в каком то невобразимом количестве, постоянный приток инфы в виде zx-ревю и книг того же Родионова, писал программы на ассемблере например как то для себя написал дизассемблер который не только метки расставлял но и определял где код в исходной программе а где данные… сейчас конечно все простым кажется… а в 15 лет это был просто прорыв для моего мозга…
потом проект решающий задачки по геометрии (с выводом формул для решения), потом шашки… эхх!!! вот была романтика!
  • avatar
  • WitGo
  • 14 ноября 2012, 18:23
0
даа, сильная вещь… я как то задумывался об эмуляторе Z80 на AVR (16 мгц такта достаточно для этого)… но собрать весь комп — это прикольно…
  • avatar
  • WitGo
  • 14 ноября 2012, 15:58
0
жаль… хотя там наверняка ПЛИС (например есть реализация на сайте марсохода)…

эхх… интересно на AVR было бы! при 16-20 мгц тактовой частоты! — вот это задачка…
  • avatar
  • WitGo
  • 14 ноября 2012, 15:40
0
понятно, тогда нужно было и писать что это просто терминальный модуль, а не микроVGA

у меня есть проект подобный DIHalt'овскому, я к сожалению не знаю на чем он писал свой, мой написан на асме… и я там поизгалялся с генерацией КСИ — получилось очень просто и легко подстраиваемо…

по горизонтали с телека много не выжмешь — около 44-45 символов максимум…

но самое интересное это конечно цветность. с этим к сожалению не стал разбираться, хотя ссылочки заметил на будущее…

у вас увидел посте цветную картинку терминала — и подумал что будет описание генерации композитного видео с цветом… — вот это было бы очень и очень для меня интересно
  • avatar
  • WitGo
  • 14 ноября 2012, 15:38