Author |
Message |
SfS
Doomed
Joined: 16 Apr 2005 22:35 Posts: 492 Location: Томск
|
Чтобы у читателей темы не создавалось впечатления, что в NedoPC-90 начался застой, буду кратко писать тут над чем работаю. Присоединяйтесь (в смысле - если кто над чем работает в этой же области - постите сюда планы, проекты, идеи)
Сейчас идет работа над следующими вещами:
1. Прикручивание NedoPC-90.AVROS к контроллеру ATMega128.
2. Прикручивание поддержки FLASH-памяти к NedoPC-90.AVROS.
3. Прикручивание клавиатуры (матрица 4х4) к NedoPC-90.AVROS.
Как будут результаты (то есть то, что можно сфотать и показать) - пришлю.
|
14 Aug 2005 19:35 |
|
|
acidrain
Senior
Joined: 28 Feb 2005 02:31 Posts: 159 Location: Krasnodar, Russia
|
| | | | SfS wrote: Чтобы у читателей темы не создавалось впечатления, что в NedoPC-90 начался застой, буду кратко писать тут над чем работаю. Присоединяйтесь (в смысле - если кто над чем работает в этой же области - постите сюда планы, проекты, идеи) Сейчас идет работа над следующими вещами: 1. Прикручивание NedoPC-90.AVROS к контроллеру ATMega128. 2. Прикручивание поддержки FLASH-памяти к NedoPC-90.AVROS. 3. Прикручивание клавиатуры (матрица 4х4) к NedoPC-90.AVROS. Как будут результаты (то есть то, что можно сфотать и показать) - пришлю. | | | | |
Вот клава - это интересно. я пока с недопц-90 ничего не делал. А вот с мега8515 делаю, но к данной теме не относящееся. просто для того, чтоб понять, что как делается... Я ведь начинающий
|
15 Aug 2005 01:00 |
|
|
SfS
Doomed
Joined: 16 Apr 2005 22:35 Posts: 492 Location: Томск
|
А что тебя именно в прикручивании клавы интересует ? Это обычная матрица. 4 строки на 4 столбца. Опрос производим, подавая на строку 0 (остальные столбцы в 1) и считывая состояние столбцов. Чтобы опросить состояние всей клавиатуры надо 4 раза подать 0 на строки и 4 раза считать состояние столбцов. Ну и далее - задержки на дребезг и т.п., но это уже мелочи. Как опишу все в программе, так выложу новую версию NedoPC-90.AVROS.
Как это "не относящееся" ? Думаю и на меге8515 NedoPC-90.AVROS запустится без особых проблем. (На меге128 запустилась после исправления одной строчки в Makefile AVR-MCU=atmega128 и прошивки fuse-битов CKSEL0..3=0x0A, M103C=0).
Так что (я думаю) и на меге8515 все запустится после пары тычков.
Если есть вопросы - не стесняйся, спрашивай. Не факт, что на се отвечу, но чем смогу...
|
16 Aug 2005 18:59 |
|
|
acidrain
Senior
Joined: 28 Feb 2005 02:31 Posts: 159 Location: Krasnodar, Russia
|
Т.е. речь идет о механической клаве, как на спеке? а если пц клаву приделать? LordVader сделал для амиги на авр-ке контролер клавы...
Интересно, а Pelle C откомпилит аврос? =)
Спасибо за предложение о помощи! Буду рад замучать странными вопросами ))
|
18 Aug 2005 03:44 |
|
|
SfS
Doomed
Joined: 16 Apr 2005 22:35 Posts: 492 Location: Томск
|
Речь идет (в данном случае) о телефонной клаве. Прикручивать клаву от писюка - смысла в большинстве случаев не имеет. Если тебе надо сложно и много рулить устройством - это проще и удобнее сделать через RS232й. А для пульта управления каким-нибудь простым устройством достаточно обычной 16-кнопочной клавиатуры. На двустрочном текстовом индикаторе WP1602 нетрудно организовать систему меню. (О том как его прикрутить тут уже рассказывалось, поддержка его в ОС тоже есть). Кстати, о клаве от писюка. У нас тут парни занимались ее прикручиванием к АВРке, но сам я не делал этого. Говорят, что проблем никаких особых нет.
Я даже не знаю что такое есть Pelle C. Но думаю - врядли откомпилирует без обработки напильником. Самое простое - скачай gcc, он свободный. И не заморачивайся
Дело в том, что сама ОСька при компиляции завязана на библиотеки avr-libc и я не уверен, что Pelle C в состоянии их понять.
|
18 Aug 2005 18:55 |
|
|
SfS
Doomed
Joined: 16 Apr 2005 22:35 Posts: 492 Location: Томск
|
Итак, клавиатура прикручена, написаны процедуры ввода чисел и менюшки. Причем, через макросы их можно сконфигурить не только к имеющемуся на сегодня индикатору WP1602, но и к любому другому.
Для этого достаточно иметь процедуры:
1. Очистки индикатора.
2. Позиционирования курсора.
3. Вывода символа в позицию курсора со сдвигом курсора на следующую позицию.
4. Получения символа с клавиатуры (или еще откуда, если клава не устраивает).
Управляющие клавиши определяются также через макросы.
Сейчас идет прикручивание FLASHки AT45DB081b объемом 8Мбит (4096 секторов по 264 байта каждый). Проблема собственно не в прикручивании, а в поддержке какойнибудь примитивной файловой системы.
Скоро (в ближайшую неделю наверное) причешу и выложу то, что будет достаточно отлажено.
|
25 Aug 2005 20:23 |
|
|
SfS
Doomed
Joined: 16 Apr 2005 22:35 Posts: 492 Location: Томск
|
Ну вот, флешка прикручена. Сейчас сделаю нормальную прозрачную работу для пользователя (API для работы с флэшкой). И все скопом выложу.
Кстати, я сейчас в отпуске, потому появляюсь редко. Через неделю выйду на работу - буду постоянно на связи.
|
07 Sep 2005 20:53 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22607 Location: Silicon Valley
|
Ты как специально покрываешь те девайсы, которые я хочу заюзать в прототипе калькулятора-компьютера со встроенным языком программирования RW1
Мне остается только интерпретатор байт-кода написать и компилятор с RW1 в байт-код на самом RW1 - и тогда штучка на уровне "Электроники МК-85" получится, а то и лучше
|
09 Sep 2005 18:40 |
|
|
SfS
Doomed
Joined: 16 Apr 2005 22:35 Posts: 492 Location: Томск
|
Неудивительно. Ведь связка клавиатура-дисплей-процессор-память покрывает огромное количество устройтв - от калькулятора до системы управления стиральной машиной.
То есть ты хочешь запихать в AVR запихать интерпретатор RW1 ? Это прекрасно, только работать будет небыстро.
|
14 Sep 2005 22:29 |
|
|
SfS
Doomed
Joined: 16 Apr 2005 22:35 Posts: 492 Location: Томск
|
Флешка представлена как единый файл размером от 0 до 1048320 байт. (имеется ввиду флешка AT49DB081).
Работа с флешкой требует в памяти кэша раззмером 264 байта.
Сделал для флешки следующие функции:
int open() - проверяет есть ли флешка, форматирована ли она и т.п. возвращает код ошибки в зависимости от результата. (0 - успешное выполнение).
int close() - синхронизирует содержимое флешки с кэшэм, завершает работу с флешкой и возвращает 0. Если флешка была не открыта предварительно функцией open() - возвращает -1.
int read(char* buf, long int size) - считывает size байт в буфер buf. Возвращает количество считанных байт или код ошибки (-1), если флешка была не открыта предварительно функцией open().
int write(char* buf, long int size) - записывает size байт из буфера buf во флешку. Возвращает количество записанных байт или код ошибки (-1), если флешка была не открыта предварительно функцией open().
В общем все работает... НО! Не быстро - увы... 1мегабайт на ATmega128 - 8MГц пишется порядка 3х минут. То есть скорость записи (средняя) - всего около 5.5 Кбайт/сек. С другой стороны - вряд ли надо единовременно писать объемы больше нескольких Кбайт.
В общем судите сами для чего это все подходит, а для чего - нет. Скоро выложу исходники и схемы.
|
14 Sep 2005 22:44 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22607 Location: Silicon Valley
|
Точнее интерпретатор байткода RW0. И в будущем - редактор и компилятор из RW1 в RW0. В первом приближении важна функциональность, а не скорость!
|
15 Sep 2005 18:36 |
|
|
SfS
Doomed
Joined: 16 Apr 2005 22:35 Posts: 492 Location: Томск
|
Что касается интерпретатора - то я за. Только с RW я почти никак не знаком - только понаслышке.
Предусматривает ли этот самый RW возможность определения своих не-RW функций ? Чтобы, скажем, все времякритичные куски писать на асме и С, которые будут постоянно прошиты в программной памяти, а из RW обращаться с ними как со встроенными функциями языка ? Тогда ОС обретет именно смысл ОС - в ней будет сосредоточены все критические части плюс интерпретатор байт-кода.
Тогда для пользователя (то есть RW-программиста) расширение ОС будет равносильно добавлению новых команд-функций в язык RW.
|
15 Sep 2005 19:13 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22607 Location: Silicon Valley
|
RW1 имеет специальную команду COMMAND N, где N - номер внешней операции, которая может быть реализована в коде процессора и иметь доступ ко всем регистрам и переменным виртуальной машины.
Вопрос - у тебя обязательно задавать лишь периодические действия, которые по прерыванию выполняются определенное кол-во раз в секунду или можно основную ветку программы тоже организовать?
|
15 Sep 2005 19:29 |
|
|
SfS
Doomed
Joined: 16 Apr 2005 22:35 Posts: 492 Location: Томск
|
А ей синоним дать можно ? Скажем нечто вроде #define FileOpen(f) COMMAND 4(f) чтобы понятнее писать было ?
Конечно ! Все что в ../upl/main.c это обычная программа, которая начинается с функции main(). На прерывания вешаются только действия привязанные ко времени.
Если я правильно понял, то ты хочешь в основную ветку интерпритатор RW0 запихать ?
Я на досуге ознакомлюсь с RW поподробнее - может что еще попридумаю.
|
15 Sep 2005 22:53 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22607 Location: Silicon Valley
|
Можно описать подпрограмму:
FileOpen() // A=f
{
command 4
}
и вызывать ее в виде FileOpen(f), где f может быть указателем на строку (первый аргумент автоматически передастся в регистр A):
def filename[10]="file.txt"
FileOpen(&filename) // A=&filename;CALL FileOpen
|
16 Sep 2005 07:09 |
|
|