Страница 2 из 7
Re: Реализация Графического Языка Программирования
Добавлено: Пн дек 01, 2014 17:18:42
xkp
обновил. На вашем блоке N1 N2 N3 N4 лучше расположить горизонтально (если воеможно) так будет понятнее какое Nx к камому разряду относится. И еще добавить точку.
И еще нужно будет добавить настройку прерываний tim_0_ovf для динамической индикации
Re: Реализация Графического Языка Программирования
Добавлено: Пн дек 01, 2014 17:35:04
Lihouzov
Горизонтально, проблема, нужно дорабатывать графическую библиотеку. Точку добавил.
Динамическую индикацию сделаем программно. Блок будет получать управление примерно в одинаковые промежутки времени.
Плюс мы не привяжем данный блок к аппаратным узлам микроконтроллера, а значить он будет работать на всех AVR контроллерах.
Re: Реализация Графического Языка Программирования
Добавлено: Пн дек 01, 2014 17:44:42
Lihouzov
Код: Выделить всё
#ifndef _FBD41_
#define _FBD41_ FBD41
#message define FBD41 (LED_7_SEG)__FILE__
.SET LED_7_SEG_DATA_SIZE = 4
.SET LED_7_SEG_DATA_RAM = FBD_DATA_RAM //Глобальные данные для LED
.SET FBD_DATA_RAM = LED_7_SEG_DATA_RAM + LED_7_SEG_DATA_SIZE //Выделяем память для LED
//Размер описания FDB блока
//12 байт- вывода
// Оперативная память
//1 байт счетчик
FBD41_init:
ret;
FBD41_run:
ret;
FBD41:
.db 12, 1 //Размер FBD блока, необходимая оперативная память
.dw FBD41_run, FBD41_init
#else
#error redeclared FBD41 __FILE__
#endif
Re: Реализация Графического Языка Программирования
Добавлено: Пн дек 01, 2014 17:47:20
Lihouzov
Теперь необходимо написать две функции "инициализация" и "исполнение". Задача вывести четыре байта на четыре индикатора. Наверное лучше составить блок схему.
Re: Реализация Графического Языка Программирования
Добавлено: Пн дек 01, 2014 17:49:23
xkp
как то так...
инициализация
Спойлер
Код: Выделить всё
.equ seg =portd
.equ portout =portb
;регистры
.def tmp=r16
.def tmp0=r17
.def cnt=r18
.DSEG
ind0: .byte 1
ind1: .byte 1
ind2: .byte 1
ind3: .byte 1
Nind: .byte 1
вывод на индикацию, пока без точки
Спойлер
Код: Выделить всё
.CSEG
;==========
look: ;подпрограмма вывода индикации
;==========
push tmp ;сохраняем данные
push tmp0 ;которые можем потерять
in tmp,sreg ;tmp, tmp0,
push tmp ;sreg
lds tmp,Nind ;tmp = nind
subi tmp,1 ;если 1
brcs look0 ;переход на look0
subi tmp,1 ;если 2
brcs look1 ;переход на look1
subi tmp,1 ;если 3
brcs look2 ;переход на look2
rjmp look3 ;иначе look3
;----------------------------------------------------------------
look0: ;вывод на первый индикатор
;----------------------------------------------------------------
cbi seg,3 ;выключаем 4-ый индикатор
lds tmp,ind0
rcall decind
out portout,tmp
sbi seg,0 ;зажигаем 1-ый индикатор
ldi tmp,1
sts Nind,tmp ;в другой раз на look1
pop tmp ;восстанавливаем ранее
out sreg,tmp ;сохранённые данные
pop tmp0 ;в обратном порядке
pop tmp ;sreg,tmp,tmp0
reti ;выход из подпрограммы обработки прерываний
;------------------------------------------------------------------
look1: ;вывод на второй индикатор
;------------------------------------------------------------------
cbi seg,0 ;выключаем 1-ый индикатор
lds tmp,ind1
rcall decind
out portout,tmp
sbi seg,1 ;зажигаем 2-ой индикатор
ldi tmp,2
sts Nind,tmp ;в другой раз на look2
pop tmp ;восстанавливаем ранее
out sreg,tmp ;сохранённые данные
pop tmp0 ;в обратном порядке
pop tmp ;sreg,tmp,tmp0
reti ;выход из подпрограммы обработки прерываний
;------------------------------------------------------------------
look2: ;вывод на третий индикатор
;------------------------------------------------------------------
cbi seg,1 ;выключаем 2-ой индикатор
lds tmp,ind2
rcall decind
out portout,tmp
sbi seg,2 ;зажигаем 3-ий индикатор
ldi tmp,3
sts Nind,tmp ;в другой раз на look3
pop tmp ;восстанавливаем ранее
out sreg,tmp ;сохранённые данные
pop tmp0 ;в обратном порядке
pop tmp ;sreg,tmp,tmp0
reti ;выход из подпрограммы обработки прерываний
;------------------------------------------------------------------
look3: ;вывод на четвёртый индикатор
;------------------------------------------------------------------
cbi seg,2 ;выключаем 3-ый индикатор
lds tmp,ind3
rcall decind
out portout,tmp
sbi seg,3 ;зажигаем 4-ый индикатор
ldi tmp,0
sts Nind,tmp ;в другой раз на look0
pop tmp ;восстанавливаем ранее
out sreg,tmp ;сохранённые данные
pop tmp0 ;в обратном порядке
pop tmp ;sreg,tmp,tmp0
reti ;выход из подпрограммы обработки прерываний
decind:
cpi tmp,$ff
brne dec_n
ret
dec_n:
ldi zh,high(2*tabind)
ldi zl,low(2*tabind)
add zl,tmp
clr tmp
adc zh,tmp
lpm
mov tmp,r0
ret
;=============
;= таблица символов для семисегментного индикатора =
;= 0 1 2 3 4 5 6 7 8 9 A B C D E F =
;= $00 $01 $02 $03 $04 $05 $06 $07 $08 $09 $0a $0b $0c $0d $0e $0f =
;=============
;= G H J L P q r t U y - Є =
;= $10 $11 $12 $13 $14 $15 $16 $17 $18 $19 $1a $1b =
;===============
tabind:
.dw 0b1111100111000000 ;1-0
.dw 0b1011000010100100 ;3-2
.dw 0b1001001010011001 ;5-4
.dw 0b1111100010000010 ;7-6
.dw 0b1001000010000000 ;9-8
.dw 0b1000001110001000 ;B-A
.dw 0b1010000111000110 ;D-C
.dw 0b1000111010000110 ;F-E
.dw 0b1000100111000010 ;H-G
.dw 0b1100011111100001 ;L-J
.dw 0b1001100010001100 ;q-P
.dw 0b1000011110101111 ;t-r
.dw 0b1001000111000001 ;y-U
.dw 0b1111111110111111 ;Є--
/*
точка: перед строчкой "sts ind_,tmp" ставить:
andi tmp,0b01111111
*/
вывод числа "0123"
Спойлер
Код: Выделить всё
ldi tmp,0
sts ind0,tmp
ldi tmp,1
sts ind1,tmp
ldi tmp,2
sts ind2,tmp
ldi tmp,3
sts ind3,tmp
Программа полностью во вложении и там же протеус. Индикация висит на tim0ovf.
Re: Реализация Графического Языка Программирования
Добавлено: Пн дек 01, 2014 17:54:01
Lihouzov
Настройки портов нам не нужны, да и наверное функция инициализации тоже.
http://horizontautomatics.ru/Runtime/AV ... id=fbd_add
http://horizontautomatics.ru/Runtime/AV ... d_adc_tn13
LED_7_SEG_DATA_RAM - глобальный адрес (4 байта для вывода)
X - указатель на оперативную память (я выделил 1 байт)
Можно использовать
.def Uz1L = r7 //Узловая переменная
.def Uz1H = r8 //Узловая переменная
.def Uz2L = r9 //Узловая переменная
.def Uz2H = r10 //Узловая переменная
.def Uz3L = r11 //Узловая переменная
.def Uz3H = r12 //Узловая переменная
.def A = r16 //регистр временного хранения данных
.def B = r17 //регистр временного хранения данных
.def C = r18 //регистр временного хранения данных
.def D = r19 //регистр временного хранения данных
.def E = r20 //регистр временного хранения данных
.def F = r21 //регистр временного хранения данных
.def G = r22 //регистр временного хранения данных
.def H = r23 //регистр временного хранения данных
и пару регистр. Z
Re: Реализация Графического Языка Программирования
Добавлено: Пн дек 01, 2014 23:05:00
uni
Приятно видеть, что есть люди, которые пытаются что-то сделать в такой области. От себя хочу заметить, что есть случаи, когда графическое представление неудобно. Имеется в виду обмен данными через последовательный порт. Я программирую ПЛК и для этого случая использую язык ST, так как графические версии все выглядят просто непонятно. Есть ещё случаи, когда текстовый вид предпочтительнее. Например, нужно сохранить некие данные в виде наборов в памяти мк. Операция вычисления смещения для указателя в графическом виде будет только запутывать (это на будущее).
Могу показать как выглядит пример программы для ПЛК на языке ST. Народ быстро переходит от "кнопочек и лампочек" к реальным задачам и оказывается, что лёгкость графического программирования обманчива.
Re: Реализация Графического Языка Программирования
Добавлено: Вт дек 02, 2014 15:50:48
xkp
Кстати, почему LCD 12*2 ? вроде как стандарт (ну или более часто употребляемые дисплеи) 16*2
Re: Реализация Графического Языка Программирования
Добавлено: Вт дек 02, 2014 16:03:34
Lihouzov
И еще вопрос в блок что верхний на моем рисунке данные в каком виде поступают? В регистрах, в памяти? В каких регистрах? В какой ячейке или под каким именем памяти?
В зависимости от типа входа данного блока (логический, целочисленный, вещественный итд.) В виде указателя на оперативную память.
Блок схема будущего блока:
http://horizontautomatics.ru/Runtime/AV ... d=fbd_7seg
Re: Реализация Графического Языка Программирования
Добавлено: Вт дек 02, 2014 16:05:10
Lihouzov
xkp писал(а):Кстати, почему LCD 12*2 ? вроде как стандарт (ну или более часто употребляемые дисплеи) 16*2
Просто у меня был в наличии данный дисплей.
Re: Реализация Графического Языка Программирования
Добавлено: Вт дек 02, 2014 16:31:19
Lihouzov
Код: Выделить всё
#ifndef _FBD41_
#define _FBD41_ FBD41
#message define FBD41 (LED_7_SEG)__FILE__
.SET LED_7_SEG_DATA_SIZE = 4
.SET LED_7_SEG_DATA_RAM = FBD_DATA_RAM //Глобальные данные для LED
.SET FBD_DATA_RAM = LED_7_SEG_DATA_RAM + LED_7_SEG_DATA_SIZE //Выделяем память для LED
//Размер описания FDB блока A-F,DP,N1-N4
//12 байт- вывода
// Оперативная память
//1 байт счетчик
// биты 7-5 - выводимый символ
// биты 4-0 - счетчик
FBD41_run:
ld H, X //Получаем байт счетчика
inc H //Увеличить счетчик
mov F, H //Копируем
andi H, 0b00011111 //Счетчик
brne FBD41_out_symbol
andi F, 0b01100000 //Получаем номер символа
clr Uz1H //Выводим ноль
clr Uz1L //Выводим ноль
rcall Read_cfg_Save_Uz1 //Вывод A
rcall Read_cfg_Save_Uz1 //Вывод B
rcall Read_cfg_Save_Uz1 //Вывод C
rcall Read_cfg_Save_Uz1 //Вывод D
rcall Read_cfg_Save_Uz1 //Вывод E
rcall Read_cfg_Save_Uz1 //Вывод F
rcall Read_cfg_Save_Uz1 //Вывод G
rcall Read_cfg_Save_Uz1 //Вывод DP
ret;
FBD41:
.db 12, 1 //Размер FBD блока, необходимая оперативная память
.dw FBD41_run, Init_default
#else
#error redeclared FBD41 __FILE__
#endif
Re: Реализация Графического Языка Программирования
Добавлено: Вт дек 02, 2014 16:52:53
xkp
Необходимо по байту 0bХХХ00000 получить значение N1,N2,N3,N4 -???
Спойлер
Код: Выделить всё
ldi r16,0bxxx00000; или если с памяти то lds r16,0bxxx00000
andi r16,0b10000000
tst r16
brne loop_01 ;если r16 = 0b10000000 то на loop_01
ldi r16,0bxxx00000; или если с памяти то lds r16,0bxxx00000
andi r16,0b01000000
tst r16
brne loop_02 ;если r16 = 0b01000000 то на loop_02
ldi r16,0bxxx00000; или если с памяти то lds r16,0bxxx00000
andi r16,0b00100000
tst r16
brne loop_03 ;если r16 = 0b00100000 то на loop_03
rjmp loop_04 ;иначе на loop_04
loop_01:
;гасим предыдущий индикатор
;выводим сегменты
;зажигаем текущий индикатор
ret
loop_02:
;гасим предыдущий индикатор
;выводим сегменты
;зажигаем текущий индикатор
ret
loop_03:
;гасим предыдущий индикатор
;выводим сегменты
;зажигаем текущий индикатор
ret
loop_04:
;гасим предыдущий индикатор
;выводим сегменты
;зажигаем текущий индикатор
ret
Re: Реализация Графического Языка Программирования
Добавлено: Вт дек 02, 2014 17:01:18
Lihouzov
Вроде бы все, завтра будем тестить...
Спойлер
Код: Выделить всё
#ifndef _FBD41_
#define _FBD41_ FBD41
#message define FBD41 (LED_7_SEG)__FILE__
.SET LED_7_SEG_DATA_SIZE = 4
.SET LED_7_SEG_DATA_RAM = FBD_DATA_RAM //Глобальные данные для LED
.SET FBD_DATA_RAM = LED_7_SEG_DATA_RAM + LED_7_SEG_DATA_SIZE //Выделяем память для LED
//Размер описания FDB блока A-F,DP,N1-N4
//12 байт- вывода
// Оперативная память
//1 байт счетчик
// биты 7-5 - выводимый символ
// биты 4-0 - счетчик
FBD41_run:
ld H, X+ //Получаем байт счетчика
inc H //Увеличить счетчик
mov F, H //Копируем
andi F, 0b01100000 //Получаем номер символа
andi H, 0b00011111 //Счетчик
brne FBD41_out_symbol
clr Uz1H //Выводим ноль
clr Uz1L //Выводим ноль
rcall Read_cfg_Save_Uz1 //Вывод A
rcall Read_cfg_Save_Uz1 //Вывод B
rcall Read_cfg_Save_Uz1 //Вывод C
rcall Read_cfg_Save_Uz1 //Вывод D
rcall Read_cfg_Save_Uz1 //Вывод E
rcall Read_cfg_Save_Uz1 //Вывод F
rcall Read_cfg_Save_Uz1 //Вывод G
rcall Read_cfg_Save_Uz1 //Вывод DP
ldi A, 0b000000001 //Преобразуем 0b0XX00000 -> 0b00001000
sbrc F, 5 //Преобразуем 0b0XX00000 -> 0b00001000
lsl A //Преобразуем 0b0XX00000 -> 0b00001000
sbrc F, 6 //Преобразуем 0b0XX00000 -> 0b00001000
lsl A //Преобразуем 0b0XX00000 -> 0b00001000
sbrc F, 6 //Преобразуем 0b0XX00000 -> 0b00001000
lsl A //Преобразуем 0b0XX00000 -> 0b00001000
//sbrc F, 7 //Преобразуем 0b0XX00000 -> 0b00001000
//swap A //Преобразуем 0b0XX00000 -> 0b00001000
BST A, 0
BLD Uz1L, 0
rcall Read_cfg_Save_Uz1 //Вывод N1
BST A, 1
BLD Uz1L, 0
rcall Read_cfg_Save_Uz1 //Вывод N2
BST A, 2
BLD Uz1L, 0
rcall Read_cfg_Save_Uz1 //Вывод N3
BST A, 3
BLD Uz1L, 0
rcall Read_cfg_Save_Uz1 //Вывод N4
ret
FBD41_out_symbol
swap F //Номер символа 0b00000XX0
lsr F //Номер символа 0b000000XX
ldi ZL, Low(LED_7_SEG_DATA_RAM) ; адрес
ldi ZH, High(LED_7_SEG_DATA_RAM) ; адрес
ld A, Z //Загружаем символ
BST A, 0
BLD Uz1L, 0
rcall Read_cfg_Save_Uz1 //Вывод A
BST A, 1
BLD Uz1L, 0
rcall Read_cfg_Save_Uz1 //Вывод B
BST A, 2
BLD Uz1L, 0
rcall Read_cfg_Save_Uz1 //Вывод C
BST A, 3
BLD Uz1L, 0
rcall Read_cfg_Save_Uz1 //Вывод D
BST A, 4
BLD Uz1L, 0
rcall Read_cfg_Save_Uz1 //Вывод E
BST A, 5
BLD Uz1L, 0
rcall Read_cfg_Save_Uz1 //Вывод F
BST A, 6
BLD Uz1L, 0
rcall Read_cfg_Save_Uz1 //Вывод G
BST A, 7
BLD Uz1L, 0
rcall Read_cfg_Save_Uz1 //Вывод DP
ADIW YL, 4 //Пропускаем N1, N2, N3, N4
ret;
FBD41:
.db 12, 1 //Размер FBD блока, необходимая оперативная память
.dw FBD41_run, Init_default
#else
#error redeclared FBD41 __FILE__
#endif
Re: Реализация Графического Языка Программирования
Добавлено: Вт дек 02, 2014 19:08:14
xkp
хотелось бы увидеть индикатор LCD 16*2 с поддержкой русского языка... и графический LCD 128*64
Re: Реализация Графического Языка Программирования
Добавлено: Вт дек 02, 2014 21:12:46
ARV
попробовал вашу систему... видимо, из-за сволочного характера не понравилась, если интересно - могу раскритиковать "под ноль"

а по-доброму если, то как-то непонятно: то ли продукт еще слишком сырой, то ли неинтуитивно все, и я не понял, как им пользоваться. создал проект, выбрал attiny13. доступно 8 портов - откуда?! ладно, взял один порт в качестве входа, второй в качестве выхода, пробую соединить их - не дает. поставил между ними генератор импульсов, вход завел на левый пин генератора, выход с правого взял - соединилось. жму "отладка" - ошибка, какой-то там файл не найден...
кстати, почему программа устанавливается в корень диска, а не в Program Files? и почему проекты сохраняет куда-то внутрь себя, а не в "Мои документы"? и почему деинсталлятор ни в меню, ни в панели управления не присутствует?
Re: Реализация Графического Языка Программирования
Добавлено: Вт дек 02, 2014 21:19:33
xkp
Движок программы мне тоже не нравится, сырой еще. Как говрится русский народ и за идею готов работать. Так вот мне идея понравилась и поэтому хочу помочь проекту в развитии.
И генератор который вы попробовали пока еще не работает) Ну а вход с выходом у меня соединяются хорошо)
Re: Реализация Графического Языка Программирования
Добавлено: Вт дек 02, 2014 21:23:49
ARV
xkp писал(а): Ну а вход с выходом у меня соединяются хорошо)
а я, видимо, рылом не вышел

из подобных продуктов, ориентированных на микроконтроллеры (8-битные) мне знаком АлгоритмБилдер и MCStudio (под MCS51? правда). слышал еще про какую-то иноземщину под ардуино - но не видел
имхо, баловство это все...
Re: Реализация Графического Языка Программирования
Добавлено: Ср дек 03, 2014 00:58:27
ppp
ARV писал(а):имхо, баловство это все...
Да нет, это просто вам, опытным программистам, сложно опуститься до уровня чайника, на которого, как я понимаю, автор ориентируется. А я вот, как раз тот чайник

. Ну, как бы это объяснить. Вот, к примеру, меня никогда не интересовало, как выглядит изнутри 155ЛА3, но это меня никогда не останавливало от использования ее в своих поделках. С МК у меня тоже самое, но не катит, приходится смотреть изнутри. Для Вас сама программка уже является объектом творчества, а для меня таким объектом является только конечное устройство, и то, что программа в МК работает медленнее и занимает места больше, чем могла бы, меня нисколько не волнует. Главное, чтобы она работала не медленнее, чем мне нужно.
Чтобы как-то выкрутиться сегодня пользуюсь FlowCode. Удобно, быстро. Эту программу не устанавливал, смотрел только видеоролики. Невольно, конечно, сравнивал с FlowCode. На первый взгляд кажется, что автор пошел туда же, что и они. Но нет. В FlowCode, я хоть и никудышним, но должен оставаться программистом. Там я строю алгоритм. Здесь же я собираю устройство и отодвинут от программирования еще дальше. Что только поднимает настроение

. Думаю, что если ее снабдить такой же массой маленьких примеров по подключению и настройке каждого блока, как это сделали FloeCode, то она у радиолюбителей, не испорченных АСМом или Си, будет пользоваться бешеным спросом. Без примеров и без опыта программирования, конечно трудно будет въехать.
Re: Реализация Графического Языка Программирования
Добавлено: Ср дек 03, 2014 05:42:46
xkp
Лично мне нравятся такие программы. Особенно когда надо быстренько своять что нито. Да и начинал я програмирование мк не с изучения команд на асм (хотя и пробовал с этого), а с написания программ в алгоритме Буилдера, а уже потом, как начал понимать структуру написания программы, начал изучать асм. Ну и мнений всегда будет столько, сколько людей хотят поспорить!
Re: Реализация Графического Языка Программирования
Добавлено: Ср дек 03, 2014 07:08:45
ARV
польза подобных систем очевидна и мною не оспаривается. под баловством я имел ввиду попытку одиночки поднять эту тему - имхо, это нереально и кроме разочарования ничего не принесет. для получения достойного результата требуется неплохая команда, причем специалистов широкого профиля, т.к. надо разбираться и в программировании МК, и в программировании на ББ и дружить с отладкой в железе.
пользователь нынче избалован "настоящими" программами, и поэтому в одиночку даже догнать их уровень почти нереально, ну а превзойти и подавно... в свое время я через это прошел....