Первый коммит
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
.vscode
|
||||
resources/_gen
|
0
.hugo_build.lock
Normal file
13
archetypes/default.md
Normal file
@ -0,0 +1,13 @@
|
||||
---
|
||||
title: "{{ replace .Name "-" " " | title }}"
|
||||
date: {{ .Date }}
|
||||
draft: true
|
||||
categories: ["misc"]
|
||||
<!-- featured_image: miniature.jpg -->
|
||||
---
|
||||
|
||||
Описание
|
||||
|
||||
<!--more-->
|
||||
|
||||
Текст
|
15
config.toml
Normal file
@ -0,0 +1,15 @@
|
||||
baseURL = 'https://mmote.ru/'
|
||||
title = 'Здесь был MultiMote'
|
||||
theme = 'mmotium'
|
||||
languageCode = 'ru'
|
||||
|
||||
[params]
|
||||
author = 'MultiMote'
|
||||
|
||||
[permalinks]
|
||||
posts = "/:slugorfilename"
|
||||
other = "/:slugorfilename"
|
||||
|
||||
[markup]
|
||||
[markup.highlight]
|
||||
style = 'monokailight'
|
4
content/categories/archive/_index.md
Normal file
@ -0,0 +1,4 @@
|
||||
---
|
||||
title: "Архив"
|
||||
description: "Это было давно и неправда"
|
||||
---
|
3
content/categories/cpp/_index.md
Normal file
@ -0,0 +1,3 @@
|
||||
---
|
||||
title: "Программирование на C/C++"
|
||||
---
|
3
content/categories/dendrite-fecal/_index.md
Normal file
@ -0,0 +1,3 @@
|
||||
---
|
||||
title: "Дендрофекальное проектирование"
|
||||
---
|
3
content/categories/mcu/_index.md
Normal file
@ -0,0 +1,3 @@
|
||||
---
|
||||
title: "Микроконтроллеры"
|
||||
---
|
3
content/categories/misc/_index.md
Normal file
@ -0,0 +1,3 @@
|
||||
---
|
||||
title: "Разное"
|
||||
---
|
3
content/categories/news/_index.md
Normal file
@ -0,0 +1,3 @@
|
||||
---
|
||||
title: "Новости"
|
||||
---
|
4
content/categories/pinned/_index.md
Normal file
@ -0,0 +1,4 @@
|
||||
---
|
||||
title: "Закреплено"
|
||||
description: "Информация особой важности"
|
||||
---
|
18
content/other/astyle-style/index.md
Normal file
@ -0,0 +1,18 @@
|
||||
---
|
||||
title: "Astyle"
|
||||
categories: ["cpp", "archive"]
|
||||
date: 2018-08-31T00:00:00+03:00
|
||||
draft: false
|
||||
---
|
||||
|
||||
|
||||
<!--more-->
|
||||
|
||||
```
|
||||
--style=java
|
||||
--pad-oper
|
||||
--pad-header
|
||||
--convert-tabs
|
||||
--align-pointer=name
|
||||
--align-reference=name
|
||||
```
|
BIN
content/other/avr-runline/anim.gif
Normal file
After Width: | Height: | Size: 378 KiB |
68
content/other/avr-runline/index.md
Normal file
@ -0,0 +1,68 @@
|
||||
---
|
||||
title: "Бегущая строка"
|
||||
categories: ["mcu", "archive"]
|
||||
date: 2016-02-19T00:00:00+03:00
|
||||
draft: false
|
||||
featured_image: miniature.jpg
|
||||
---
|
||||
|
||||
|
||||
<!--more-->
|
||||
|
||||
```c
|
||||
#include <avr/io.h>
|
||||
#include <string.h>
|
||||
#include <util/delay.h>
|
||||
#include "lcd_lib.h"
|
||||
|
||||
#define LINE 16
|
||||
|
||||
char *str = "Postapokaliptichesky1232323123";
|
||||
char *pstr;
|
||||
char buf[LINE + 1];
|
||||
|
||||
void lcd_clear() {
|
||||
LCDsendCommand(0x01);
|
||||
}
|
||||
|
||||
void lcd_zero_coord() {
|
||||
char y = 0;
|
||||
char x = 0;
|
||||
LCDsendCommand(0x80 | ((0x40 * y) + x));
|
||||
}
|
||||
|
||||
void lcd_data(char byte) {
|
||||
LCDsendChar(byte);
|
||||
}
|
||||
|
||||
void lcd_str(char *s) {
|
||||
while (*s != '\0') lcd_data(*(s++));
|
||||
}
|
||||
|
||||
|
||||
int main(void) {
|
||||
LCDinit();
|
||||
lcd_clear();
|
||||
while (1) {
|
||||
int len = strlen(str) + LINE;
|
||||
for (int i = 0; i < len; ++i) {
|
||||
lcd_clear();
|
||||
lcd_zero_coord();
|
||||
|
||||
strcpy(buf, str);
|
||||
int spaces = LINE - i;
|
||||
|
||||
buf[i] = '\0';
|
||||
pstr = buf;
|
||||
|
||||
if (spaces > 0) for (int s = 0; s < spaces; ++s) lcd_data(' ');
|
||||
else pstr += i - LINE;
|
||||
|
||||
lcd_str(pstr);
|
||||
_delay_ms(100);
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
![|](anim.gif)
|
BIN
content/other/avr-runline/miniature.jpg
Normal file
After Width: | Height: | Size: 5.8 KiB |
107
content/other/cheatsheet/index.md
Normal file
@ -0,0 +1,107 @@
|
||||
---
|
||||
title: "Полезности"
|
||||
categories: ["cpp", "archive"]
|
||||
date: 2015-12-01T00:00:00+03:00
|
||||
draft: false
|
||||
featured_image: miniature.jpg
|
||||
---
|
||||
|
||||
|
||||
На этой страничке я собираю все полезные кусочки кодов, которые мне пригождаются.
|
||||
|
||||
<!--more-->
|
||||
|
||||
# С/С++:
|
||||
|
||||
|
||||
## Вывод списка файлов в папке, dirent:
|
||||
|
||||
```c
|
||||
DIR *dir;
|
||||
struct dirent *ent;
|
||||
if (dir = opendir ("mydir")) {
|
||||
while (ent = readdir (dir)) {
|
||||
printf ("%s\n", ent->d_name);
|
||||
}
|
||||
closedir (dir);
|
||||
}
|
||||
```
|
||||
|
||||
## Удаление элементов вектора во время итерации:
|
||||
|
||||
```cpp
|
||||
vector< string >::iterator it = curFiles.begin();
|
||||
|
||||
while(it != curFiles.end()) {
|
||||
if(something) {
|
||||
it = curFiles.erase(it);
|
||||
} else ++it;
|
||||
}
|
||||
```
|
||||
|
||||
## Освобождение памяти вектора:
|
||||
|
||||
```cpp
|
||||
struct delete_ptr {
|
||||
template <typename P>
|
||||
void operator () (P p) {
|
||||
delete p;
|
||||
}
|
||||
};
|
||||
|
||||
std::for_each(myvector.begin(), myvector.end(), delete_ptr());
|
||||
myvector.clear();
|
||||
```
|
||||
|
||||
## Построковое чтение файла:
|
||||
|
||||
```c
|
||||
const char filename[] = "file.txt";
|
||||
FILE *file = fopen(filename, "r");
|
||||
if (file != NULL) {
|
||||
char line[128];
|
||||
while (fgets(line, sizeof line, file) != NULL)
|
||||
{
|
||||
fputs(line, stdout);
|
||||
}
|
||||
fclose(file);
|
||||
}
|
||||
```
|
||||
|
||||
## OpenGL, рисование цветных прямоугольников:
|
||||
|
||||
```cpp
|
||||
void drawRect(int x1, int y1, int x2, int y2, int color) {
|
||||
float alpha = (float) (color >> 24 & 255) / 255.0F;
|
||||
float red = (float) (color >> 16 & 255) / 255.0F;
|
||||
float green = (float) (color >> 8 & 255) / 255.0F;
|
||||
float blue = (float) (color & 255) / 255.0F;
|
||||
glColor4f(red, green, blue, alpha);
|
||||
glBegin(GL_QUADS);
|
||||
glVertex3f(x1, y2, 0.0F);
|
||||
glVertex3f(x2, y2, 0.0F);
|
||||
glVertex3f(x2, y1, 0.0F);
|
||||
glVertex3f(x1, y1, 0.0F);
|
||||
glEnd();
|
||||
}
|
||||
|
||||
void drawRectAt(int x, int y, int width, int height, int color) {
|
||||
drawRect(x, y, x + width, x + height, color);
|
||||
}
|
||||
|
||||
void drawPixel(int x, int y, int color) {
|
||||
drawRect(x, y, x + 1, y + 1, color);
|
||||
}
|
||||
```
|
||||
|
||||
## Количество дней в месяце (с учётом високостного года):
|
||||
|
||||
```c
|
||||
int get_month_days(int year, int month){
|
||||
if (month == 4 || month == 6 || month == 9 || month == 11){
|
||||
return 30;
|
||||
} else if (month == 2) {
|
||||
return ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) ? 29 : 28;
|
||||
} else return 31;
|
||||
}
|
||||
```
|
BIN
content/other/cheatsheet/miniature.jpg
Normal file
After Width: | Height: | Size: 6.2 KiB |
12
content/other/cleanup-open-with/index.md
Normal file
@ -0,0 +1,12 @@
|
||||
---
|
||||
title: "Удаление программ из меню "
|
||||
categories: ["misc", "archive"]
|
||||
date: 2018-07-03T00:00:00+03:00
|
||||
draft: false
|
||||
---
|
||||
|
||||
|
||||
<!--more-->
|
||||
|
||||
1. regedit.exe -> __HKEY\_CLASSES\_ROOT/Applications__
|
||||
2. Удалить лишнее
|
BIN
content/other/device-manuals/Cameron_URC-4020.jpg
Normal file
After Width: | Height: | Size: 56 KiB |
BIN
content/other/device-manuals/Cameron_URC-4020.pdf
Normal file
17
content/other/device-manuals/index.md
Normal file
@ -0,0 +1,17 @@
|
||||
---
|
||||
title: "Инструкции от устройств"
|
||||
categories: ["misc", "archive"]
|
||||
date: 2020-08-19T00:00:00+03:00
|
||||
draft: false
|
||||
featured_image: miniature.jpg
|
||||
---
|
||||
|
||||
Отсканированные инструкции от различных устройств.
|
||||
|
||||
<!--more-->
|
||||
|
||||
### Универсальный пульт Maxmedia Сameron URC-4020
|
||||
|
||||
![Cameron_URC-4020](Cameron_URC-4020.jpg)
|
||||
|
||||
[Cameron_URC-4020.pdf](Cameron_URC-4020.pdf)
|
BIN
content/other/device-manuals/miniature.jpg
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
content/other/ic-dumps/16AT004_B.jpg
Normal file
After Width: | Height: | Size: 3.5 MiB |
BIN
content/other/ic-dumps/16AT004_F.jpg
Normal file
After Width: | Height: | Size: 3.5 MiB |
BIN
content/other/ic-dumps/MX25L6405@Sunny_pnl_LC490DUY.zip
Normal file
BIN
content/other/ic-dumps/bn41-01795a-25q40.zip
Normal file
37
content/other/ic-dumps/index.md
Normal file
@ -0,0 +1,37 @@
|
||||
---
|
||||
title: "Дампы"
|
||||
categories: ["misc", "archive"]
|
||||
date: 2019-12-03T00:00:00+03:00
|
||||
draft: false
|
||||
featured_image: miniature.jpg
|
||||
---
|
||||
|
||||
|
||||
Различные дампы микросхем энергонезависимой памяти, снятые с рабочей техники
|
||||
|
||||
<!--more-->
|
||||
|
||||
## Телевизоры
|
||||
|
||||
### Samsung bn41-01795a
|
||||
|
||||
Чип 25Q40
|
||||
|
||||
[bn41-01795a-25q40.zip](bn41-01795a-25q40.zip)
|
||||
|
||||
### SUNNY SN049DLD
|
||||
|
||||
Чип памяти 25Q64
|
||||
|
||||
Плата:
|
||||
|
||||
![|300](16AT004_F.jpg) ![|300](16AT004_B.jpg)
|
||||
|
||||
[MX25L6405@Sunny_pnl_LC490DUY.zip](MX25L6405@Sunny_pnl_LC490DUY.zip)
|
||||
|
||||
Дамп взят [отсюда](https://www.amwajsat.net/showthread.php?t=5098). Успешно протестирован, язык французский.
|
||||
|
||||
## BIOS
|
||||
|
||||
...
|
||||
|
BIN
content/other/ic-dumps/miniature.jpg
Normal file
After Width: | Height: | Size: 5.6 KiB |
BIN
content/other/logic-ic/4001.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
content/other/logic-ic/4001_s.png
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
content/other/logic-ic/4001_single.png
Normal file
After Width: | Height: | Size: 9.0 KiB |
BIN
content/other/logic-ic/4049.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
content/other/logic-ic/4049_s.png
Normal file
After Width: | Height: | Size: 35 KiB |
BIN
content/other/logic-ic/4049_single.png
Normal file
After Width: | Height: | Size: 7.0 KiB |
BIN
content/other/logic-ic/4069.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
content/other/logic-ic/4069_s.png
Normal file
After Width: | Height: | Size: 39 KiB |
BIN
content/other/logic-ic/4069_single.png
Normal file
After Width: | Height: | Size: 7.8 KiB |
BIN
content/other/logic-ic/4502.png
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
content/other/logic-ic/4502_s.png
Normal file
After Width: | Height: | Size: 74 KiB |
BIN
content/other/logic-ic/4502_single.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
content/other/logic-ic/and.png
Normal file
After Width: | Height: | Size: 247 B |
190
content/other/logic-ic/index.md
Normal file
@ -0,0 +1,190 @@
|
||||
---
|
||||
title: "Современные логические элементы"
|
||||
categories: ["misc", "archive"]
|
||||
date: 2016-06-30T00:00:00+03:00
|
||||
draft: true
|
||||
featured_image: miniature.jpg
|
||||
---
|
||||
|
||||
|
||||
Сборки логических элементов, которые можно найти практически в любом радиомагазине.<!--more-->
|
||||
|
||||
> :warning: Статья не закончена. Когда-нибудь она будет доработана.
|
||||
|
||||
|
||||
**Vss** - катод <span style="color: #3366ff;">**(-)**</span>
|
||||
|
||||
**Vdd** - анод <span style="color: #ff0000;">**(+)**</span>
|
||||
|
||||
|
||||
|
||||
<h3 style="text-align: center;">НЕ (NOT)</h3>
|
||||
|
||||
<h3 style="text-align: center;">![nodeco:НЕ|](not.png)</h3>
|
||||
|
||||
<table border="1" cellpadding="5" style="border-color: #000000; border-width: 1px;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="text-align: center;">Название</td>
|
||||
<td style="text-align: center;">Описание</td>
|
||||
<td style="text-align: center;">Структура</td>
|
||||
<td style="text-align: center;">Распиновка</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p style="text-align: center;"><strong>4069</strong></p>
|
||||
</td>
|
||||
<td style="text-align: center;">6 логических элементов НЕ</td>
|
||||
<td>
|
||||
<p>![|100](4069_s.png)</p>
|
||||
<p>![|100](4069_single.png)</p>
|
||||
</td>
|
||||
<td>![|200](4069.png)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: center;"><strong>4049</strong></td>
|
||||
<td style="text-align: center;">6 логических элементов НЕ</td>
|
||||
<td style="text-align: center;">
|
||||
<p>![|100](4049_s.png)</p>
|
||||
<p>![|100](4049_single.png)</p>
|
||||
</td>
|
||||
<td style="text-align: center;">![|200](4049.png)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: center;">
|
||||
<p><strong>4502</strong></p>
|
||||
</td>
|
||||
<td style="text-align: center;"><span>6 логических элементов НЕ с блокировкой и запретом</span></td>
|
||||
<td style="text-align: center;">
|
||||
<p>![|100](4502_s.png)</p>
|
||||
<p>![|100](4502_single.png)</p>
|
||||
</td>
|
||||
<td style="text-align: center;">![|200](4502.png)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p style="text-align: center;"></p>
|
||||
|
||||
<p style="text-align: center;"></p>
|
||||
|
||||
<h3 style="text-align: center;">ИЛИ (OR)</h3>
|
||||
|
||||
<p style="text-align: center;">![nodeco:ИЛИ|](or.png)</p>
|
||||
|
||||
<p style="text-align: center;"></p>
|
||||
|
||||
<table border="1" cellpadding="5" style="border-color: #000000; border-width: 1px;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="text-align: center;"><span style="color: #ff0000;">Название</span></td>
|
||||
<td style="text-align: center;">Описание</td>
|
||||
<td style="text-align: center;">Структура</td>
|
||||
<td style="text-align: center;">Распиновка</td>
|
||||
<td style="text-align: center;">Схема ячейки</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p style="text-align: center;"><strong>4069</strong></p>
|
||||
</td>
|
||||
<td style="text-align: center;">6 логических элементов НЕ</td>
|
||||
<td>
|
||||
<p>![|100](4069_s.png)</p>
|
||||
<p>![|100](4049_single.png)</p>
|
||||
</td>
|
||||
<td>![|200](4069.png)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td style="text-align: center;"></td>
|
||||
<td style="text-align: center;"></td>
|
||||
<td style="text-align: center;"></td>
|
||||
<td style="text-align: center;"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p style="text-align: center;"></p>
|
||||
|
||||
<h3 style="text-align: center;">ИЛИ-НЕ (NOR)</h3>
|
||||
|
||||
<p style="text-align: center;">![nodeco:ИЛИ-НЕ|](nor.png)</p>
|
||||
|
||||
<p style="text-align: center;"></p>
|
||||
|
||||
<table border="1" cellpadding="5" style="border-color: #000000; border-width: 1px;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Название</td>
|
||||
<td style="text-align: center;">Описание</td>
|
||||
<td style="text-align: center;">Структура</td>
|
||||
<td style="text-align: center;">Распиновка</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p style="text-align: center;"><strong>4001</strong></p>
|
||||
</td>
|
||||
<td style="text-align: center;">
|
||||
<p align="center">4 логических элемента ИЛИ-НЕ</p>
|
||||
</td>
|
||||
<td>![|100](4001_s.png)
|
||||
<p>![|100](4001_single.png)</p>
|
||||
</td>
|
||||
<td>![|200](4001.png)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td style="text-align: center;"></td>
|
||||
<td style="text-align: center;"></td>
|
||||
<td style="text-align: center;"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p style="text-align: center;"></p>
|
||||
|
||||
<h3 style="text-align: center;">И (AND)</h3>
|
||||
|
||||
<p style="text-align: center;">![nodeco:И|](and.png)</p>
|
||||
|
||||
<p style="text-align: center;"></p>
|
||||
|
||||
<table border="1" cellpadding="5" style="border-color: #000000; border-width: 1px;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="text-align: center;"><span style="color: #ff0000;">Название</span></td>
|
||||
<td style="text-align: center;">Описание</td>
|
||||
<td style="text-align: center;">Структура</td>
|
||||
<td style="text-align: center;">Распиновка</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p style="text-align: center;"><strong>4069</strong></p>
|
||||
</td>
|
||||
<td style="text-align: center;">6 логических элементов НЕ</td>
|
||||
<td>![|100](4069_s.png)
|
||||
<p>![|100](4049_single.png)</p>
|
||||
</td>
|
||||
<td>![|200](4069.png)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td style="text-align: center;"></td>
|
||||
<td style="text-align: center;"></td>
|
||||
<td style="text-align: center;"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p style="text-align: center;"></p>
|
||||
|
||||
<h3 style="text-align: center;">И-НЕ (NAND)</h3>
|
||||
|
||||
<p style="text-align: center;">![nodeco:И-НЕ|](nand.png)</p>
|
||||
|
||||
<p style="text-align: center;"></p>
|
||||
|
||||
| Название | Описание | Структура | Распиновка |
|
||||
|----------|---------------------------|----------------------------------------------|-------------------|
|
||||
| 4069 | 6 логических элементов НЕ | ![100](4069_s.png) ![100](4049_single.png) | ![|200](4069.png) |
|
BIN
content/other/logic-ic/miniature.jpg
Normal file
After Width: | Height: | Size: 5.0 KiB |
BIN
content/other/logic-ic/nand.png
Normal file
After Width: | Height: | Size: 265 B |
BIN
content/other/logic-ic/nor.png
Normal file
After Width: | Height: | Size: 311 B |
BIN
content/other/logic-ic/not.png
Normal file
After Width: | Height: | Size: 262 B |
BIN
content/other/logic-ic/or.png
Normal file
After Width: | Height: | Size: 302 B |
256
content/other/markdown-test/index.md
Normal file
@ -0,0 +1,256 @@
|
||||
---
|
||||
title: "Markdown test"
|
||||
date: 2022-12-24T14:16:25+03:00
|
||||
draft: false
|
||||
categories: ["misc"]
|
||||
---
|
||||
|
||||
Тут проверка
|
||||
|
||||
<!--more-->
|
||||
|
||||
---
|
||||
__Advertisement :)__
|
||||
|
||||
- __[pica](https://nodeca.github.io/pica/demo/)__ - high quality and fast image
|
||||
resize in browser.
|
||||
- __[babelfish](https://github.com/nodeca/babelfish/)__ - developer friendly
|
||||
i18n with plurals support and easy syntax.
|
||||
|
||||
You will like those projects!
|
||||
|
||||
---
|
||||
|
||||
# h1 Heading 8-)
|
||||
## h2 Heading
|
||||
### h3 Heading
|
||||
#### h4 Heading
|
||||
##### h5 Heading
|
||||
###### h6 Heading
|
||||
|
||||
|
||||
## Horizontal Rules
|
||||
|
||||
___
|
||||
|
||||
---
|
||||
|
||||
***
|
||||
|
||||
|
||||
## Typographic replacements
|
||||
|
||||
Enable typographer option to see result.
|
||||
|
||||
(c) (C) (r) (R) (tm) (TM) (p) (P) +-
|
||||
|
||||
test.. test... test..... test?..... test!....
|
||||
|
||||
!!!!!! ???? ,, -- ---
|
||||
|
||||
"Smartypants, double quotes" and 'single quotes'
|
||||
|
||||
|
||||
## Emphasis
|
||||
|
||||
**This is bold text**
|
||||
|
||||
__This is bold text__
|
||||
|
||||
*This is italic text*
|
||||
|
||||
_This is italic text_
|
||||
|
||||
~~Strikethrough~~
|
||||
|
||||
|
||||
## Blockquotes
|
||||
|
||||
|
||||
> Blockquotes can also be nested...
|
||||
>> ...by using additional greater-than signs right next to each other...
|
||||
> > > ...or with spaces between arrows.
|
||||
|
||||
|
||||
## Lists
|
||||
|
||||
Unordered
|
||||
|
||||
+ Create a list by starting a line with `+`, `-`, or `*`
|
||||
+ Sub-lists are made by indenting 2 spaces:
|
||||
- Marker character change forces new list start:
|
||||
* Ac tristique libero volutpat at
|
||||
+ Facilisis in pretium nisl aliquet
|
||||
- Nulla volutpat aliquam velit
|
||||
+ Very easy!
|
||||
|
||||
Ordered
|
||||
|
||||
1. Lorem ipsum dolor sit amet
|
||||
2. Consectetur adipiscing elit
|
||||
3. Integer molestie lorem at massa
|
||||
|
||||
|
||||
1. You can use sequential numbers...
|
||||
1. ...or keep all the numbers as `1.`
|
||||
|
||||
Start numbering with offset:
|
||||
|
||||
57. foo
|
||||
1. bar
|
||||
|
||||
|
||||
## Code
|
||||
|
||||
Inline `code`
|
||||
|
||||
Indented code
|
||||
|
||||
// Some comments
|
||||
line 1 of code
|
||||
line 2 of code
|
||||
line 3 of code
|
||||
|
||||
|
||||
Block code "fences"
|
||||
|
||||
```
|
||||
Sample text here...
|
||||
```
|
||||
|
||||
Syntax highlighting
|
||||
|
||||
``` js
|
||||
var foo = function (bar) {
|
||||
return bar++;
|
||||
};
|
||||
|
||||
console.log(foo(5));
|
||||
```
|
||||
|
||||
## Tables
|
||||
|
||||
| Option | Description |
|
||||
| ------ | ----------- |
|
||||
| data | path to data files to supply the data that will be passed into templates. |
|
||||
| engine | engine to be used for processing templates. Handlebars is the default. |
|
||||
| ext | extension to be used for dest files. |
|
||||
|
||||
Right aligned columns
|
||||
|
||||
| Option | Description |
|
||||
| ------:| -----------:|
|
||||
| data | path to data files to supply the data that will be passed into templates. |
|
||||
| engine | engine to be used for processing templates. Handlebars is the default. |
|
||||
| ext | extension to be used for dest files. |
|
||||
|
||||
|
||||
## Links
|
||||
|
||||
[link text](http://dev.nodeca.com)
|
||||
|
||||
[link with title](http://nodeca.github.io/pica/demo/ "title text!")
|
||||
|
||||
Autoconverted link https://github.com/nodeca/pica (enable linkify to see)
|
||||
|
||||
|
||||
## Images
|
||||
|
||||
![Minion](https://octodex.github.com/images/minion.png)
|
||||
![Stormtroopocat](https://octodex.github.com/images/stormtroopocat.jpg "The Stormtroopocat")
|
||||
|
||||
Like links, Images also have a footnote style syntax
|
||||
|
||||
![Alt text][id]
|
||||
|
||||
With a reference later in the document defining the URL location:
|
||||
|
||||
[id]: https://octodex.github.com/images/dojocat.jpg "The Dojocat"
|
||||
|
||||
|
||||
## Plugins
|
||||
|
||||
The killer feature of `markdown-it` is very effective support of
|
||||
[syntax plugins](https://www.npmjs.org/browse/keyword/markdown-it-plugin).
|
||||
|
||||
|
||||
### [Emojies](https://github.com/markdown-it/markdown-it-emoji)
|
||||
|
||||
> Classic markup: :wink: :crush: :cry: :tear: :laughing: :yum:
|
||||
>
|
||||
> Shortcuts (emoticons): :-) :-( 8-) ;)
|
||||
|
||||
see [how to change output](https://github.com/markdown-it/markdown-it-emoji#change-output) with twemoji.
|
||||
|
||||
|
||||
### [Subscript](https://github.com/markdown-it/markdown-it-sub) / [Superscript](https://github.com/markdown-it/markdown-it-sup)
|
||||
|
||||
- 19^th^
|
||||
- H~2~O
|
||||
|
||||
|
||||
### [\<ins>](https://github.com/markdown-it/markdown-it-ins)
|
||||
|
||||
++Inserted text++
|
||||
|
||||
|
||||
### [\<mark>](https://github.com/markdown-it/markdown-it-mark)
|
||||
|
||||
==Marked text==
|
||||
|
||||
|
||||
### [Footnotes](https://github.com/markdown-it/markdown-it-footnote)
|
||||
|
||||
Footnote 1 link[^first].
|
||||
|
||||
Footnote 2 link[^second].
|
||||
|
||||
Inline footnote^[Text of inline footnote] definition.
|
||||
|
||||
Duplicated footnote reference[^second].
|
||||
|
||||
[^first]: Footnote **can have markup**
|
||||
|
||||
and multiple paragraphs.
|
||||
|
||||
[^second]: Footnote text.
|
||||
|
||||
|
||||
### [Definition lists](https://github.com/markdown-it/markdown-it-deflist)
|
||||
|
||||
Term 1
|
||||
|
||||
: Definition 1
|
||||
with lazy continuation.
|
||||
|
||||
Term 2 with *inline markup*
|
||||
|
||||
: Definition 2
|
||||
|
||||
{ some code, part of Definition 2 }
|
||||
|
||||
Third paragraph of definition 2.
|
||||
|
||||
_Compact style:_
|
||||
|
||||
Term 1
|
||||
~ Definition 1
|
||||
|
||||
Term 2
|
||||
~ Definition 2a
|
||||
~ Definition 2b
|
||||
|
||||
|
||||
### [Abbreviations](https://github.com/markdown-it/markdown-it-abbr)
|
||||
|
||||
This is HTML abbreviation example.
|
||||
|
||||
It converts "HTML", but keep intact partial entries like "xxxHTMLyyy" and so on.
|
||||
|
||||
*[HTML]: Hyper Text Markup Language
|
||||
|
||||
### [Custom containers](https://github.com/markdown-it/markdown-it-container)
|
||||
|
||||
::: warning
|
||||
*here be dragons*
|
||||
:::
|
BIN
content/other/mingw-libs/curl.7z
Normal file
BIN
content/other/mingw-libs/fltk.zip
Normal file
37
content/other/mingw-libs/index.md
Normal file
@ -0,0 +1,37 @@
|
||||
---
|
||||
title: "Бибилотеки MinGW"
|
||||
categories: ["cpp", "archive"]
|
||||
date: 2016-02-19T00:00:00+03:00
|
||||
draft: false
|
||||
featured_image: miniature.jpg
|
||||
---
|
||||
|
||||
|
||||
Тут находятся некоторые, уже откомпилированные мной, библиотеки для MinGW.
|
||||
|
||||
<!--more-->
|
||||
|
||||
|
||||
### PNG
|
||||
|
||||
[png1621.7z](png1621.7z)
|
||||
|
||||
### SSL
|
||||
|
||||
[ssl.7z](ssl.7z)
|
||||
|
||||
### FLTK
|
||||
|
||||
[fltk.zip](fltk.zip)
|
||||
|
||||
### Zlib
|
||||
|
||||
[zlib128.7z](zlib128.7z)
|
||||
|
||||
### Curl
|
||||
|
||||
[curl.7z](curl.7z)
|
||||
|
||||
### SQLite
|
||||
|
||||
[sqlite.7z](sqlite.7z)
|
BIN
content/other/mingw-libs/miniature.jpg
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
content/other/mingw-libs/png1621.7z
Normal file
BIN
content/other/mingw-libs/sqlite.7z
Normal file
BIN
content/other/mingw-libs/ssl.7z
Normal file
BIN
content/other/mingw-libs/zlib128.7z
Normal file
BIN
content/other/pinouts/i2c_lcd_pinout.jpg
Normal file
After Width: | Height: | Size: 197 KiB |
21
content/other/pinouts/index.md
Normal file
@ -0,0 +1,21 @@
|
||||
---
|
||||
title: "Распиновки"
|
||||
categories: ["misc", "archive"]
|
||||
date: 2018-09-07T00:00:00+03:00
|
||||
draft: false
|
||||
---
|
||||
|
||||
|
||||
Разнообразные найденные или выясненные распиновки
|
||||
|
||||
<!--more-->
|
||||
|
||||
|
||||
Распиновка модуля i2c - LCD
|
||||
|
||||
i2c LCD adapter pinout
|
||||
|
||||
(PCF8574T)
|
||||
|
||||
![|547](i2c_lcd_pinout.jpg)
|
||||
|
BIN
content/other/soft/ft232_2814.zip
Normal file
BIN
content/other/soft/ftdi.png
Normal file
After Width: | Height: | Size: 2.6 KiB |
33
content/other/soft/index.md
Normal file
@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Софт"
|
||||
categories: ["misc", "archive"]
|
||||
date: 2015-08-13T00:00:00+03:00
|
||||
draft: false
|
||||
featured_image: miniature.jpg
|
||||
---
|
||||
|
||||
|
||||
Различный софт.
|
||||
|
||||
<!--more-->
|
||||
|
||||
---
|
||||
|
||||
### LCDPict
|
||||
|
||||
![lcd](lcd.png)
|
||||
|
||||
Редактор изображений и символов для LCD экранов
|
||||
|
||||
[lcdpict.zip](lcdpict.zip)
|
||||
|
||||
---
|
||||
|
||||
### Драйвер FTDI FT232 2.8.14
|
||||
|
||||
![ftdi](ftdi.png)
|
||||
|
||||
Подходит для китайских копий FT232
|
||||
|
||||
[ft232_2814.zip](ft232_2814.zip)
|
||||
|
BIN
content/other/soft/lcd.png
Normal file
After Width: | Height: | Size: 2.6 KiB |
BIN
content/other/soft/lcd_cloud.png
Normal file
After Width: | Height: | Size: 6.5 KiB |
BIN
content/other/soft/lcdpict.png
Normal file
After Width: | Height: | Size: 9.6 KiB |
BIN
content/other/soft/lcdpict.zip
Normal file
BIN
content/other/soft/miniature.jpg
Normal file
After Width: | Height: | Size: 5.6 KiB |
217
content/other/stm32f1x-makefile/index.md
Normal file
@ -0,0 +1,217 @@
|
||||
---
|
||||
title: "Makefile для STM32F103"
|
||||
categories: ["mcu", "archive"]
|
||||
date: 2017-02-26T00:00:00+03:00
|
||||
draft: false
|
||||
featured_image: miniature.jpg
|
||||
---
|
||||
|
||||
|
||||
Почти что в первый раз писал. Прошу простить за убогость и SPL. Всё это убирается. Под linux не проверялось.
|
||||
|
||||
<!--more-->
|
||||
|
||||
Рабочий проект: [stm32f103make.zip](stm32f103make.zip)
|
||||
|
||||
|
||||
```makefile
|
||||
CXX = arm-none-eabi-g++
|
||||
CC = arm-none-eabi-gcc
|
||||
LD = arm-none-eabi-gcc
|
||||
OBJCOPY = arm-none-eabi-objcopy
|
||||
SIZE = arm-none-eabi-size
|
||||
STFLASH = st-flash
|
||||
OPENOCD = openocd
|
||||
STUTIL = st-flash
|
||||
|
||||
|
||||
OUTPUT_DIR = bin
|
||||
OBJ_DIR = obj
|
||||
|
||||
TARGET_NAME = led
|
||||
TARGET_BINARY = $(TARGET_NAME).elf
|
||||
TARGET_HEX = $(TARGET_NAME).hex
|
||||
|
||||
vpath %.c ./src
|
||||
|
||||
SOURCES = \
|
||||
main.c
|
||||
|
||||
LDFLAGS_DEBUG =
|
||||
CDFLAGS_DEBUG = -g3 -O0
|
||||
|
||||
LDFLAGS_RELEASE =
|
||||
CDFLAGS_RELEASE = -O2
|
||||
|
||||
CFLAGS = -Wall \
|
||||
-mcpu=cortex-m3 \
|
||||
-mthumb \
|
||||
-D__HEAP_SIZE=0x0000 \
|
||||
-D__STACK_SIZE=0x0100 \
|
||||
-mfloat-abi=soft \
|
||||
-fno-strict-aliasing \
|
||||
-fdata-sections \
|
||||
-ffunction-sections \
|
||||
-DSTM32F103C8 \
|
||||
-DSTM32F10X_MD \
|
||||
-DUSE_STDPERIPH_DRIVER
|
||||
|
||||
TARGET = $(OUTPUT_DIR)/$(TARGET_BINARY)
|
||||
|
||||
LIBS = -lm
|
||||
|
||||
LDFLAGS = \
|
||||
--specs=nosys.specs \
|
||||
--specs=nano.specs \
|
||||
-mcpu=cortex-m3 \
|
||||
-mthumb \
|
||||
-Wl,--defsym=__HEAP_SIZE=0x0000 \
|
||||
-Wl,--defsym=__STACK_SIZE=0x0100 \
|
||||
-mfloat-abi=soft \
|
||||
-fno-strict-aliasing \
|
||||
-fdata-sections \
|
||||
-ffunction-sections \
|
||||
-Wl,--gc-sections \
|
||||
-Wl,-script="./hardware/stm32f103c8_flash.ld" \
|
||||
-Wl,-Map=$(TARGET).map
|
||||
#-u _printf_float
|
||||
|
||||
INCLUDES = \
|
||||
-I. \
|
||||
-I./include \
|
||||
-I./hardware/include \
|
||||
-I./hardware/include/cmsis \
|
||||
-I./hardware/SPL/include
|
||||
|
||||
STARUPFILE = hardware/src/startup_stm32f10x_md.S
|
||||
|
||||
SOURCES_SPL = \
|
||||
stm32f10x_rcc.c \
|
||||
stm32f10x_gpio.c \
|
||||
stm32f10x_dma.c
|
||||
|
||||
#stm32f10x_crc.c \
|
||||
#stm32f10x_flash.c \
|
||||
#stm32f10x_pwr.c \
|
||||
#stm32f10x_tim.c \
|
||||
#stm32f10x_adc.c \
|
||||
#stm32f10x_dac.c \
|
||||
#stm32f10x_fsmc.c \
|
||||
#stm32f10x_usart.c \
|
||||
#stm32f10x_bkp.c \
|
||||
#stm32f10x_dbgmcu.c \
|
||||
#stm32f10x_rtc.c \
|
||||
#stm32f10x_wwdg.c \
|
||||
#stm32f10x_can.c \
|
||||
#stm32f10x_i2c.c \
|
||||
#stm32f10x_sdio.c \
|
||||
#stm32f10x_cec.c \
|
||||
#stm32f10x_exti.c \
|
||||
#stm32f10x_iwdg.c \
|
||||
#stm32f10x_spi.c \
|
||||
#misc.c
|
||||
|
||||
################################################################
|
||||
|
||||
|
||||
SOURCES += $(addprefix hardware/SPL/src/, $(SOURCES_SPL))
|
||||
SOURCES += hardware/src/system_stm32f10x.c
|
||||
|
||||
HEX = $(OUTPUT_DIR)/$(TARGET_HEX)
|
||||
|
||||
STARTUPOBJ = $(notdir $(STARUPFILE))
|
||||
STARTUPOBJ := $(patsubst %.S, $(OBJ_DIR)/%.S.o, $(STARTUPOBJ))
|
||||
|
||||
OBJECTS = $(patsubst %, $(OBJ_DIR)/%.o, $(SOURCES))
|
||||
OBJECTS += $(STARTUPOBJ)
|
||||
|
||||
DEPS = $(OBJECTS:.o=.d)
|
||||
|
||||
|
||||
|
||||
all: release
|
||||
|
||||
release: LDFLAGS+=$(LDFLAGS_RELEASE)
|
||||
release: CFLAGS+=$(CDFLAGS_RELEASE)
|
||||
release: _firmware
|
||||
|
||||
debug: LDFLAGS+=$(LDFLAGS_DEBUG)
|
||||
debug: CFLAGS+=$(CDFLAGS_DEBUG)
|
||||
debug: _firmware
|
||||
|
||||
|
||||
_firmware: $(TARGET) $(HEX)
|
||||
|
||||
|
||||
$(TARGET): $(OBJECTS) | $(OUTPUT_DIR) $(OBJ_DIR)
|
||||
$(LD) $(LDFLAGS) -o $@ $(OBJECTS) $(LIBS)
|
||||
$(SIZE) --format=berkeley $(TARGET)
|
||||
|
||||
obj/%.cpp.o: %.cpp
|
||||
ifeq ($(OS), Windows_NT)
|
||||
$(eval dirname=$(subst /,\\,$(dir $@)))
|
||||
@ if NOT EXIST $(dirname) mkdir $(dirname)
|
||||
else
|
||||
@mkdir -p $(dir $@) $(TO_NULL)
|
||||
endif
|
||||
$(CXX) -c -MMD -MP $(CFLAGS) $(INCLUDES) $< -o $@
|
||||
|
||||
obj/%.c.o: %.c
|
||||
ifeq ($(OS), Windows_NT)
|
||||
$(eval dirname=$(subst /,\\,$(dir $@)))
|
||||
@ if NOT EXIST $(dirname) mkdir $(dirname)
|
||||
else
|
||||
@mkdir -p $(dir $@) $(TO_NULL)
|
||||
endif
|
||||
$(CC) -c -MMD -MP $(CFLAGS) $(INCLUDES) $< -o $@
|
||||
|
||||
$(STARTUPOBJ):
|
||||
$(CC) -c -MMD -MP $(CFLAGS) $(INCLUDES) $(STARUPFILE) -o $(STARTUPOBJ)
|
||||
|
||||
$(HEX): $(TARGET)
|
||||
$(OBJCOPY) -O ihex $(TARGET) $(HEX)
|
||||
|
||||
$(OUTPUT_DIR):
|
||||
@mkdir $(OUTPUT_DIR)
|
||||
|
||||
$(OBJ_DIR):
|
||||
@mkdir $(OBJ_DIR)
|
||||
|
||||
_size: $(TARGET)
|
||||
$(SIZE) --format=berkeley $(TARGET)
|
||||
|
||||
|
||||
flash: flash-ocd
|
||||
|
||||
flash-stutil:
|
||||
$(STFLASH) --format ihex write $(HEX)
|
||||
|
||||
flash-ocd:
|
||||
$(OPENOCD) -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c "program $(TARGET) verify reset exit"
|
||||
|
||||
srclist:
|
||||
@echo $(SOURCES)
|
||||
|
||||
objlist:
|
||||
@echo $(OBJECTS)
|
||||
|
||||
clean:
|
||||
|
||||
ifeq ($(OS), Windows_NT)
|
||||
-del $(subst /,\\,$(OBJECTS))
|
||||
-del $(subst /,\\,$(DEPS))
|
||||
-rmdir /S /Q $(OBJ_DIR)
|
||||
-del /Q /F $(OUTPUT_DIR)\\$(TARGET_BINARY)
|
||||
-del /Q /F $(OUTPUT_DIR)\\$(TARGET_BINARY).map
|
||||
-del /Q /F $(OUTPUT_DIR)\\$(TARGET_HEX)
|
||||
else
|
||||
-rm -f $(OBJECTS)
|
||||
-rm -f $(DEPS)
|
||||
-rm -rf $(OBJ_DIR)
|
||||
-rm -f $(OUTPUT_DIR)/$(TARGET_BINARY)
|
||||
-rm -f $(OUTPUT_DIR)/$(TARGET_BINARY).map
|
||||
-rm -f $(OUTPUT_DIR)/$(TARGET_HEX)
|
||||
endif
|
||||
|
||||
-include $(DEPS)
|
||||
```
|
BIN
content/other/stm32f1x-makefile/miniature.jpg
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
content/other/stm32f1x-makefile/stm32f103make.zip
Normal file
18
content/other/thanks/index.md
Normal file
@ -0,0 +1,18 @@
|
||||
---
|
||||
title: "Спасибы"
|
||||
categories: ["misc", "pinned"]
|
||||
date: 2016-05-14T00:00:00+03:00
|
||||
draft: false
|
||||
featured_image: miniature.jpg
|
||||
---
|
||||
|
||||
Нечеловеческое спасибо за всё следующим людям:
|
||||
|
||||
* Иван Истомин ([Istom1n](https://vk.com/id9920588))
|
||||
* Кирилл Иванов
|
||||
* Игорь Окунский ([Clarity](https://vk.com/sundayclarity))
|
||||
* Игорь Водка ([Uhehesh](https://vk.com/id171249225))
|
||||
* Дмитрий Тычинин ([iMityan](https://vk.com/id88536880))
|
||||
* Даня Соломыкин ([CrazyClown](https://vk.com/id23105063))
|
||||
* Алексей Шалпегин (15432)
|
||||
* Валерия ([Mithriss](https://vk.com/id244743608))
|
BIN
content/other/thanks/miniature.jpg
Normal file
After Width: | Height: | Size: 5.8 KiB |
BIN
content/posts/avr-freq-meter/3d1.png
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
content/posts/avr-freq-meter/7seg-freq-corel.zip
Normal file
BIN
content/posts/avr-freq-meter/avr-7seg-freq-curse.docx
Normal file
BIN
content/posts/avr-freq-meter/compas1.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
content/posts/avr-freq-meter/compas2.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
content/posts/avr-freq-meter/compas3.png
Normal file
After Width: | Height: | Size: 7.0 KiB |
BIN
content/posts/avr-freq-meter/draft.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
content/posts/avr-freq-meter/freq-meter-KOMPAS.zip
Normal file
BIN
content/posts/avr-freq-meter/freq_sch.png
Normal file
After Width: | Height: | Size: 265 KiB |
239
content/posts/avr-freq-meter/index.md
Normal file
@ -0,0 +1,239 @@
|
||||
---
|
||||
title: "Простой частотомер на AVR - курсовая работа"
|
||||
categories: ["mcu", "archive"]
|
||||
date: 2015-08-16T00:00:00+03:00
|
||||
draft: true
|
||||
featured_image: miniature.jpg
|
||||
---
|
||||
|
||||
|
||||
Итак, пришло время время делать курсовые работы. Мне попалась тема "Частотомер с передачей данных по последовательному порту и динамической индикацией". Значит, будем использовать таймер, внешние прерывания и динамическую индикацию. Использовал семисегментный индикатор с четырьмя разрядами и общим анодом. Микроконтроллер выберем Atmega16. Именно с ним я не чувствовал дефицита ножек. Приступим.
|
||||
|
||||
<!--more-->
|
||||
|
||||
> :warning: Этот текст – древний стыд. Не нужно принимать его всерьёз. Сейчас бы такой бред не сделал.
|
||||
|
||||
Работа заключается в следующем: нужно спроектировать схему устройства, развести печатку, а также изготовить корпус для готового устройства. В КОМПАС 3D, разумеется.
|
||||
|
||||
Для начала нам нужно определиться как именно считать частоту. Я решил использовать таймер, тактированный часовым кварцем и засекать количество внешних прерываний за секунду. Прерывания использовал по нарастающему фронту. Возможно, я не прав, но, во благо, на железе собирать ничего не требуется.
|
||||
|
||||
Делаем всё в протеусе. Схема получилась такая:
|
||||
|
||||
![Схема|786](freq_sch.png)
|
||||
|
||||
Пишем программу. Микроконтроллер должен считать импульсы в секунду и выводить их на семисегментный индикатор. А также отдавать данные по UART.
|
||||
|
||||
main.h:
|
||||
```c
|
||||
#ifndef __MAIN_H_
|
||||
#define __MAIN_H_
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
typedef uint8_t byte;
|
||||
|
||||
byte buf[16];
|
||||
|
||||
uint32_t freq;
|
||||
uint32_t freq_max;
|
||||
uint32_t measure_buf;
|
||||
|
||||
// порт для сегментов
|
||||
#define SEGMENTS_DDR DDRA
|
||||
#define SEGMENTS_PORT PORTA
|
||||
|
||||
|
||||
// порт для разрядов
|
||||
#define DIGITS_DDR DDRC
|
||||
#define DIGITS_PORT PORTC
|
||||
|
||||
|
||||
#define SWITCH_TIME 45 // время между переключениями разрядов; чем меньше, тем меньше мерцает
|
||||
|
||||
#define INPUT 0x00
|
||||
#define OUTPUT 0xFF
|
||||
|
||||
|
||||
#define SYMBOLS_SIZE 11 // количество символов в таблице
|
||||
byte symbols[SYMBOLS_SIZE] = //состояния пинов для символов
|
||||
{
|
||||
0b00111111, // 0
|
||||
0b00000110, // 1
|
||||
0b01011011, // 2
|
||||
0b01001111, // 3
|
||||
0b01100110, // 4
|
||||
0b01101101, // 5
|
||||
0b01111101, // 6
|
||||
0b00000111, // 7
|
||||
0b01111111, // 8
|
||||
0b01101111, // 9
|
||||
0b10000000 // .
|
||||
};
|
||||
|
||||
int main(void);
|
||||
|
||||
void switchDigit(byte digit); // показать нужный разряд, остальные погасить; значения от 0 до 3
|
||||
void showDigit(byte number, bool dot); // вывести символ на разряд, с точкой или без; значения от 0 до SYMBOLS_SIZE
|
||||
void initTimer(); // инициализация таймера (для нас - часового)
|
||||
void initInterrupts(); //инициализация прерываний
|
||||
void initUART(); //инициализация последовательного порта
|
||||
void sendByte(byte b); //отправка байта по UART
|
||||
void sendString(byte *str); //отправка строки по UART
|
||||
|
||||
#endif //__MAIN_H_
|
||||
```
|
||||
|
||||
main.c:
|
||||
```c
|
||||
#include "main.h"
|
||||
#include <avr/io.h>
|
||||
#include <avr/interrupt.h>
|
||||
#include <util/delay.h>
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
int main(void) {
|
||||
SEGMENTS_DDR = OUTPUT; // настраиваем порты ввода-вывода
|
||||
DIGITS_DDR = OUTPUT;
|
||||
DIGITS_PORT = 0xFF;
|
||||
|
||||
initTimer();
|
||||
initInterrupts();
|
||||
initUART();
|
||||
|
||||
byte i;
|
||||
uint32_t num;
|
||||
|
||||
sprintf(buf, "? Stabilization...\r\n");
|
||||
sendString(buf);
|
||||
_delay_ms(100); // ожидаем стабилизации таймера
|
||||
sprintf(buf, "? Init finished!\r\n");
|
||||
sendString(buf);
|
||||
|
||||
while (1) {
|
||||
|
||||
num = freq > 9999 ? 9999 : freq;
|
||||
|
||||
for (i = 0; i < 4; ++i) { // перебираем все разряды, разбираем частоту на цифры
|
||||
switchDigit(i);
|
||||
switch (i) {
|
||||
case 0:
|
||||
showDigit((byte) ((num / 1000) % 10), false);
|
||||
break;
|
||||
case 1:
|
||||
showDigit((byte) ((num / 100) % 10), false);
|
||||
break;
|
||||
case 2:
|
||||
showDigit((byte) ((num / 10) % 10), false);
|
||||
break;
|
||||
case 3:
|
||||
showDigit(num % 10, false);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
_delay_ms(SWITCH_TIME);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
ISR(TIMER2_OVF_vect) { // прерывание таймера при переполнении
|
||||
freq = measure_buf;
|
||||
if( freq > freq_max) freq_max = freq;
|
||||
measure_buf = 0;
|
||||
|
||||
|
||||
sprintf(buf, "> Freq: %dHz, ", freq); // отправляем данные
|
||||
sendString(buf);
|
||||
sprintf(buf, "Max: %dHz\r\n", freq_max);
|
||||
sendString(buf);
|
||||
|
||||
|
||||
}
|
||||
|
||||
ISR(INT0_vect) { //внешнее прерывание
|
||||
measure_buf++;
|
||||
}
|
||||
|
||||
void showDigit(byte digit, bool dot) {
|
||||
SEGMENTS_PORT = ~symbols[digit > SYMBOLS_SIZE - 1 ? 10 : digit] | (dot ? symbols[10] : 0);
|
||||
}
|
||||
|
||||
void switchDigit(byte number) {
|
||||
DIGITS_PORT = number < 4 ? (byte) (1 << number) : 0x00;
|
||||
}
|
||||
|
||||
void initTimer() {
|
||||
ASSR |= _BV(AS2); // асинхронный режим, тактируемся от часового кварца
|
||||
TCCR2 = _BV(CS20) | _BV(CS22); //предделитель 128, одна секунда
|
||||
TIMSK |= _BV(TOIE2); // включаем таймер
|
||||
}
|
||||
|
||||
void initInterrupts() {
|
||||
MCUCR = (1 << ISC01) | (1 << ISC00); //прерывание по растущему форонту
|
||||
GICR = (1 << INT0); //включаем прерывание на INT0
|
||||
sei(); // разрешаем прерывания
|
||||
}
|
||||
|
||||
void initUART() {
|
||||
// выставляем скорость: 9600 при частоте 8МГц
|
||||
// UBRR=8000000/(16*9600)-1=51.0833, округляем = 51 (0x33)
|
||||
UBRRH = 0x00;
|
||||
UBRRL = 0x33;
|
||||
|
||||
// Разрешаем приём и передачу
|
||||
UCSRB = (1 << RXEN) | (1 << TXEN);
|
||||
UCSRB |= (1 << RXCIE);
|
||||
|
||||
// устанавливаем формат: 8 бит данных, 2 стоп бита
|
||||
UCSRC = (1 << URSEL) | (1 << USBS) | (3 << UCSZ0);
|
||||
}
|
||||
|
||||
void sendByte(byte b) {
|
||||
while ( !(UCSRA & (1<<UDRE)) ); // ожидаем завершения передачи
|
||||
UDR = b; // записываем байт в буфер
|
||||
}
|
||||
|
||||
void sendString(byte * str) {
|
||||
while (*str != 0) sendByte(*str++); // побайтно отправляем строку
|
||||
}
|
||||
```
|
||||
|
||||
Разводим печатку:
|
||||
|
||||
![|300](pcb.png)
|
||||
|
||||
Вот такую красоту можно понаблюдать:
|
||||
|
||||
![|300](3d1.png)
|
||||
|
||||
Результат:
|
||||
|
||||
![|226](pcb1.png)
|
||||
|
||||
Теперь самое главное - сделать корпус. Отталкиваться нужно от размера самой печатки. Делаем чертежи каждой части корпуса, потом варганим из них модели. Затем собираем всё воедино.
|
||||
|
||||
![|300](draft.png) ![|300](compas1.png)![|300](compas2.png) ![|300](compas3.png)
|
||||
|
||||
Три отверстия сзади для проводов: вход для сигнала, питание и UART. В прямоугольный вырез спереди вставляется семисегментный индикатор и шлейфом соединяется с печатной платой. Сама плата прикручивается маленькими саморезами/болтами. Крышка тоже.
|
||||
|
||||
##### Ссылки:
|
||||
|
||||
[Чертежи и модели в КОМПАС-3D](freq-meter-KOMPAS.zip)
|
||||
|
||||
[Чертежи в Corel Draw](7seg-freq-corel.zip)
|
||||
|
||||
[Сама курсовая работа (docx)](avr-7seg-freq-curse.docx)
|
||||
|
||||
[Внешние прерывания МК AVR (samou4ka.net)](http://samou4ka.net/page/vneshnie-preryvanija-mk-avr)
|
||||
|
||||
[Таймеры МК AVR (samou4ka.net)](http://samou4ka.net/page/tajmer-schetchik-mikrokontrollerov-avr)
|
||||
|
||||
[Асинхронный режим таймера AVR (easyelectronics.ru)](http://easyelectronics.ru/avr-uchebnyj-kurs-asinxronnyj-rezhim-tajmera.html)
|
||||
|
||||
[Самые простые часы на AVR (easyelectronics.ru)](http://we.easyelectronics.ru/antonluba/samye-prostye-chasy-na-avr.html)
|
||||
|
||||
[Работа с UART на примере ATmega16 (alex-exe.ru)](http://alex-exe.ru/radio/avr/avr-uart/)
|
BIN
content/posts/avr-freq-meter/miniature.jpg
Normal file
After Width: | Height: | Size: 4.8 KiB |
BIN
content/posts/avr-freq-meter/pcb.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
content/posts/avr-freq-meter/pcb1.png
Normal file
After Width: | Height: | Size: 6.0 KiB |
70
content/posts/avr-gcc-cvports/index.md
Normal file
@ -0,0 +1,70 @@
|
||||
---
|
||||
title: "Управление портами как в CodeVisionAvr"
|
||||
categories: ["mcu", "archive"]
|
||||
date: 2016-06-03T00:00:00+03:00
|
||||
draft: false
|
||||
featured_image: miniature.jpg
|
||||
---
|
||||
|
||||
|
||||
Наверное, многие, как и я, начинали обучение миру микроконтроллеров в такой замечательной среде программирования как CodeVisionAvr. И не спроста – компилятор предоставляет возможности, несколько упрощающие жизнь программисту. Одна из таких возможностей - обращение к конкретным ножкам определённого порта в явном виде.
|
||||
|
||||
<!--more-->
|
||||
|
||||
|
||||
Например, мы хотим включить ножку 5 порта C. В CVAvr это делается так:
|
||||
|
||||
```c
|
||||
PORTC.5 = 1;
|
||||
```
|
||||
|
||||
А в WinAvr (avr-gcc) это делается так (что более правильно, я не спорю, но менее комфортно):
|
||||
|
||||
```c
|
||||
PORTC |= _BV(5);
|
||||
```
|
||||
|
||||
И выключаем ту же ножку. CVAvr:
|
||||
|
||||
```c
|
||||
PORTC.5 = 0;
|
||||
```
|
||||
|
||||
А в WinAvr:
|
||||
|
||||
```c
|
||||
PORTC &= ~_BV(5);
|
||||
```
|
||||
|
||||
Не так наглядно, согласитесь? Так что попробуем добиться такого же вида обращения к портам как и в CVAvr.
|
||||
|
||||
Для этого нужно создать восьмибитную структуру:
|
||||
|
||||
```c
|
||||
struct port_byte {
|
||||
bool P0 : 1;
|
||||
bool P1 : 1;
|
||||
bool P2 : 1;
|
||||
bool P3 : 1;
|
||||
bool P4 : 1;
|
||||
bool P5 : 1;
|
||||
bool P6 : 1;
|
||||
bool P7 : 1;
|
||||
};
|
||||
```
|
||||
|
||||
Дабы компилятор не ругался на bool нужно подключить заголовок stdbool.h
|
||||
|
||||
Теперь самое интересное. Нужно создать переменную-указатель для нужного порта и присвоить ей начальный адрес. В данном случае используем PORTC:
|
||||
|
||||
```c
|
||||
struct port_byte *CVPORTC = (struct port_byte *) &(PORTC);
|
||||
```
|
||||
|
||||
Готово! Теперь можно обращаться к ножкам порта через эту переменную:
|
||||
|
||||
```c
|
||||
CVPORTC->P5 = 1;
|
||||
_delay_ms(500);
|
||||
CVPORTC->P5 = 0;
|
||||
```
|
BIN
content/posts/avr-gcc-cvports/miniature.jpg
Normal file
After Width: | Height: | Size: 3.5 KiB |
91
content/posts/avr-lcd-images/index.md
Normal file
@ -0,0 +1,91 @@
|
||||
---
|
||||
title: "Вывод иконок на дисплей Nokia 3310/5110 (переходим на avr-gcc)"
|
||||
categories: ["mcu", "archive"]
|
||||
date: 2015-08-13T00:00:00+03:00
|
||||
draft: false
|
||||
featured_image: miniature.jpg
|
||||
---
|
||||
|
||||
|
||||
Наконец-то переехал с CVAvr на AVR-GCC. От нечего делать начал собирать барометр. Купил nokia3310, выдрал дисплей. Библиотеку использовал [вот эту](https://github.com/gresolio/N3310Lib). Всё отлично, но библиотека умеет рисовать круги, линии, прямоугольники, выводить полноэкранные изображения, НО. Что должен уметь электронный барометр?
|
||||
|
||||
<!--more-->
|
||||
|
||||
Правильно, определять погоду по давлению. И выводить картинку с облачком или солнышком. А с полноэкранным изображением это делать не вариант - занимает кучу памяти да и с обновлением дисплея будет беда. Так что, я взялся за дело. Просидев весь вечер, написал программку-рисовалку картинок с конвертацией в массив и функцию-дополнение к библиотеке. Вот так выглядит программа:
|
||||
|
||||
![LCDPict|](lcdpict.png)
|
||||
|
||||
Прямая ссылка, по традиции, в конце статьи.
|
||||
|
||||
Функция выглядит следующим образом:
|
||||
|
||||
```c
|
||||
byte LCDIcon(const byte *pic, byte x, byte y, byte arrayRows, byte arrayColumns, byte progMem) {
|
||||
byte iterCol;
|
||||
byte iterRow;
|
||||
byte iterByte;
|
||||
byte picX = x;
|
||||
byte picY = y;
|
||||
byte symbolChar;
|
||||
|
||||
for (iterCol = 0; iterCol < arrayColumns; iterCol++) {
|
||||
for (iterRow = 0; iterRow < arrayRows; iterRow++) {
|
||||
if (progMem) {
|
||||
symbolChar = (byte) pgm_read_byte(&pic[iterCol + iterRow * arrayColumns]);
|
||||
} else {
|
||||
symbolChar = pic[iterCol + iterRow * arrayColumns];
|
||||
}
|
||||
for (iterByte = 0; iterByte < 8; iterByte++) {
|
||||
if ((symbolChar >> iterByte) & 1) {
|
||||
LcdPixel(picX, picY, PIXEL_ON);
|
||||
}
|
||||
picY++;
|
||||
}
|
||||
}
|
||||
picY = y;
|
||||
picX++;
|
||||
}
|
||||
|
||||
UpdateLcd = TRUE;
|
||||
return OK;
|
||||
}
|
||||
```
|
||||
|
||||
В качестве первого аргумента скармливаем **указатель на первый элемент массива**, второй и третий - координаты картинки,предпоследние аргументы - размер **массива, не картинки**. Не путать. Последний аргумент определяет откуда читать данные: из памяти МК (атрибут **PROGMEM**) или же из оперативной памяти. Пример:
|
||||
|
||||
```c
|
||||
#include <avr/io.h>
|
||||
#include <avr/pgmspace.h>
|
||||
#include <util/delay.h>
|
||||
#include "n3310.h"
|
||||
|
||||
|
||||
const byte out[2][24] = {
|
||||
{0x0, 0x0, 0x0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0xc, 0x6, 0x86, 0xc6, 0xec, 0xb8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
|
||||
{0x0, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0, 0x18, 0x10, 0x10, 0x10, 0x19, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0}
|
||||
};
|
||||
|
||||
int main(void) {
|
||||
|
||||
LcdInit();
|
||||
|
||||
while (1) {
|
||||
LcdClear();
|
||||
LCDIcon(&out[0][0], 0, 0, 2, 24, false);
|
||||
LcdUpdate();
|
||||
_delay_ms(5000);
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
UPD: Только сейчас заметил, что в программе неверно написан тип данных. Вместо **const <span style="text-decoration: underline; color: #993366;">char</span> out** нужно использовать **const <span style="text-decoration: underline; color: #008000;">unsigned char</span> out.** Исходник я давно потерял, поэтому исправить не могу.
|
||||
|
||||
|
||||
**Ссылки:**
|
||||
|
||||
[LCDPict](lcdpict.zip)
|
||||
|
||||
[Библиотека для дисплея nokia3310](https://github.com/gresolio/N3310Lib)
|
||||
|
||||
[Форк библиотеки с программным SPI](https://github.com/MultiMote/N3310Lib)
|
BIN
content/posts/avr-lcd-images/lcdpict.png
Normal file
After Width: | Height: | Size: 9.6 KiB |
BIN
content/posts/avr-lcd-images/lcdpict.zip
Normal file
BIN
content/posts/avr-lcd-images/miniature.jpg
Normal file
After Width: | Height: | Size: 4.9 KiB |
BIN
content/posts/avr-siemens-lcd/PCF8812.pdf
Normal file
BIN
content/posts/avr-siemens-lcd/helloworld.jpg
Normal file
After Width: | Height: | Size: 1.2 MiB |
1202
content/posts/avr-siemens-lcd/index.md
Normal file
BIN
content/posts/avr-siemens-lcd/lcd.jpg
Normal file
After Width: | Height: | Size: 1.2 MiB |
BIN
content/posts/avr-siemens-lcd/lines.jpg
Normal file
After Width: | Height: | Size: 1.2 MiB |
BIN
content/posts/avr-siemens-lcd/lph8684.png
Normal file
After Width: | Height: | Size: 5.2 KiB |
BIN
content/posts/avr-siemens-lcd/miniature.jpg
Normal file
After Width: | Height: | Size: 5.7 KiB |
BIN
content/posts/codeblocks-avr-linker-error/cb_compilerselect.png
Normal file
After Width: | Height: | Size: 4.6 KiB |
BIN
content/posts/codeblocks-avr-linker-error/cb_error.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
content/posts/codeblocks-avr-linker-error/cb_includeset.png
Normal file
After Width: | Height: | Size: 2.1 KiB |