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

Обсуждаем контроллеры компании Atmel.
Ответить
Электрический кот
Аватара пользователя
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Сообщение Igor_67 »

Unorm=Сadc*Uref/1024
Цапу крутить надо!!! Ку или не ку?
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск

Сообщение edm2007 »

Да, именно OCR2 (даташит в помощь). И еще, Вы уж определитесь:

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

Enable oc2   '  разрешаем прерывание по совпадению
или

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

Enable Timer2  ' разрешаем прерывание по переполнению
Ну или обработчик для переполнения допишите.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 442
Зарегистрирован: Пт авг 29, 2008 09:22:37

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

Народ кто успел пощупать PS/2 ?. В баскоме есть команда Sendscankbd что она сканирует и пересылает ? или что-то одно ?Не могу разобраться , кто в курсе пните в нужном направлении.
Все мы работаем по методу Робинзона Крузо – ждем пятницу.
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 693
Зарегистрирован: Вт сен 15, 2009 16:23:06
Откуда: Москва

Сообщение TRIOD »

Доброе время суток.

Ктонибудь разбирается в алгоритме Герцеля. Это типа преобразования фурье, но с направленостью на конкретные частоты.
Вроде написал. Проверяю в протэусе, подаю на АЦП синусоиду с частотой в 1КГц. В результате на выходе частоты ниже 1000гц имеют большию амплитуду по сравнению с частотой в 1000гц.

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

$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 64
$swstack = 32
$framesize = 48
$lib "lcd4.lbx"
  ''Ïåðåìåííûå

Const N = 250                                               '×èñëî âûáîðîê = 128
Dim New_sample As Word                                      'Äàííûå îò ÀÖÏ
Dim Samples As Byte                                         'Ñ÷åò÷èê âûáîðîê
Dim F As Byte
Dim Coeff(18) As Single
Dim Sine(18) As Single
Dim Cosine(18) As Single
Dim Q2(18) As Single
Dim Q1(18) As Single
Dim Q0(18) As Single
Dim Real As Single
Dim Imag As Single
Dim Magnitude(19) As Single                                 'Àìïëèòóäà ÷àñòîòû
Dim Ready As Bit                                            'Ñèãíàë îêîí÷àíèÿ ðàñ÷åòîâ
Dim I As Byte
Dim Aru As Single

   Coeff(1) = 1.999769567                                   '13 Hz
   Coeff(2) = 1.999750891                                   '16 Hz
   Coeff(3) = 1.999697531                                   ' 24 Hz
   Coeff(4) = 1.999615714                                   ' 35 Hz
   Coeff(5) = 1.999460733                                   ' 53 Hz
   Coeff(6) = 1.999190637                                   ' 79 Hz
   Coeff(7) = 1.998683059                                   ' 118 Hz
   Coeff(8) = 1.997662211                                   ' 178 Hz
   Coeff(9) = 1.995612555                                   ' 267 Hz
  Coeff(10) = 1.991358877                                   ' 400 Hz
  Coeff(11) = 1.98228304                                    ' 600 Hz
  Coeff(12) = 1.954536247                                   ' 1000 Hz
  Coeff(13) = 1.919884674                                   ' 1350 Hz
  Coeff(14) = 1.82657261                                    ' 2024 Hz
  Coeff(15) = 1.624274597                                   ' 3036 Hz
  Coeff(16) = 1.198548017                                   ' 4554 Hz
  Coeff(17) = 1.367847804                                   ' 6830 Hz
  Coeff(18) = -0.963507348                                  ' 10250 Hz




  Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.1 , Db7 = Portb.3 , E = Portb.2 , Rs = Portb.0
Config Lcdmode = Port

'Êîíôèãóðàöèÿ ÀÖÏ
Config Pinc.0 = Input                                       'Âõîä íà ADC(0)
Config Adc = Single , Prescaler = 64 , Reference = Avcc     '×àñòîòà ÀÖÏ 125kHz
Start Adc
Config Timer2 = Timer , Prescale = 8 , Compare = Disconnect , Clear Timer = 1
Ocr2 = 32
On Oc2 Pulse



For F = 0 To 17
Sine(f + 1) = Lookup(f , Tab_sin)
Cosine(f + 1) = Lookup(f , Tab_cos)
Next F

Enable Oc2
Enable Interrupts
'=========================
'============= Ïðîãðàììà ===================
Cls
Do
'Âêëþ÷åíèå àëãîðèòìà

If Ready = 1 Then

Cls
Aru = Magnitude(12)
Lcd Aru
Lowerline
Aru = Magnitude(18)
Lcd Aru
For F = 1 To 18
   Q0(f) = 0                                                'îáíóëÿåì Y1 è Y2 â íà÷àëå öèêëà
   Q1(f) = 0
   Q2(f) = 0
Next F
Ready = 0
Samples = 0
Enable Oc2
End If
Loop

'-------------------------------------------------------------------------------
Pulse:

   New_sample = Getadc(0)                                   'Ïîëó÷àåì äàííûå ÀÖÏ
   New_sample = New_sample * 5
   New_sample = New_sample \ 1024

   'Q0 = Coeff * Q1 - Q2 + Sample
   'Q2 = Q1
   'Q1 = Q0
   For F = 1 To 18                                          'Ïðîñ÷èòûâàåì âñå ÷àñòîòû
      Q0(f) = Q1(f) * Coeff(f)
      Q0(f) = Q0(f) - Q2(f)
      Q0(f) = Q0(f) + New_sample
      Q2(f) = Q1(f)
      Q1(f) = Q0(f)
   Next F

   Incr Samples                                             'ñ÷åò÷èê îáðàáîòàííûõ âûáîðîê

'Ôèíàëüíûé ðàñ÷åò ïîñëå ïîëó÷åíèÿ âñåõ 250 âûáîðîê
   If Samples = N Then
      Disable Oc2                                           'Îñòàíàâëèâàåì ñáîð âûáîðîê
      For F = 1 To 18
         'M = D1 * D1 + D2 * D2 - D1 * D2 * S
         'real = (Q1 - Q2 * cosine)
         'Imag =(q2 * Sine)
          'Magnitude2 = Real2 + Imag2

          Real = Q2(f) * Cosine(f)
          Real = Q1(f) - real
          Imag = Q2(f) * Sine(f)
          Magnitude(f) = Real + Imag
          Magnitude(f) = Sqr(magnitude(f))
         Ready = 1
      Next F
   End If
Return



Tab_sin:

Data 0.015782706! , 0.015782706! , 0.01739098! , 0.019602283! , 0.023220566!
Data 0.028446425! , 0.036283712! , 0.048336552! , 0.066201454! , 0.092857179!
Data 0.132809969! , 0.21200711! , 0.280197626! , 0.407318211! , 0.583466373
Data 0.800543979! , 0.982940486! , 0.87630668!

Tab_cos:
Data 0.999884783! , 0.999875445! , 0999848765! , 0.999807857! , 0.999730366!
Data 0.999595319! , 0.999341529! , 0.998831106! , 0.997806278! , 0.995679439!
Data 0.99114152! , 0.977268124! , 0.959942337! , 0.913286305! , 0.812137299!
Data 0.599274008! , 0.183923902! , -0.481753674!
Только абсолютная пустота бездны принесёт мне покой.
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Сообщения: 67
Зарегистрирован: Вт фев 03, 2009 01:13:22
Откуда: Киев

Сообщение Elektrik158 »

Добрый день прошу помощи. Только начинаю осваивать Баском,поэтому много вопросов и проблем. В частности в данный момент беспокоит следующее:
от сюда http://avrproject.ru/publ/modul_display ... 0/1-1-0-39 были скачаны исходники.
все файлы закидываю в одну папку и открываю файл firmware.bas
При попытке откомпилить выкидывает
Error : 364 Line : 419 Name not allowed, is used by constant/variable [PE] , in File : 3310end.bas
Error : 364 Line : 440 Name not allowed, is used by constant/variable [FE] , in File : 3310end.bas
когда щелкаю по первой ошибке открывается файл 3310end.bas на строчках:

Pe:
Data &H7F , &H01 , &H01 , &H01 , &H7F
Pe1:
Data &H7C , &H04 , &H04 , &H04 , &H7C
подскажите куда копать,может надо что-то в самом баскоме предварительно настроить.
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск

Сообщение edm2007 »

Добрый.

Все отлично компилируется. Только что попробовал.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Реклама
Открыл глаза
Сообщения: 67
Зарегистрирован: Вт фев 03, 2009 01:13:22
Откуда: Киев

Сообщение Elektrik158 »

стоит 2.0.5.0 и 2.0.5.0demo, в обоих одно и то же, а у вас какая версия стоит?
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск

Сообщение edm2007 »

1.11.9.8
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Открыл глаза
Сообщения: 67
Зарегистрирован: Вт фев 03, 2009 01:13:22
Откуда: Киев

Сообщение Elektrik158 »

Большое спасибо.
поставил 1.11.9.8 все действительно откомпилилось,я два дня как дурак все подряд комментил.
честно говоря непонятно почему более поздняя версия настолько продлематичная
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 725
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

Сообщение amv2000 »

Elektrik158 писал(а): когда щелкаю по первой ошибке открывается файл 3310end.bas на строчках:

Pe:
Data &H7F , &H01 , &H01 , &H01 , &H7F
Pe1:
Data &H7C , &H04 , &H04 , &H04 , &H7C
подскажите куда копать,может надо что-то в самом баскоме предварительно настроить.
На том же сайте был совет попробовать поменять переменные состоящие из одной буквы на свои из трех...я еще не пробовал
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина

Сообщение vanyap1 »

А возможно в баскоме как-то сгруппировать однотипные переменные, например -

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

Dim a As Byte
Dim b As Byte
Dim c As Byte
Dim d As Byte
Dim f As Byte
Dim g As Byte
Dim h As Byte
в что то похожее на это -

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

dim a , b , c , d , f , g , h As Byte


И вопрос второй: Возможно создать файл с настройками дисплея, например, этот кусок кода туда впихнуть и просто в программах в будущем давать ссылку на этот файл

пример:

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

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск

Сообщение edm2007 »

Группировать однотипные переменные можно созавая массив, например.

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

Dim Rank(10) as Byte
В результате получим 10 байтовых переменных, различаемых по индексу (Rank(1), Rank(2), Rank(3)...).

Если же Вам нужны именно A, B, C..., то можно сделать так:

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

Dim A As Byte , B As Byte , C As Byte       
Что же касается подключения сторонних файлов, то посмотрите немного выше на этой же странице. Где речь идет про работу с дисплеем 3310. Вот там в исходнике как раз и подключаются внешние файлы.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина

Сообщение vanyap1 »

edm2007 писал(а):

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

$lib "lcd4.lbx"
Так?


А мой код впихнуть в lcd4.lbx
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск

Сообщение edm2007 »

Нет, это подключение библиотеки (lib - library). Вам же нужно $include. Посмотрите в справке тогда, там все понятно расписано.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 725
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

Сообщение amv2000 »

edm2007 писал(а):Вам же нужно $include. Посмотрите в справке тогда, там все понятно расписано.
Не в обиду немного подробнее опишу, сохраняете Ваш файл:
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
К примеру с именем Disp.bas
далее после основного цикла
Do
.............. какая то программа

Loop

End 'конец программы

$include "Disp.bas"
подгружаете файл, иногда удобно если код слишком большой писать кусками и эти куски подгружать в программе....но это как я понял на любителя.
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина

Сообщение vanyap1 »

вот я про то же!!
есть например устройство, в котором есть термометр, термостат, секундомер, таймер, часы и еще куча всего... Так проще составить код по кусках и дать ссылки на них, нежели потом двигать взад вперед огромный код если что нибудь хочется поменять.
Контактная информация:
Мучитель микросхем
Аватара пользователя
Сообщения: 442
Зарегистрирован: Пт авг 29, 2008 09:22:37

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

Ну вроде разобрался с этой Sendscankbd , но легче не стало. Примерчик из хэлпика на практике работать отказался ни фига не печатает люди не ужели ни кто не юзает ps/2 ?
Все мы работаем по методу Робинзона Крузо – ждем пятницу.
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

Сообщение kip96 »

vanyap1 писал(а):вот я про то же!!
есть например устройство, в котором есть термометр, термостат, секундомер, таймер, часы и еще куча всего... Так проще составить код по кусках и дать ссылки на них, нежели потом двигать взад вперед огромный код если что нибудь хочется поменять.
Увлекаться не стоит. Программа может не корректно работать, при этом при компиляции не выдавать ошибки. Я в теме уже описывал ситуацию, когда в "$include" сбрасывал флаг EIFR. При этом он не сбрасывался. Долго голову ломал, пока не перенёс в основной текст программы. Тогда всё стало нормально. Так-что кто его знает какие баги вылезут.
Насчёт LCD, так распиновку можно в настройках компилятора раз указать, а в программе не писать.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина

Сообщение vanyap1 »

про ЖКИ я так, к примеру указал. Думал что можно подпрограммы повыносить за пределы основного кода.
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск

Сообщение edm2007 »

Сомнительное удовольствие, скакать по нескольким файлам в поисках тараканов. Код должен быть перед глазами, тем более в начале пути. Я так думаю что проблем у начинающего и без этого хватает. Не стоит усложнять себе жизнь. :wink:
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Ответить

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