Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



LunaAVR

Сообщений 31 страница 60 из 65

31

Может отдельно раздел открыть под неё и кто хочет, может выкладывать примеры и/или рассказывать о ней?

0

32

попробуйте, время покажет наличие интереса
неплохо бы пример с нуля: как пишем, как компилируем, сколько код весит,
библиотеки - есть такие как в Баском или нет...

0

33

Александр Д. написал(а):

неплохо бы пример с нуля: как пишем, как компилируем, сколько код весит,

"Мигалка".

Код:
avr.device = atmega8
avr.clock  = 8000000
avr.stack  = 32

#define LED1 as portB.0   'LED1 is defined as label for portB.0
LED1.mode = output,low    'the port is configured as output and set to low


do
  LED1 = 1                'switch LED1 on
  waitms 500              'wait for 500ms
  LED1 = 0                'switch LED1 off
  waitms 500              'wait for 500ms
loop

Код простой и думаю понятно что и для чего. Для компиляции, в меню "Project" кликаем по "Compile". Бинарный файл весит 120 байт (60 асм. команд).

Пример по сложнее - многозадачность (похоже что вытесняющая). Созданы две задачи, работающие параллельно (как в компе). Кванты времени выдаются по таймеру.

Код:
#library "Library/TaskKernel.Interface"

avr.device = atmega328p
avr.clock  = 8000000
avr.stack = 4'not more needed, only for initialize the basics


'the stacks for the different tasks
'all sub-methods called from a task, uses the
'current active stack space of each task.
'** Note: the context switching of each task needs 33 bytes minimum! **
dim stack0(63) as byte
dim stack1(63) as byte

'**********************************************************************
'!! ATTENTION - THIS TASKS ARE TRUELY PREEMPTIVE !!
'!! THE TASKKERNEL IS A TASK SCHEDULER FOR REAL PREEMPTIVE TASKS !!
'**********************************************************************
TaskKernel.Init(Timer1,2,10) '2 Tasks, 10ms TimeSlice between tasks
TaskKernel.Task(0,task0().Addr,stack0(63).Addr)
TaskKernel.Task(1,task1().Addr,stack1(63).Addr)

TaskKernel.Start()'main program ends here! only tasks running!

'*************************************************************************
'* preemptive(!) RTOS-like tasks
'*************************************************************************
procedure task0()
  'this is like a single main program
  'here you can initialize something once
  #define LED1	as PortD.5
  LED1.mode	= output,low
  'the main loop of this task (never exited)
  do
    LED1.toggle
    waitms 100
  loop
endproc
procedure task1()
  'this is like a single main program
  'here you can initialize something once
  #define LED2	as PortD.6
  LED2.mode	= output,low
  'the main loop of this task (never exited)
  do
    LED2.toggle
    waitms 500
  loop
endproc

Размер бинарного файла - 600 байт (300 асм. инструкций).

+2

34

Пётр, спасибо
а по сравнению с Баском как с компактностью и количеством нужных библиотек?
я когда-то щупал Луну, но как-то не пошло дело с ней

0

35

Основательно не изучал, но похоже что встроенных функций примерно одинаковое количество. Для баскома конечно же больше написано кода, но это потому что он раньше создан чем луна. По луне мало инфы и форумов. В рунете нет ни одного.

0

36

Т.е. если взять за него - будем первопроходцами.)

Спасибо, Петр.

0

37

LUNA не дает "прозрачности", определенности и предсказуемости результата, которую имеет Bascom.
Простые вещи замудрены, например инициализация периферии, нет простого доступа к регистрам.
Приходится вручную выбирать подходящие функции для операций с различными типами данных.
Документация никакая, на многие вопросы просто нет ответов, а на примерах далеко не уедешь.
Программа с прерываниями не заработала ни в каком виде (даже в отдельном отладочном куске?).
Далее тратить время посчитал бесполезным занятием - ведь на выходе тот же AVR.
Даже MikroBasic для ARM оказался дружественней - скомпилил и заработал.

0

38

понял, спасибо
забудем еще на пару лет - как я делал когда-то с Баском ))

0

39

dmm написал(а):

LUNA не дает "прозрачности", определенности и предсказуемости результата, которую имеет Bascom.

А по моему наоборот. Например луна имеет возможность явного преобразования типов и приведения к необходимому. В баскоме не заметил такого.

dmm написал(а):

нет простого доступа к регистрам.

А это тогда что?

Код:
avr.ddrb=0

Зачем в этом случае нужно avr? Ну это отдельное пространство имен (чего кстати не хватает в баскоме). Например в луне можно создать свой класс с переменной имеющей имя ddrb

Код:
class my_class
  dim ddrb as byte
endclass

И при необходимости работать с этой переменой

Код:
my_class.ddrb=0

В баскоме такое не получится.

dmm написал(а):

Приходится вручную выбирать подходящие функции для операций с различными типами данных.

Явное приведение к требуемому типу это скорее плюс чем минут, поскольку дает ожидаемый результат. Например если сложить 250 и 100, то на выходе получится тип Word. Если же нужен именно Byte (например, такое сложение необходимо для вычисления контрольной суммы), то просто явно указываем необходимый тип результата и получаем то что ожидали.

0

40

Проверил как луна работает с плавающей точкой.

Код:
avr.device = atmega8
avr.clock  = 8000000
avr.stack  = 32

dim x, y, r as single

x=10.5
y=128.74
r=10.4*x/(y/0.5+2)

Такое математическое выражение, компиль без проблем "переварил", а вот баском не смог. Пришлось создавать несколько временных переменных и разделить выражение так чтобы было не больше двух действий.

Отредактировано Пётр (2014-07-18 15:37:35)

0

41

мне лично это не столь важно
куда интереснее количество библиотек и компактность кода
но пока есть глюки с прерываниями - я не полезу в Луну

0

42

Александр Д. написал(а):

но пока есть глюки с прерываниями - я не полезу в Луну

В чем выражаются эти глюки?

0

43

Спасибо ПЕТРУ за разъяснение. Сейчас глянул, да, так. Занимался луной еше в 2012 г. Хотел быстро сделать маленькую программку, но сразу не пошло и не было возможности разбираться.
А сейчас подошла читабельная документация: http://avr.myluna.de/lib/exe/fetch.php? … -23-en.pdf
и новая версия 18.06.2014

0

44

Пётр написал(а):

Александр Д. написал(а):
    но пока есть глюки с прерываниями - я не полезу в Луну
В чем выражаются эти глюки?


DMM писал: "Программа с прерываниями не заработала ни в каком виде (даже в отдельном отладочном куске?). "

0

45

Александр Д. написал(а):

DMM писал: "Программа с прерываниями не заработала ни в каком виде (даже в отдельном отладочном куске?). "

Судя по всему, имелась в виду версия 2012 года. Наверное давно исправили.

0

46

так попробуйте снова)

0

47

Попробовал в Луне софтовый уарт. В цикле просто инкремент переменной,но в терминале вижу как вместо чисел по очереди перебирается весь фонт. Не могу сообразить что это может быть.

Код:
avr.device = attiny13
avr.clock = 9600000
avr.stack = 4

'SoftUart.PinRxd = PortB.0   ' Receive Pin: RXD
SoftUart.PinTxd = PortB.1   ' Transmit Pin: TXD
SoftUart.Baud = 9600       ' Baud rate up to 1/100 of avr.clock (200000 baud @ 20 Mhz)

dim a as byte

do

incr a

SoftUart.print "A = "; a
waitms 400

loop


end

http://sd.uploads.ru/bqhoM.jpg

0

48

А что значит надпись в шапке" Terminal-noname[com4:9600:8N1:ASII(..."?

0

49

При настройке терминала его можно обозвать,например так:
http://sf.uploads.ru/t/b1eFf.jpg
А если не обзывать,то будет noname.

0

50

Sergik07 написал(а):

В цикле просто инкремент переменной,но в терминале вижу как вместо чисел по очереди перебирается весь фонт.

Посмотрите описание оператора Print на странице 256. Там пример есть.

Код:
  Print "Hello World ";65          ' output: "Hello World A"
  Print "Hello World ";Str(65)     ' output: "Hello World 65"

Первая строка, как раз ваш случай. Во второй строке показано как должно быть.

Отредактировано Пётр (2014-07-19 13:49:34)

+1

51

Точно!Большое спасибо! А то целенаправленно искал в хелпе именно SoftUart.Print(стр.284),а там совсем не то.

0

52

Заходим на страницу скачивания и смотрим дату релиза.

16.09.2014

На всякий случай проверяем текущую дату и делаем вывод что таки изобрели машину времени! :D  :tomato:

0

53

Правильно, язык будущего!  :D

0

54

Уже поправили.

0

55

Кто-нибудь пробовал на луне создавать что-то с 1Wire? Перевел один проект с баскома на луну и в протеусе, 1Wire не работает, хотя прога на баскоме в протеусе работает без проблем.
Такое впечатление что сильно сбоит при обмене по 1Wire.

0

56

Как оказалось, 1-Wire не работает при тестировании в протеусе, но в железе все ОК.
Это странно потому что аналогичный код на баскоме, нормально работает в протеусе.

0

57

Ничего странного, сам Марк не раз писал/говорил, что в протеусе многое не работает, но прекрасно работает в железе. Например его библиотека i2c master.

0

58

никогда никакой софтовый симулятор не поймёт всего железа)
поэтому и не пользуюсь ничем таким

0

59

Александр Д. написал(а):

никогда никакой софтовый симулятор не поймёт всего железа

Но ведь прога на баскоме нормально работает в протеусе.
Значит проблема в луне.

0

60

Решить одну задачу можно многими способами и большим набором комбинаций инструкций процессора.
Проверить можно только одним способом, собрать железо и залить туда прошивку от Луны.

0

Похожие темы