Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

12f683+Nokia LCD+Jalv2

Вс апр 12, 2015 13:36:52

Всем привет!
Неделю назад решил поиграться с МК.Понравился случайно увиденный проект http://www.radioparty.ru/device-pic/483-thermometer-pic12f683-nokia3310-lcd. Собрал на хлебной доске,работает.Не нравится оформление на экранчике,особенно реклама давно почившего сайта. Для покорения PICов выбрал язык JAL.Очень приглянулся,простой и понятный даже для такого "полного" новичка,как я.Нагуглил библиотеку в интернетах для работы с экраном Нокиа 3310.И все вроде бы ничего,работает,за одним исключением.
В файлике http://www.andremiller.net/download/nokia_3310lcd_jal_2004-03-29.zip три файла библиотек. Один из них,font_5x7.jal,формирует на экранчике символы(у Нокии нет знакогенератора).И в этом то файлике есть ошибка:
Код:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Fixed width font, 5 wide, 7 high
;; Will give text resolution of 14 x 6
;; - Andre Miller


function _font_5x7_table ( byte in H, byte in L ) return byte is
assembler
local table_start
hpage table_start
bank H
addwf H, w
movwf PCLATH
bank L
movfw PCL
addlw 5
addwf L, w
skpnc
incf PCLATH, f
movwf PCL
table_start:
   retlw 0x00  ;; space, 32, 0, 0
   retlw 0x00
   retlw 0x00
   retlw 0x00
   retlw 0x00   
   retlw 0x00  ;; !, 33, 1, 1
   retlw 0x00
   retlw 0x2f
   retlw 0x00

Строчку hpage table_start,она 11я,компилятор считает неправильной.Написан этот кусок на АСМе,но гугл не в курсе что такое hpage.В PICах нет такой команды.Если убрать ее вообще,получается мешанина из линий на экране.
Помогите победить,пожалуйста!

Re: 12f683+Nokia LCD+Jalv2

Вс апр 12, 2015 14:09:20

Попробуй заменить её на pagesel

Re: 12f683+Nokia LCD+Jalv2

Вс апр 12, 2015 14:25:19

Тоже ошибка.Покурив маны к Джалу,обнаружил,что, среди прочего, он поддерживает команду PAGE. Которая,как раз идет в команде с LOCAL. Насколько я понял в силу уровня своей подготовки и знания английского,команда PAGE возвращает значения регистрам после выполнения защищаемого ею участка кода. Исправил,ни фига,весь экран в полосах,ничего не меняется.Может это быть из-за применения МК 12й серии? Может,он физически не может "защищать" регистры.
СпойлерWhen all else fails, one can resort to inline assembly. This can be in the form of a single statement:
ASM ...
or an entire block:
ASSEMBLER
statements
END ASSEMBLER
Using assembly should be a last resort -- it is needed only when either a feature is not possible using
JALv2 (for example, the TRIS and OPTION codes), or when speed is of the essence. JALv2 includes the
entire assembly language set in the PIC16F87x data sheet, several instructions from earlier micro
controllers, and several common macros. There is some support for the 16 bit keywords.
To guarantee the correct data bank is selected when accessing a file register, use one of the following:
BANK opcode ...
or
BANK f
The former takes the file register from the command, the later takes it directly.
Similarly, to guarantee the correct page bits are set (for GOTO or CALL), use one of the following:
PAGE opcode ...
or
PAGE lbl
Again, the former takes the label from the command, the later takes it directly.
Normally, the codes to set or clear the bank or page bits are only generated when necessary. If the bits are
already in the correct states, no further commands are generated.

Re: 12f683+Nokia LCD+Jalv2

Вс апр 12, 2015 22:03:42

Доброго времени суток! Как я понимаю суть всего кода функции- здесь просто идет переход на нужную точку массива и выдача этой точки наружу. Про защиту массива здесь и слова быть не должно. попробуйте закоментировать строки local table_start , hpage table_start - смысловой нагрузки в них не вижу честно говоря.
Похожий код и объяснения к нему есть здесь.
Увы в джале не силен :), но если вы в нем разобрались - посмотрите как задать массив и склепайте функцию заново-но уже целиком в джале.
Полоски какие? вертикальные или горизонтальные? полосатость для котов - штука важная :)

Re: 12f683+Nokia LCD+Jalv2

Пн апр 13, 2015 13:58:13

А про МАКРОСЫ ктой-нибудь вспомнил?
8)

Re: 12f683+Nokia LCD+Jalv2

Пн апр 13, 2015 16:17:48

Доброго времени суток
BOB51 писал(а):А про МАКРОСЫ ктой-нибудь вспомнил?

В данном месте - это кусок ассемблерного кода, вставленный в другой язык программирования. А в асемблере, для вызова макроса как раз используется команда CALL по моему, но её тут нет :). кстати "команда" skpnc - тоже мне подозрительна. смысл всех телодвижений должен складываться в следующее (помоему): возврат значения из массива, где номер возвращаемого элемента равен H+L. могу дать кусок кода в С, но это не тот язык :)
Но возможно я ошибаюсь (давненько не писал на асме) - тогда просветите :). возможно автор просто очепятался, перед выкладкой в интернет :)

Re: 12f683+Nokia LCD+Jalv2

Пт апр 17, 2015 07:08:00

Спасибо всем за помощь!
Долгое время не мог добраться до компьютера,много работы.Автор действительно очепятался,вместо hpage должен быть page. Но исправление и всякие операции с куском этого кода ни к чему не приводят. Если найду микру,попробую скомпилить для 16ф628.Есть мысль,что 12ф683 просто железно не поддерживает задумку прижимистого автора библиотеки. Задав вопрос в яхугруппе проекта,получил ответ:
Hi,

If your using Jallib, there is a nokia 3310 library:
https://github.com/jallib/jallib/blob/m ... a_3310.jal

and some samples:
https://github.com/jallib/jallib/search ... 93&q=nokia

Matt.

- "если ты используешь jallib,то вот тебе библиотека и некоторые примеры".Никто не стал даже смотреть в код и разбираться.

ЗЫ Мне искренне непонятно, зачем авторы кода намеренно делают его нерабочим.Человеку знающему эти писульки ни к чему,он сам себе напишет,это будет быстрее,чем разбираться с чужим кодом.А новичку,типа меня,разобраться,в чем дело,задача практически нереальная подчас.

Re: 12f683+Nokia LCD+Jalv2

Пт апр 17, 2015 20:50:29

Доброго времени суток!
ask3t писал(а): Если найду микру,попробую скомпилить для 16ф628.Есть мысль,что 12ф683 просто железно не поддерживает задумку прижимистого автора библиотеки.

Задав вопрос в яхугруппе проекта,получил ответ:
- "если ты используешь jallib,то вот тебе библиотека и некоторые примеры".Никто не стал даже смотреть в код и разбираться.
А новичку,типа меня,разобраться,в чем дело,задача практически нереальная подчас.

1. По командам (35 штук) и по программной памяти (2048) 16f628 и 12f683 идентичны. Памяти хватает и эффект будет думаю тот же. Посмотрев еще раз коды и литературку по ассемблеру, предоставленную BOB51 (за что ему огромное спасибо!), я могу только согласиться с BOB51 - hpage - название макроса.
1.1 Для начинаний рекомендую все таки Протеус, а не судорожно жечь железо (был у меня такой опыт), да и поменять в протеусе микруху куда как проще, чем в железе.
2.В общем-то человека понять можно, там все ответы по jallib есть (не по ассемблеру) и даны текстовки библиотек. просто по папке пройтись и посмотреть - там все шрифты лежат и переработано все под чистый jal. У тебя шрифт именно в ассемблере расписан - вот и не хочет человек копаться в чем не знает (или не помнит), и дает по своему мнению ссылку, где все готовенькое и лежит.
3. АТТРАКЦИОН НЕВИДАННОЙ ЩЕДРОСТИ. Раз лень самому разбираться (получить опыт и набить шишки) - пробуем так
Спойлерconst byte FONT_5X7_CHARS[] =
{
0x00, 0x00, 0x00, 0x00, 0x00, -- sp
0x00, 0x00, 0x2f, 0x00, 0x00, -- !
0x00, 0x07, 0x00, 0x07, 0x00, -- "
0x14, 0x7f, 0x14, 0x7f, 0x14, -- #
0x24, 0x2a, 0x7f, 0x2a, 0x12, -- $
0xc4, 0xc8, 0x10, 0x26, 0x46, -- %
0x36, 0x49, 0x55, 0x22, 0x50, -- &
0x00, 0x05, 0x03, 0x00, 0x00, -- '
0x00, 0x1c, 0x22, 0x41, 0x00, -- (
0x00, 0x41, 0x22, 0x1c, 0x00, -- )
0x14, 0x08, 0x3E, 0x08, 0x14, -- *
0x08, 0x08, 0x3E, 0x08, 0x08, -- +
0x00, 0x00, 0x50, 0x30, 0x00, -- ,
0x10, 0x10, 0x10, 0x10, 0x10, -- -
0x00, 0x60, 0x60, 0x00, 0x00, -- .
0x20, 0x10, 0x08, 0x04, 0x02, -- /
0x3E, 0x51, 0x49, 0x45, 0x3E, -- 0
0x00, 0x42, 0x7F, 0x40, 0x00, -- 1
0x42, 0x61, 0x51, 0x49, 0x46, -- 2
0x21, 0x41, 0x45, 0x4B, 0x31, -- 3
0x18, 0x14, 0x12, 0x7F, 0x10, -- 4
0x27, 0x45, 0x45, 0x45, 0x39, -- 5
0x3C, 0x4A, 0x49, 0x49, 0x30, -- 6
0x01, 0x71, 0x09, 0x05, 0x03, -- 7
0x36, 0x49, 0x49, 0x49, 0x36, -- 8
0x06, 0x49, 0x49, 0x29, 0x1E, -- 9
0x00, 0x36, 0x36, 0x00, 0x00, -- :
0x00, 0x56, 0x36, 0x00, 0x00, -- ;
0x08, 0x14, 0x22, 0x41, 0x00, -- <
0x14, 0x14, 0x14, 0x14, 0x14, -- =
0x00, 0x41, 0x22, 0x14, 0x08, -- >
0x02, 0x01, 0x51, 0x09, 0x06, -- ?
0x32, 0x49, 0x59, 0x51, 0x3E, -- @
0x7E, 0x11, 0x11, 0x11, 0x7E, -- A
0x7F, 0x49, 0x49, 0x49, 0x36, -- B
0x3E, 0x41, 0x41, 0x41, 0x22, -- C
0x7F, 0x41, 0x41, 0x22, 0x1C, -- D
0x7F, 0x49, 0x49, 0x49, 0x41, -- E
0x7F, 0x09, 0x09, 0x09, 0x01, -- F
0x3E, 0x41, 0x49, 0x49, 0x7A, -- G
0x7F, 0x08, 0x08, 0x08, 0x7F, -- H
0x00, 0x41, 0x7F, 0x41, 0x00, -- I
0x20, 0x40, 0x41, 0x3F, 0x01, -- J
0x7F, 0x08, 0x14, 0x22, 0x41, -- K
0x7F, 0x40, 0x40, 0x40, 0x40, -- L
0x7F, 0x02, 0x0C, 0x02, 0x7F, -- M
0x7F, 0x04, 0x08, 0x10, 0x7F, -- N
0x3E, 0x41, 0x41, 0x41, 0x3E, -- O
0x7F, 0x09, 0x09, 0x09, 0x06, -- P
0x3E, 0x41, 0x51, 0x21, 0x5E, -- Q
0x7F, 0x09, 0x19, 0x29, 0x46, -- R
0x46, 0x49, 0x49, 0x49, 0x31, -- S
0x01, 0x01, 0x7F, 0x01, 0x01, -- T
0x3F, 0x40, 0x40, 0x40, 0x3F, -- U
0x1F, 0x20, 0x40, 0x20, 0x1F, -- V
0x3F, 0x40, 0x38, 0x40, 0x3F, -- W
0x63, 0x14, 0x08, 0x14, 0x63, -- X
0x07, 0x08, 0x70, 0x08, 0x07, -- Y
0x61, 0x51, 0x49, 0x45, 0x43, -- Z
0x00, 0x7F, 0x41, 0x41, 0x00, -- [
0x55, 0x2A, 0x55, 0x2A, 0x55, -- 55
0x00, 0x41, 0x41, 0x7F, 0x00, -- ]
0x04, 0x02, 0x01, 0x02, 0x04, -- ^
0x40, 0x40, 0x40, 0x40, 0x40, -- _
0x00, 0x01, 0x02, 0x04, 0x00, -- '
0x20, 0x54, 0x54, 0x54, 0x78, -- a
0x7F, 0x48, 0x44, 0x44, 0x38, -- b
0x38, 0x44, 0x44, 0x44, 0x20, -- c
0x38, 0x44, 0x44, 0x48, 0x7F, -- d
0x38, 0x54, 0x54, 0x54, 0x18, -- e
0x08, 0x7E, 0x09, 0x01, 0x02, -- f
0x0C, 0x52, 0x52, 0x52, 0x3E, -- g
0x7F, 0x08, 0x04, 0x04, 0x78, -- h
0x00, 0x44, 0x7D, 0x40, 0x00, -- i
0x20, 0x40, 0x44, 0x3D, 0x00, -- j
0x7F, 0x10, 0x28, 0x44, 0x00, -- k
0x00, 0x41, 0x7F, 0x40, 0x00, -- l
0x7C, 0x04, 0x18, 0x04, 0x78, -- m
0x7C, 0x08, 0x04, 0x04, 0x78, -- n
0x38, 0x44, 0x44, 0x44, 0x38, -- o
0x7C, 0x14, 0x14, 0x14, 0x08, -- p
0x08, 0x14, 0x14, 0x18, 0x7C, -- q
0x7C, 0x08, 0x04, 0x04, 0x08, -- r
0x48, 0x54, 0x54, 0x54, 0x20, -- s
0x04, 0x3F, 0x44, 0x40, 0x20, -- t
0x3C, 0x40, 0x40, 0x20, 0x7C, -- u
0x1C, 0x20, 0x40, 0x20, 0x1C, -- v
0x3C, 0x40, 0x30, 0x40, 0x3C, -- w
0x44, 0x28, 0x10, 0x28, 0x44, -- x
0x0C, 0x50, 0x50, 0x50, 0x3C, -- y
0x44, 0x64, 0x54, 0x4C, 0x44 -- z
}


;; Writes a character to the display
procedure print_char_5x7 (byte in letter) is
var byte indxl = 0
var byte indxh = 0
var byte offset
var byte x

offset = letter - 32 ;; Fix for ascii value

for offset loop
_16b_add (0, 5, indxh, indxl)
end loop

for 5 loop
x = FONT_5X7_CHARS[ (indxh + indxl)]
NLCD_Write (x, true)
_16b_add (0, 1, indxh, indxl)
end loop

NLCD_Write (0, true) ; Add blank space between characters
end procedure

;; Writes an inverted character to the display
procedure print_char_5x7_i (byte in letter) is
var byte indxl = 0
var byte indxh = 0
var byte offset
var byte x

offset = letter - 32 ;; Fix for ascii value

for offset loop
_16b_add (0, 5, indxh, indxl)
end loop

for 5 loop
x = FONT_5X7_CHARS[ (indxh + indxl)]
x = x ^ 0xFF
NLCD_Write (x, true)
_16b_add (0, 1, indxh, indxl)
end loop

NLCD_Write (0xFF, true) ; Add blank space between characters
end procedure

это вместо font_5x7.jal , выделенное цветом - мои исправления которые по логике здесь должны быть. Jal - я не знаю (не пинайте) и исправления сделаны по "наитию" после прочтения выданных вам ссылок.
4. Что все таки с полосками? если полоски горизонтальные - проверьте подключение экрана (data и clok могут быть перепутаны) , вертикальные - вероятней шрифты.

Re: 12f683+Nokia LCD+Jalv2

Вс апр 19, 2015 13:38:47

Огромное спасибо за проделанный труд. Сразу по библиотекам,предложенным в яхугруппе - они не для маленьких тараканов. Прогнал масенький примерчик в компиляторе, получил out of data space. Чтобы ее использовать,нужно цеплять еще кучу тяжелых библиотек.Плюсы-все работает "из коробки",легко и просто,минусы-жрет агроменное количество ресурсов,коих в данном проекте нехватка жуткая.Так что придется разбираться и набивать шишку.Спасибо еще раз за Ваш труд,о прогрессе буду отписываться.
ПС Непонятно,почему JAL так мало известен,отличная среда для начинающих.Я разобрался с основными моментами за один присест,остальное практика и "набивание шишек" =)

Re: 12f683+Nokia LCD+Jalv2

Ср июл 08, 2020 19:45:19

А мне вот с С как-то проще, хотя для PIC и AVR они немного различаются. Извините за оффтоп.

Re: 12f683+Nokia LCD+Jalv2

Ср июл 08, 2020 21:55:58

Дриснул и сдриснул
Ответить