Файлы  •  Ссылки  •  Прошивки  •  Правила  •  Архив  •   FAQ  •  Участники  •  Поиск
Регистрация  •  Вход

Attiny13 + hd44780. Разобраться с кодом.

Список форумов» Программное обеспечение» Микроконтроллеры На страницу 1, 2  След.
АвторСообщение
Макс_
Участник
Сообщения: 949




20-05-2012 19:29

Народ, помогите разобраться с исходником. Сам в этом, увы ... недовольство, огорчение .
Не пинайте уж сильно, не мое это.
Девайс: http://diy.elektroda.eu/miniaturowy-miernik-do-zasilacza-na-attiny13/ .
Растолкуйте, как оно работает в части вывода на ЖКИ. Судя по сэмплам в Баскоме, это немелкая отдельная процедура, а тут она не не просматривается (или я в упор не вижу гы-гы ). Хочу убрать обработку и вывод температуры (нет LM35) и двинуть показания V/A симметрично по центру ЖКИ.
Может и еще кому окажется полезным этот разбор полетов улыбка
Спасибо.

  tiny13lcd_9_.rar  1,02 КБ  Скачано: 337 раз(а)

Rаmil
Гость 85.233.*.*





21-05-2012 12:34

Я не знаю баскома(и польского языка тоже улыбка ), но попробуй удалить строки с моими коментариями
Код:
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




21-05-2012 14:00

Rаmil, второй файл с выборкой 64 отсчетов и их усреднения - он что-то не пошел.
С температурой понятно - это я уже пробовал, в симуляторе вроде получилось нужное.
А вот как сдвинуть вправо оставшиеся показания? Что отвечает тут за вывод на экран?
Rаmil
Гость 85.233.*.*





21-05-2012 15:07

Хз...
Может попробовать вызвать Wyswietl: с другими параметрами.
Т.е. передать ему строку на нужное число знакомест с символами пробела. Типа Pokaz2 = Format(pokaz , " ") такого(здесь между кавычками три пробела а ты вставь нужное количество пробелов).

Непонял я в баскоме znak и Znak это одно и то же ?
И вот эта строка тоже непонятна Lcd Pokaz2 ; Chr(znak) ; Chr(32) .
Макс_
Участник
Сообщения: 949




21-05-2012 17:51

Хмм... Попробую.
Rаmil
Гость 213.87.*.*





21-05-2012 19:48

Да и ещё вызывать Formuj_i_mierz при этом не надо, удали её из тех строк где будешь пробелы вставлять. И операция Pomiar = Pomiar * Temp соответственно тоже не нужна.
Это всё насколько я понял этот баском...
Макс_
Участник
Сообщения: 949




21-05-2012 19:58

Ок. Завтра на работе поправлю и в симуляторе погоняю

И вот эта строка тоже непонятна Lcd Pokaz2 ; Chr(znak) ; Chr(32) .
Это буква после показаний, V и А, соответственно.
Rаmil
Гость 213.87.*.*





21-05-2012 21:05

Rаmil писал:
Типа Pokaz2 = Format(pokaz , " ") такого

Ещё раз посмотрел на код и думаю что лучше будет сделать так
Pokaz2 = Str(323232) - где 32 это код пробела, т.е. ставишь столько чисел 32 сколько пробелов нужно... это если Str() функция преобразующая число в строку.
Макс_
Участник
Сообщения: 949




22-05-2012 11:52

Rаmil, спасибо за мысль в нужном направлении. В симуляторе требуемое получено.
Ща попробуем в железе. Вечерком отпишусь по результатам.
Макс_
Участник
Сообщения: 949




22-05-2012 18:01

Чего этому Баскому надо? Компилирую оригинальный файл,
шью прогером, ставлю в панель - работает.
Добавляю только пробелы, компилирую, симулятор - ОК, шью, ставлю...
И нифига. Вобще не стартует недовольство, огорчение
Rаmil
Гость 213.87.*.*





22-05-2012 18:35

Может так ещё попробовать вставить пробелы Lcd Chr(32;Chr(32);Chr(32)...
а так конечно баском читать надо...
вот нашёл http://decada.org.ru/project/lessons/bascom_avr/16/
там всё есть про работу с ЖК.
Макс_
Участник
Сообщения: 949




22-05-2012 22:32

улыбка Хмм... Один и тот же Баском работает по разному на разных машинах. О как!
Прога написана впритык, места во флэшке для маневра нет. Что-то надо выкидывать,
иначе показывает переполнение при компиляции недовольство, огорчение . А на рабочем все проходило.
Макс_
Участник
Сообщения: 949




24-05-2012 06:44

Мдя... Ничего не выходит. недовольство, огорчение
Пришлось озадачить профессиональных программеров в конторе,
которым, ИМХО, задачка эта на два перекура.
Те хмыкнули скептически, но исходники забрали, пообещав
глянуть на недельке и подпилить оные до требуемого результата.
Пока не закрываю. Ждем-с... улыбка
slav0n
Забанен
Забанен
Сообщения: 2252




24-05-2012 21:46

Макс_, сама идея неплоха - проц копеечный и ЖК.
Но, баском фтопку!.
Си! адназначна.
Макс_
Участник
Сообщения: 949




24-05-2012 22:28

Дык, я из-за простоты и доступности повелся на этот девайс.
Тиньки были, ЖКИ в ассортименте от производства касс остались.
Только вот с датчиком для градусника заминка вышла.
У нас торговли компонентами нет в
принципе, даже предохранитель не купить.
Вот и решил попросить подмоги
в подправке кода. Иначе бы и не заморачивался.
Ладно, прорвемся улыбка
Rаmil
Гость 213.87.*.*





25-05-2012 04:16

По ссылке выше строку выводят так
Lcd "Hello! " ;
вместо привета, пробелы....
slav0n
Забанен
Забанен
Сообщения: 2252




25-05-2012 14:35

Макс_ писал:
Растолкуйте, как оно работает в части вывода на ЖКИ. Судя по сэмплам в Баскоме, это немелкая отдельная процедура, а тут она не не просматривается (или я в упор не вижу

короче, вот более логичный код без температуры
Код:
'------------------------------------------------------------------------------'
'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




25-05-2012 19:22

slav0n, спасибо! Получилось! классно
улыбка ...а как изменить формат вывода тока?
Т.е. сместить запятую влево для получения
вида х.хх А, не трогая при этом показаний
напряжения хх.х V.
slav0n
Забанен
Забанен
Сообщения: 2252




25-05-2012 19:54

Макс_ писал:
.а как изменить формат вывода тока?
Т.е. сместить запятую влево для получения
вида х.хх А, не трогая при этом показаний

Форматировать строку отдельно для напуги и тока

Код:
'главный цикл
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




25-05-2012 20:37

slav0n, еще раз спасибо!
То что надо получилось. Мир, Дружба, Жвачка классно
Выкладываю результат, вдруг кому еще
окажется полезным.

ampervoltmetr.jpg


  Attiny13+HD44780_A_V_from_slav0n.rar  8,78 КБ  Скачано: 439 раз(а)

pavel-pervomaysk
Your editor
Сообщения: 8037




26-05-2012 08:07

Макс_, понравилось ? подшучивать, дразнить
Макс_
Участник
Сообщения: 949




26-05-2012 09:17

pavel-pervomaysk, что именно улыбка ?
Сам девайсик неплох для своей
минимально-простой схемы.
Платку вот разведу и пристрою в БП,
пусть трудится показометром улыбка .
Программный же аспект так и остался
понятным в целом, но неясным в частностях гы-гы
slav0n
Забанен
Забанен
Сообщения: 2252




26-05-2012 09:37

Макс_ писал:
Программный же аспект так и остался
понятным в целом, но неясным в частностях

что не ясно по вышеизложенному коду?
Кстати, баском я совсем не изучал и в описание даже не заглядывал. Можно сказать только вчера увидел в глаза его код. улыбка
Все легко интуитивно читается по листингу. Это основное достоинство так называемых высокоуровневых языков.
Макс_
Участник
Сообщения: 949




26-05-2012 10:26

slav0n, интуитивное чтение по листингу - оно ведь наверняка на большом опыте основано? улыбка
Хотя, при вдумчивом созерцании исходника с твоими комментариями и переделками становится
ясным почти все. Даже такому чайнику, как я гы-гы .
Спасибо за науку Мир, Дружба, Жвачка .
slav0n
Забанен
Забанен
Сообщения: 2252




26-05-2012 11:13

Макс_ писал:
интуитивное чтение по листингу - оно ведь наверняка на большом опыте основано?

После Си читать бейсик вообще не проблема. улыбка
Вот например одно и то же на этих языках:

Basic
Код:
Shift Pomiar , Right , 6


C
Код:
Pomiar  >>= 6;

Макс_
Участник
Сообщения: 949




26-05-2012 11:24

Да, очевидные параллели видны
pavel-pervomaysk
Your editor
Сообщения: 8037




26-05-2012 11:52

Макс_ писал:
что именно ?

работать с микроконтроллерами.
Rаmil
Гость 85.233.*.*





26-05-2012 12:06

Я кстати говоря тоже только по исходнику давал первые советы. Не совсем понимая что есть что в этом бейсике. Смущало то что параметры
в функцию передаются по разному
так
Код:
 Lcd Pokaz2 ; Chr(znak) ; Chr(32)

через точку с запятой


или так
Код:
 Str(pomiar)

а здесь в скобках

Когда то очень давно(времена УКНЦ) в бейсике нельзя было так вызывать функции, а были только GOTO улыбка. В общем сплошное "спагетти" получалось. Но програмки работали. гы-гы.
Макс_
Участник
Сообщения: 949




26-05-2012 12:15

pavel-pervomaysk, "работать", в моем случае, слишком громко сказано. улыбка
Использовать приходится иногда . Так точнее будет
slav0n
Забанен
Забанен
Сообщения: 2252




26-05-2012 15:44

Rаmil писал:
Смущало то что параметры
в функцию передаются по разному

Да, синтаксис своеобразный. Намешали винегрет. улыбка
Поэтому я рекомендую сразу начинать изучать классический Си.
starko
Гость 95.153.*.*





30-05-2012 10:48

Макс_, каким именно баскомом компилил? Я вот попробовал, ради любопытства - давно не пользовался - скачал, кажется 2.0.7.1, ЕМНИС. Так не влезает в 1кБ Замешательство пишет 101%

Тут есть резерв, если надо: три константы имеют одно значение = 62. Убрать Pomiar = Pomiar * Napiecie и другие, вставить Pomiar = Pomiar *62 после Pomiar = Getadc(licz) - Pullup. Сколько-то освободится.
slav0n
Забанен
Забанен
Сообщения: 2252




30-05-2012 11:25

вот так изменить код
Код:
'главный цикл
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

Список форумов» Программное обеспечение» Микроконтроллеры» Attiny13 + hd44780. Разобраться с кодом. На страницу 1, 2  След.
Перейти:  
Текущий раздел» Программное обеспечение» Микроконтроллеры (Микроконтроллеры - AVR-ы, PIC-и и другие)


Похожая информация:
  • Термометр ATtiny13 + 2 х DS18B20 + LCD
  • attiny13 для милитарки/космоса - вопрос
  • Помогите разобратся с кодом для PIC12F629
  • Помогите разобраться с мк КР1878ВЕ1
  • не могу разобраться с фузоми








  • Информация по ремонту для специалистов - справочники, инструкции, энциклопедия, советы и секреты ремонта,  настройка, сервисные режимы
    Powered by phpBB 2.0.18 © 2001, 2002 phpBB Group!