| Автор | Сообщение |
Макс_ Участник Сообщения: 949
|
Народ, помогите разобраться с исходником. Сам в этом, увы ... .
Не пинайте уж сильно, не мое это.
Девайс: http://diy.elektroda.eu/miniaturowy-miernik-do-zasilacza-na-attiny13/ .
Растолкуйте, как оно работает в части вывода на ЖКИ. Судя по сэмплам в Баскоме, это немелкая отдельная процедура, а тут она не не просматривается (или я в упор не вижу ). Хочу убрать обработку и вывод температуры (нет LM35) и двинуть показания V/A симметрично по центру ЖКИ.
Может и еще кому окажется полезным этот разбор полетов
Спасибо.
tiny13lcd_9_.rar 1,02 КБ Скачано: 337 раз(а)
|
|
Rаmil Гость 85.233.*.*
|
Я не знаю баскома(и польского языка тоже ), но попробуй удалить строки с моими коментариями
| Код: | Do
Upperline
Znak = 86
Pomiar = Pomiar * Napiecie
'pr№d...
Licz = 3
Formuj_i_mierz
Wyswietl
Znak = 65
Pomiar = Pomiar * Prad
'temperatura...
Licz = 0
Formuj_i_mierz
Pokaz2 = Format(pokaz , "0.00")
Wyswietl
Pomiar = Pomiar * Temp // отсюда
'napiкcie...
Licz = 1
Formuj_i_mierz
Wyswietl // до этой строки всё удалить
Loop
|
ЗЫ. У тебя в архиве только один файл проекта, в оригинале их два. |
|
Макс_ Участник Сообщения: 949
|
Rаmil, второй файл с выборкой 64 отсчетов и их усреднения - он что-то не пошел.
С температурой понятно - это я уже пробовал, в симуляторе вроде получилось нужное.
А вот как сдвинуть вправо оставшиеся показания? Что отвечает тут за вывод на экран? |
|
Rаmil Гость 85.233.*.*
|
Хз...
Может попробовать вызвать Wyswietl: с другими параметрами.
Т.е. передать ему строку на нужное число знакомест с символами пробела. Типа Pokaz2 = Format(pokaz , " ") такого(здесь между кавычками три пробела а ты вставь нужное количество пробелов).
Непонял я в баскоме znak и Znak это одно и то же ?
И вот эта строка тоже непонятна Lcd Pokaz2 ; Chr(znak) ; Chr(32) . |
|
Макс_ Участник Сообщения: 949
|
|
Rаmil Гость 213.87.*.*
|
Да и ещё вызывать Formuj_i_mierz при этом не надо, удали её из тех строк где будешь пробелы вставлять. И операция Pomiar = Pomiar * Temp соответственно тоже не нужна.
Это всё насколько я понял этот баском... |
|
Макс_ Участник Сообщения: 949
|
Ок. Завтра на работе поправлю и в симуляторе погоняю
И вот эта строка тоже непонятна Lcd Pokaz2 ; Chr(znak) ; Chr(32) .
Это буква после показаний, V и А, соответственно. |
|
Rаmil Гость 213.87.*.*
|
| Rаmil писал: | | Типа Pokaz2 = Format(pokaz , " ") такого |
Ещё раз посмотрел на код и думаю что лучше будет сделать так
Pokaz2 = Str(323232) - где 32 это код пробела, т.е. ставишь столько чисел 32 сколько пробелов нужно... это если Str() функция преобразующая число в строку. |
|
Макс_ Участник Сообщения: 949
|
Rаmil, спасибо за мысль в нужном направлении. В симуляторе требуемое получено.
Ща попробуем в железе. Вечерком отпишусь по результатам. |
|
Макс_ Участник Сообщения: 949
|
Чего этому Баскому надо? Компилирую оригинальный файл,
шью прогером, ставлю в панель - работает.
Добавляю только пробелы, компилирую, симулятор - ОК, шью, ставлю...
И нифига. Вобще не стартует  |
|
Rаmil Гость 213.87.*.*
|
|
Макс_ Участник Сообщения: 949
|
Хмм... Один и тот же Баском работает по разному на разных машинах. О как!
Прога написана впритык, места во флэшке для маневра нет. Что-то надо выкидывать,
иначе показывает переполнение при компиляции . А на рабочем все проходило. |
|
Макс_ Участник Сообщения: 949
|
Мдя... Ничего не выходит.
Пришлось озадачить профессиональных программеров в конторе,
которым, ИМХО, задачка эта на два перекура.
Те хмыкнули скептически, но исходники забрали, пообещав
глянуть на недельке и подпилить оные до требуемого результата.
Пока не закрываю. Ждем-с...  |
|
slav0n Забанен  Сообщения: 2252
|
Макс_, сама идея неплоха - проц копеечный и ЖК.
Но, баском фтопку!.
Си! адназначна. |
|
Макс_ Участник Сообщения: 949
|
Дык, я из-за простоты и доступности повелся на этот девайс.
Тиньки были, ЖКИ в ассортименте от производства касс остались.
Только вот с датчиком для градусника заминка вышла.
У нас торговли компонентами нет в
принципе, даже предохранитель не купить.
Вот и решил попросить подмоги
в подправке кода. Иначе бы и не заморачивался.
Ладно, прорвемся  |
|
Rаmil Гость 213.87.*.*
|
По ссылке выше строку выводят так
Lcd "Hello! " ;
вместо привета, пробелы.... |
|
slav0n Забанен  Сообщения: 2252
|
| Макс_ писал: | | Растолкуйте, как оно работает в части вывода на ЖКИ. Судя по сэмплам в Баскоме, это немелкая отдельная процедура, а тут она не не просматривается (или я в упор не вижу |
короче, вот более логичный код без температуры
| Код: | '------------------------------------------------------------------------------'
'Program: miniaturowy miernik do zasilacza na procesorze attiny13 '
'kompilator: bascom 1.11.9.0 data: 21.12.2009 autor: Manekinen '
'strona domowa projektu: http://diy.elektroda.eu/ '
'wszelkie modyfikacje dozwolone, publikuj№c naleїy zachowaж ten nagіуwek '
' WYЈҐCZNIE DO UЇYTKU NIEKOMERCYJNEGO '
'------------------------------------------------------------------------------'
Const Napiecie = 62 'mnoїnik napiкcia (62 dla 100V... 19 dla 30V... itp)
Const Prad = 62 'mnoїnik pr№du (62 dla 10A... j.w.)
Const Temp = 62 'mnoїnik temperatury, dobrany eksperymentalnie dla vref 1.1V i LM35 (wliczaj№c mV poprawkк poniїej)
Const Pullup = 6 'ile mV bікdu wprowadza pullup wyњwietlacza podі№czony do gnd poprzez 100ohm... troche nieeleganckie ale proste i skuteczne :)
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 16
$swstack = 16
$framesize = 16
$noramclear
'определяем переменные
Dim Pomiar As Word ' результат измерения АЦП
Dim Pokaz As String * 4 ' строка 4 символа
Dim Pokaz2 As String * 4 ' строка 4 символа
Dim Znak As Byte ' символ V или А
Dim Licz As Byte ' номер входа АЦП
'объявляем подпрограммы
Declare Sub Get_Adc
Declare Sub Wyswietl
'конфигурируем АЦП
Config Adc = Single , Prescaler = Auto , Reference = Internal 'off
Start Adc
'конфигурируем LCD
Config Lcd = 16 * 1
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.4 , Db6 = Portb.3 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
Cursor Off
'главный цикл
Do
Upperline
Lcd Chr(32) ; Chr(32) ' сдвигаем вывод на два пробела
Licz = 1
Get_Adc
Pomiar = Pomiar * Napiecie
Znak = 86
Wyswietl
Licz = 3
Get_Adc
Pomiar = Pomiar * Prad
Znak = 65
Wyswietl
Loop
Get_Adc:
Ddrb = &B010011
Waitms 50
Pomiar = Getadc(licz) - Pullup
Return
Wyswietl:
Shift Pomiar , Right , 6
Pokaz = Str(pomiar)
Pokaz2 = Format(pokaz , "00.0")
Ddrb = &B111111
Lcd Pokaz2 ; Chr(znak) ; Chr(32)
Return |
|
|
Макс_ Участник Сообщения: 949
|
slav0n, спасибо! Получилось!
...а как изменить формат вывода тока?
Т.е. сместить запятую влево для получения
вида х.хх А, не трогая при этом показаний
напряжения хх.х V. |
|
slav0n Забанен  Сообщения: 2252
|
| Макс_ писал: | .а как изменить формат вывода тока?
Т.е. сместить запятую влево для получения
вида х.хх А, не трогая при этом показаний |
Форматировать строку отдельно для напуги и тока
| Код: | 'главный цикл
Do
Upperline
Lcd Chr(32) ; Chr(32) ' сдвигаем вывод на два пробела
Licz = 1
Get_Adc
Pomiar = Pomiar * Napiecie
Shift Pomiar , Right , 6
Pokaz = Str(pomiar)
Pokaz2 = Format(pokaz , "00.0")
Znak = 86
Wyswietl
Licz = 3
Get_Adc
Pomiar = Pomiar * Prad
Shift Pomiar , Right , 6
Pokaz = Str(pomiar)
Pokaz2 = Format(pokaz , "0.00")
Znak = 65
Wyswietl
Loop
Get_Adc:
Ddrb = &B010011
Waitms 50
Pomiar = Getadc(licz) - Pullup
Return
Wyswietl:
Ddrb = &B111111
Lcd Pokaz2 ; Chr(znak) ; Chr(32)
Return |
|
|
Макс_ Участник Сообщения: 949
|
|
pavel-pervomaysk Your editor Сообщения: 8037
|
Макс_, понравилось ?  |
|
Макс_ Участник Сообщения: 949
|
pavel-pervomaysk, что именно ?
Сам девайсик неплох для своей
минимально-простой схемы.
Платку вот разведу и пристрою в БП,
пусть трудится показометром .
Программный же аспект так и остался
понятным в целом, но неясным в частностях  |
|
slav0n Забанен  Сообщения: 2252
|
| Макс_ писал: | Программный же аспект так и остался
понятным в целом, но неясным в частностях |
что не ясно по вышеизложенному коду?
Кстати, баском я совсем не изучал и в описание даже не заглядывал. Можно сказать только вчера увидел в глаза его код.
Все легко интуитивно читается по листингу. Это основное достоинство так называемых высокоуровневых языков. |
|
Макс_ Участник Сообщения: 949
|
slav0n, интуитивное чтение по листингу - оно ведь наверняка на большом опыте основано?
Хотя, при вдумчивом созерцании исходника с твоими комментариями и переделками становится
ясным почти все. Даже такому чайнику, как я .
Спасибо за науку . |
|
slav0n Забанен  Сообщения: 2252
|
| Макс_ писал: | | интуитивное чтение по листингу - оно ведь наверняка на большом опыте основано? |
После Си читать бейсик вообще не проблема.
Вот например одно и то же на этих языках:
Basic
| Код: | | Shift Pomiar , Right , 6 |
C
|
|
Макс_ Участник Сообщения: 949
|
Да, очевидные параллели видны |
|
pavel-pervomaysk Your editor Сообщения: 8037
|
работать с микроконтроллерами. |
|
Rаmil Гость 85.233.*.*
|
Я кстати говоря тоже только по исходнику давал первые советы. Не совсем понимая что есть что в этом бейсике. Смущало то что параметры
в функцию передаются по разному
так
| Код: | | Lcd Pokaz2 ; Chr(znak) ; Chr(32) |
через точку с запятой
или так
а здесь в скобках
Когда то очень давно(времена УКНЦ) в бейсике нельзя было так вызывать функции, а были только GOTO . В общем сплошное "спагетти" получалось. Но програмки работали. . |
|
Макс_ Участник Сообщения: 949
|
pavel-pervomaysk, "работать", в моем случае, слишком громко сказано.
Использовать приходится иногда . Так точнее будет |
|
slav0n Забанен  Сообщения: 2252
|
| Rаmil писал: | Смущало то что параметры
в функцию передаются по разному |
Да, синтаксис своеобразный. Намешали винегрет.
Поэтому я рекомендую сразу начинать изучать классический Си. |
|
starko Гость 95.153.*.*
|
Макс_, каким именно баскомом компилил? Я вот попробовал, ради любопытства - давно не пользовался - скачал, кажется 2.0.7.1, ЕМНИС. Так не влезает в 1кБ пишет 101%
Тут есть резерв, если надо: три константы имеют одно значение = 62. Убрать Pomiar = Pomiar * Napiecie и другие, вставить Pomiar = Pomiar *62 после Pomiar = Getadc(licz) - Pullup. Сколько-то освободится. |
|
slav0n Забанен  Сообщения: 2252
|
вот так изменить код
| Код: | 'главный цикл
Do
Upperline
Lcd Chr(32) ; Chr(32) ' сдвигаем вывод на два пробела
Licz = 1
Get_Adc
Pokaz2 = Format(pokaz , "00.0")
Znak = 86
Wyswietl
Licz = 3
Get_Adc
Pokaz2 = Format(pokaz , "0.00")
Znak = 65
Wyswietl
Loop
Get_Adc:
Ddrb = &B010011
Waitms 50
Pomiar = Getadc(licz) - Pullup
Pomiar = Pomiar * 62
Shift Pomiar , Right , 6
Pokaz = Str(pomiar)
Return
Wyswietl:
Ddrb = &B111111
Lcd Pokaz2 ; Chr(znak) ; Chr(32)
Return |
|
|