BASCOM AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
nsl2004
Мучитель микросхем
Сообщения: 402
Зарегистрирован: Пт май 29, 2009 10:14:29

Re: BASCOM AVR в вопросах и ответах

Сообщение nsl2004 »

Прошу подсказать как вот такой код заменить на код Баскома

Код: Выделить всё

CODE:
{
 if (Step) {
  cnt++;
  if (cnt==119){
    cnt=0;
    Step--;
      if (Direct){
        OCR0A=0xFE-Step;
                 }
else {
  if (!Step)OCR0A=0;
   else OCR0A=Step;
     }

              }
       }

}




Я попробовал впрямую заменить на соответствующие операторы, но не тут то было, т.к. эквивалента фигурных скобок нет я так понял. Значит нужен какой то другой подход? Какой. Как реализовать цепочку IF? Попробовал вот так но компилятор ругается. Кто что может подсказать. Буду благодарен за любую помощь. Step зарезервированное слово заменено на Stp

Код: Выделить всё

If Stp > 1 Then Incr Cnt
Elseif Cnt = 119 Then
Cnt = 0
Decr Stp
Elseif Direct > 0 Then
Ocr0a = &HFE - Stp
Else
If Stp > 0 Then
Ocr0a = 0
Else
Ocr0a = Stp
End If
PB_EXPERT
Потрогал лапой паяльник
Сообщения: 331
Зарегистрирован: Вс мар 30, 2008 14:31:51

Re: BASCOM AVR в вопросах и ответах

Сообщение PB_EXPERT »

Нет завершающего End If.
Аватара пользователя
nsl2004
Мучитель микросхем
Сообщения: 402
Зарегистрирован: Пт май 29, 2009 10:14:29

Re: BASCOM AVR в вопросах и ответах

Сообщение nsl2004 »

PB_EXPERT писал(а):Нет завершающего End If.

А где он должен быть? Если вторым в конце, то пробовал и в конце и в середине . Не выходит. Где то есть не стыковка.
P.S. Скажите , а можно сделать такое допущение, что сколько в преобразуемом коде операторов IF столько же должно быть и END IF?
P.S.P.S. Как оказалось можно :))
Аватара пользователя
Intel_agent
Родился
Сообщения: 18
Зарегистрирован: Вс апр 18, 2010 16:43:08
Откуда: Улан-Удэ

Re: BASCOM AVR в вопросах и ответах

Сообщение Intel_agent »

nsl2004, каждое if должно оканчиваться end if
Если не ошибаюсь, у тебя их должно быть 4 штуки, хотя по такому коду сложно понять, находится ли условие внутри другого условия или же оно самостоятельное...
Аватара пользователя
nsl2004
Мучитель микросхем
Сообщения: 402
Зарегистрирован: Пт май 29, 2009 10:14:29

Re: BASCOM AVR в вопросах и ответах

Сообщение nsl2004 »

2Intel_agent Да спасибо. Теперь работает.
Аватара пользователя
nsl2004
Мучитель микросхем
Сообщения: 402
Зарегистрирован: Пт май 29, 2009 10:14:29

Re: BASCOM AVR в вопросах и ответах

Сообщение nsl2004 »

Есть вопрос такого плана
В образце проги , с которй я работаю есть такая строка
Config Timer0 = Timer , Prescale = 64
С книги по Баскому я выяснил следующее = внутренний генератор (Fкв/12) C/Tx=0 и собственно +prescale = 64
Честно говоря хотел выяснить что такое Fкв/12? какой байт в каком бите за него отвечает.
С/Tx=0 собственно те же вопросы.
Идентична ли запись ( или корректна ли запись ) такого плана ( Для Atmega32)
TCCR0=&b00000011 ( т.е первый и второй байты 64 прескале)
TCNT0=&b00000000
OCR0=&b00000000
т.е заменит ли она строчку приведенную вначале поста
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение Секретный кот »

nsl2004 писал(а):Config Timer0 = Timer , Prescale = 64
С книги по Баскому я выяснил следующее = внутренний генератор (Fкв/12) C/Tx=0 и собственно +prescale = 64
Честно говоря хотел выяснить что такое Fкв/12? какой байт в каком бите за него отвечает.
С/Tx=0 собственно те же вопросы.

Уж не знаю, что это за такая умная книга, но лучше всё же пользоваться "родной" документацией, как минимум встроенным хелпом :wink:
PRESCALE:
The TIMER is connected to the system clock in this case. You can select the division of the system clock with this parameter.
Valid values are 1 , 8, 64, 256 or 1024

Если с английским плохо, то вкратце Prescale это дискретный коэффициент, на который делится тактовая частота МК. Необходимость лазить вручную в регистры таймера абсолютно отпадает.
Даже остановленные часы два раза в сутки показывают правильное время.
Аватара пользователя
nsl2004
Мучитель микросхем
Сообщения: 402
Зарегистрирован: Пт май 29, 2009 10:14:29

Re: BASCOM AVR в вопросах и ответах

Сообщение nsl2004 »

2Секретный кот
Спасибо за ответ. Книга действительно умная.СПРАВОЧНИК ПО ПРОГРАММИРОВАНИЮ
BASCOM-8051® Автор Кулиш. Так вот он в пояснении к конфигурированию Timer0 и приводит вот эти данные Fкв/12 - ? и C/Tx=0 -? Что он имеет ввиду непонятно. Я просто подумал, что плавающий в теме человек просто подскажет.
Дело в том что мне надо знать. ЧТО ДЕЛАЕТ оператор Timer0=Timer. Как оказалось что приведенная мной конфигурация регистров именно и означает Config Timer0 = Timer , Prescale = 64. Но есть одно но... тогда в теле программы , не работают START и STOP Timer. Надо явно прописывать регистры и их значения что бы добится нужного эффекта. Ну по крайней мере пока у меня так.
А необходимо разобратся потому , что у меня конфликтуют между собой Timer0 и Timer1-Timer2 задействованные под PWM (ШИМ). Мне нужен приоритет ШИМов, а пока включаются жуткие торомза. Существует две программы, по отдельности работают. Начинаю объединять тормоза, или вообще непашет. Что то с прерываниями.
Prescale мне понятно - в даташите подробно описано.
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение Секретный кот »

2 nsl2004
8051 и AVR всё же отличаются малость :wink:
Какая у вас версия компилятора?
У меня несколько таймеров нормально уживались вместе.
Даже остановленные часы два раза в сутки показывают правильное время.
Аватара пользователя
nsl2004
Мучитель микросхем
Сообщения: 402
Зарегистрирован: Пт май 29, 2009 10:14:29

Re: BASCOM AVR в вопросах и ответах

Сообщение nsl2004 »

2 Секретный кот
Версия 1.11.95.
Они как бы уживаются , но в целом все можно сказать не работает. Значит в чем собственно пролема.
Есть код эмулирующий работу 1-wire ключа DS2413 ( назовем код B) и есть код выключателя на 4 положения ( по типу шагового реле с двумя шимами - условно назовем А). Их надо объединить в один код включателя с возможностью управления и индикации по 1 -wire. По одиночке коды 100 процентов рабочии. Так вот.
Первое. Приоритет у кода А. Пока идет работа ШИМОВ ( Timer1 и Timer2). А она заключается в том , что в зависимости от режима они плавно устанавливаются либо в ноль либо на максимум, либо один в ноль другой в максимум. Работа кода В запрещена,т.е Timer0 остановлен. Управление по INT0. Вроде все просто.Но...
По INT0 происходит срабатывание, кнопка работает, ШИМы работают, режимы переключаются. В то же время Timer0 включаетя и молотит без остановк , никак не реагируя на управляющий код предназначенный для него. Хотя по науке пока работает обработчик INT0, он работать не должен.
Вы знаете сейчас вот это написал и понял одно - каша. Не зря говорят, если правильно задал вопрос, то наполовину задачу решил. Придется вернутся к началу.
Второе. Ньюансы - могут ли таймеры в настройках иметь разные прескале (делители) у меня Таймер ноль 64, а 1 и 2 - единица. Не будут конфликтовать между собой.?
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение Секретный кот »

По первому сам мало что понял :wink:, а по второму – могут, конечно. Конфликтовать не будут.
Даже остановленные часы два раза в сутки показывают правильное время.
Radan
Мучитель микросхем
Сообщения: 465
Зарегистрирован: Ср июн 21, 2006 08:24:32
Откуда: Лисичанск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение Radan »

Здесь кому интересно подключение ЖКИ к ЮСБ.
http://bascom.at.ua/publ/podkljuchaem_z ... b/1-1-0-35
Аватара пользователя
Intel_agent
Родился
Сообщения: 18
Зарегистрирован: Вс апр 18, 2010 16:43:08
Откуда: Улан-Удэ

Re: BASCOM AVR в вопросах и ответах

Сообщение Intel_agent »

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

Код: Выделить всё

Config Int0 = Falling
On Int0 _int0

_int0:
Waitms Debouncetime
If Portd.3 = 0 Then
   If Zad_temp <> 500 Then Incr Zad_temp
Else
   If Zad_temp <> 0 Then Decr Zad_temp
End If
Return

Строки описания переменных и времени задержки опущены, мега8, такт 4 метра
Энкодер PEC16-4220F-S0024
Аватара пользователя
pavel123
Грызет канифоль
Сообщения: 268
Зарегистрирован: Чт май 17, 2007 09:44:13
Откуда: Украина, г. Кривой Рог

Re: BASCOM AVR в вопросах и ответах

Сообщение pavel123 »

А вот в обучалке от WildCat есть примеры с кодером
http://www.decada.org.ru/project/lesson ... /index.php
Может пригодиться...
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

Re: BASCOM AVR в вопросах и ответах

Сообщение kip96 »

Кто програмирует с Баскома? Я выставил в нём ссылку на пони прог,он открывется но HEX код не загружается. Как настроить?
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Аватара пользователя
dimon-790
Мучитель микросхем
Сообщения: 442
Зарегистрирован: Пт авг 29, 2008 09:22:37
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение dimon-790 »

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


а в хелпик заглянуть слабо? там между прочим много всего интересного , среди прочего имеется готовый исходик

Код: Выделить всё

 

$regfile = "m128def.dat"                                   ' specify the used micro

$crystal = 4000000                                         ' used crystal frequency

$baud = 19200                                               ' use baud rate

$hwstack = 32                                               ' default use 32 for the hardware stack

$swstack = 10                                               ' default use 10 for the SW stack

$framesize = 40                                             ' default use 40 for the frame space

 

Print "Encoder test"

Dim B As Byte

'we have dimmed a byte because we need to maintain the state of the encoder

 

Portb = &B11                                               ' activate pull up registers

 

Do

  B = Encoder(pinb.0 , Pinb.1 , Links , Rechts , 1)

  '                                               ^--- 1 means wait for change which blocks programflow

  '                               ^--------^---------- labels which are called

  '              ^-------^---------- port PINs

  Print B

Waitms 10

Loop

End

 

'so while you can choose PINB0 and PINB7,they must be both member of PINB

'this works on all PIN registers

 

Links:

Print "left rotation"

Return

 

Rechts:

Print "right rotation"

Return

End
Все мы работаем по методу Робинзона Крузо – ждем пятницу.
Аватара пользователя
Intel_agent
Родился
Сообщения: 18
Зарегистрирован: Вс апр 18, 2010 16:43:08
Откуда: Улан-Удэ

Re: BASCOM AVR в вопросах и ответах

Сообщение Intel_agent »

pavel123
Пробовал, результат выше
dimon-790
Спасибо, попробую
Совсем забыл, что там есть нормальный help :roll:
Аватара пользователя
nsl2004
Мучитель микросхем
Сообщения: 402
Зарегистрирован: Пт май 29, 2009 10:14:29

Re: BASCOM AVR в вопросах и ответах

Сообщение nsl2004 »

Друзья подкажитe пожалуйста правильно ли понимаю следующие поцедуры
На С# написано if (Step) { бла бла ... step unsigned char
Я понимаю так что если Step положителен то итд.
Значит на Баскоме If Step>0 Then блабла - правильно?
На C# if (!Step) бла бла
А на Баскоме? IF STEP=0 Then?? Ну с учетом того что Step может быть только положительным?
Или все таки имеется ввиду что не Step - тогда как эту процедуру реализовать на баскоме?
Аватара пользователя
pavel123
Грызет канифоль
Сообщения: 268
Зарегистрирован: Чт май 17, 2007 09:44:13
Откуда: Украина, г. Кривой Рог

Re: BASCOM AVR в вопросах и ответах

Сообщение pavel123 »

Можно сделать при помощи select case - Блок выбора по ключу
Что то типа
select case step
case is>0
бла-бла-бла
case is<0
бла-бла-бла
case else (типа =0, но можно и явно задать ключ)
бла-бла-бла
end select
Аватара пользователя
nsl2004
Мучитель микросхем
Сообщения: 402
Зарегистрирован: Пт май 29, 2009 10:14:29

Re: BASCOM AVR в вопросах и ответах

Сообщение nsl2004 »

2pavel123
Спасибо. Т.е я так понял, что понял логику выражений на Си правильно, и один из методов реализовать Вы мне подсказали. Мое число может быть только положительным. Значит условие меньше нуля отпадает. т.е получается , что я на Баскоме реализовал правильно? С использованием IF?
Ответить

Вернуться в «AVR»