Страница 35 из 304

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

Добавлено: Вт май 25, 2010 21:27:13
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

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

Добавлено: Вт май 25, 2010 21:47:10
PB_EXPERT
Нет завершающего End If.

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

Добавлено: Вт май 25, 2010 22:12:43
nsl2004
PB_EXPERT писал(а):Нет завершающего End If.
А где он должен быть? Если вторым в конце, то пробовал и в конце и в середине . Не выходит. Где то есть не стыковка.
P.S. Скажите , а можно сделать такое допущение, что сколько в преобразуемом коде операторов IF столько же должно быть и END IF?
P.S.P.S. Как оказалось можно :))

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

Добавлено: Ср май 26, 2010 14:18:04
Intel_agent
nsl2004, каждое if должно оканчиваться end if
Если не ошибаюсь, у тебя их должно быть 4 штуки, хотя по такому коду сложно понять, находится ли условие внутри другого условия или же оно самостоятельное...

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

Добавлено: Ср май 26, 2010 16:48:24
nsl2004
2Intel_agent Да спасибо. Теперь работает.

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

Добавлено: Пт май 28, 2010 11:00:33
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
т.е заменит ли она строчку приведенную вначале поста

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

Добавлено: Пт май 28, 2010 13:08:09
Секретный кот
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 это дискретный коэффициент, на который делится тактовая частота МК. Необходимость лазить вручную в регистры таймера абсолютно отпадает.

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

Добавлено: Пт май 28, 2010 14:34:41
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 мне понятно - в даташите подробно описано.

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

Добавлено: Пт май 28, 2010 23:17:18
Секретный кот
2 nsl2004
8051 и AVR всё же отличаются малость :wink:
Какая у вас версия компилятора?
У меня несколько таймеров нормально уживались вместе.

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

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

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

Добавлено: Вс май 30, 2010 00:02:10
Секретный кот
По первому сам мало что понял :wink:, а по второму – могут, конечно. Конфликтовать не будут.

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

Добавлено: Ср июн 02, 2010 10:38:12
Radan
Здесь кому интересно подключение ЖКИ к ЮСБ.
http://bascom.at.ua/publ/podkljuchaem_z ... b/1-1-0-35

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

Добавлено: Ср июн 02, 2010 13:10:24
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

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

Добавлено: Ср июн 02, 2010 22:45:14
pavel123
А вот в обучалке от WildCat есть примеры с кодером
http://www.decada.org.ru/project/lesson ... /index.php
Может пригодиться...

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

Добавлено: Чт июн 03, 2010 07:43:35
kip96
Кто програмирует с Баскома? Я выставил в нём ссылку на пони прог,он открывется но HEX код не загружается. Как настроить?

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

Добавлено: Чт июн 03, 2010 09:04:50
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

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

Добавлено: Чт июн 03, 2010 12:23:51
Intel_agent
pavel123
Пробовал, результат выше
dimon-790
Спасибо, попробую
Совсем забыл, что там есть нормальный help :roll:

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

Добавлено: Сб июн 05, 2010 00:41:51
nsl2004
Друзья подкажитe пожалуйста правильно ли понимаю следующие поцедуры
На С# написано if (Step) { бла бла ... step unsigned char
Я понимаю так что если Step положителен то итд.
Значит на Баскоме If Step>0 Then блабла - правильно?
На C# if (!Step) бла бла
А на Баскоме? IF STEP=0 Then?? Ну с учетом того что Step может быть только положительным?
Или все таки имеется ввиду что не Step - тогда как эту процедуру реализовать на баскоме?

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

Добавлено: Сб июн 05, 2010 02:14:16
pavel123
Можно сделать при помощи select case - Блок выбора по ключу
Что то типа
select case step
case is>0
бла-бла-бла
case is<0
бла-бла-бла
case else (типа =0, но можно и явно задать ключ)
бла-бла-бла
end select

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

Добавлено: Сб июн 05, 2010 08:25:54
nsl2004
2pavel123
Спасибо. Т.е я так понял, что понял логику выражений на Си правильно, и один из методов реализовать Вы мне подсказали. Мое число может быть только положительным. Значит условие меньше нуля отпадает. т.е получается , что я на Баскоме реализовал правильно? С использованием IF?