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

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

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

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


Вы здесь » Программирование ATMEL в BASCOM. » Примеры применения в среде Баском » Генераторы синусоиды на AVR


Генераторы синусоиды на AVR

Сообщений 1 страница 11 из 11

1

Генераторы синусоиды на AVR

+2

2

Atmega8 = Синусоида + АЦП + USART
Симуляция в Протеус 7.10 + исходники Bascom 2.0.7.1 - скачать

http://s7.uploads.ru/t/CnzZR.jpg


Atmega328 = 4 синусоиды + 6 АЦП + USART (460800 бод)
Симуляция в Протеус 7.10 + исходники Bascom 2.0.7.1 - скачать
Работа в железе, без кварца наблюдается изменение выходной частоты в пределах +-1 Гц.
После установки кварца 7,3728 Мгц, нестабильность выходной частоты +-0,02Гц

http://s7.uploads.ru/t/2QUKa.jpg

Передача данных с АЦП через USART, скорость 460800 бод

http://s6.uploads.ru/t/pa0o6.jpg

Осциллограф

http://s7.uploads.ru/t/6cTY3.jpg

0

3

Atmega328P, частота 18,3728 МГц
6 каналов АЦП (режим работы Free)
USART скорость трансляции 460800 бод/сек
3 синусомды смещённые по фазе на 120° и частотой 50 Гц - реализованы аппаратными средствами МК

Симуляция (Протеус 7.10) + исходники (Bascom 2.0.7.1) + таблица расчета синусоиды (Excel 2010) - скачать

http://s7.uploads.ru/t/aWhRQ.jpg

http://s6.uploads.ru/t/8zeYn.jpg

http://s6.uploads.ru/t/vLIHz.jpg

0

4

Atmega48PA, частота 18,3728 МГц
6 каналов АЦП (режим работы Free)
USART скорость трансляции 460800 бод/сек
3 синусомды смещённые по фазе на 120° и частотой 50 Гц - реализованы аппаратными средствами МК

Симуляция (Протеус 7.10) + исходники (Bascom 2.0.7.1) + таблица расчета синусоиды (Excel 2010) - скачать

http://s7.uploads.ru/t/ZjogP.jpg http://s7.uploads.ru/t/dNnh5.jpg

0

5

Генератор 3-х фазной синусоиды на МК Atmega новых ревизий - Atmega48_88_168_328_124_324_644_1284

Частота 50 Гц, при использовании кварца, нестабильность +-0,01Гц
Фазы смещены на 120°

Использованы: TIMER0; TIMER1 и половина TIMER2

Чистый Bascom, ассемблера нет.

'===============================================================================
'*
'*  Автор: Sasha_1973
'*  Дата:  25.01.2014 г.
'*
'*  МК:  ATmega48PA
'*  Тактовая частота МК:  18,432 MГц
'*
'*  Компилятор: BASCOM-AVR 2.0.7.1
'*  Используемый шрифт в Bascom: Consolas; размер = 14
'*
'*  Программа симулятор: Proteus 7.10 SR0
'*
'*  Описание: 3 синусоиды (аппроксимация = 252 точки), смещённые по фазе на 120° + Atmega48PA
'*
'===============================================================================
  $map              ' Получаем карту распределения памяти
  $regfile = "m48def.dat"       ' Используемый контроллер
'  $crystal = 7372800       ' 7,3728 МГц, кварц для стабильной работы USART во всём диапазоне скоростей передачи и приёма
  $crystal = 18432000       ' 18,432 МГц, кварц для стабильной работы USART во всём диапазоне скоростей передачи и приёма
  $framesize = 32   'размер области используемой и необходимой для преобразований
  $hwstack = 40     ' Размер аппаратного стека
  $swstack = 16     ' Размер программного стека
'----------------------  Настройка TIMER1  -------------------------------------
  Config Timer1 = Timer , Clear Timer = 1 , Prescale = 1
  On Compare1a Обработка_прерывания_compare1a
  Stop Timer1
'----------------------  Настройка TIMER0  -------------------------------------
  Config Timer0 = Pwm , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
  Stop Timer0
'----------------------  Настройка TIMER2  -------------------------------------
  Config Timer2 = Pwm , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
  Stop Timer2
'-------------------  Используемые переменные  ---------------------------------

  Dim Цикл_значение_синуса As Word

'-------  Для генератора 3-х фазной синусоиды, фазы смещены на 120°  -----------

  Dim 1_фаза As Byte
  Dim 2_фаза As Byte
  Dim 3_фаза As Byte

  Dim Значение_синуса(252) As Byte

  Dim Значение_синуса_1_фаза As Byte
  Dim Значение_синуса_2_фаза As Byte
  Dim Значение_синуса_3_фаза As Byte

'------------------  Запуск и предварительные настройки  -----------------------
'------  Закидываем значения выводимой синусоиды из таблицы в оперативку  ------

  For Цикл_значение_синуса = 1 To 252
      Значение_синуса(цикл_значение_синуса) = Lookup(цикл_значение_синуса , Таблица_синуса_252)
  Next Цикл_значение_синуса

'------  Делаем смещение фаз на 120°  ------------------------------------------

  Значение_синуса_1_фаза = 0       ' 1 фаза
  Значение_синуса_2_фаза = 84       ' 2 фаза
  Значение_синуса_3_фаза = 168       ' 3 фаза

'  Compare1a = 580 ' Для 252 точек. Значение для получения частоты 50,00 Гц, при частоте кварца 7,3728 Мгц
  Compare1a = 1462  ' Для 252 точек. Значение для получения частоты 50,00 Гц, при частоте кварца 18,432 Мгц

'------  Запускаем аппаратные средства контроллера  ----------------------------
  Start Timer0
  Start Timer1
  Start Timer2
'--------------  Разрешаем работу необходимых прерываний  ----------------------
  Enable Compare1a
'------------  Разрешаем работу всех включенных прерываний  --------------------
  Enable Interrupts
'===============================================================================
'                   Г Л А В Н Ы Й         Ц И К Л
'===============================================================================
  Главный_цикл:

    nop

   Idle
  Goto Главный_цикл
End
'===============================================================================
'                        П О Д П Р О Г Р А М М Ы
'===============================================================================

'===============================================================================
  Обработка_прерывания_compare1a:
'-------------------------------------------------------------------------------
'     1 фаза
    Incr Значение_синуса_1_фаза       ' Высчитываем выводимое значение синуса для 1 фазы
    If Значение_синуса_1_фаза > 252 Then Значение_синуса_1_фаза = 1       ' Исключаем переполнение счетчиков значений синуса, для 252 точек
    Ocr0a = Значение_синуса(значение_синуса_1_фаза)       ' Забираем значение синуса из массива, всего 252 значения в регистр таймера 0
'     2 фаза
    Incr Значение_синуса_2_фаза       ' Высчитываем выводимое значение синуса для 2 фазы
    If Значение_синуса_2_фаза > 252 Then Значение_синуса_2_фаза = 1       ' Исключаем переполнение счетчиков значений синуса, для 252 точек
    Ocr0b = Значение_синуса(значение_синуса_2_фаза)       ' Забираем значение синуса из массива, всего 252 значения в регистр таймера 0
'     3 фаза
    Incr Значение_синуса_3_фаза       ' Высчитываем выводимое значение синуса для 3 фазы
    If Значение_синуса_3_фаза > 252 Then Значение_синуса_3_фаза = 1       ' Исключаем переполнение счетчиков значений синуса, для 252 точек
    Ocr2b = Значение_синуса(значение_синуса_3_фаза)       ' Забираем значение синуса из массива, всего 252 значения в регистр таймера 0

'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Таблица_синуса_252:       ' 252 значения синусоиды
'-------------------------------------------------------------------------------
    Data &H7E , &H82 , &H85 , &H88 , &H8B , &H8E , &H91 , &H94 , &H97 , &H9B
    Data &H9E , &HA1 , &HA4 , &HA7 , &HAA , &HAD , &HAF , &HB2 , &HB5 , &HB8
    Data &HBB , &HBD , &HC0 , &HC3 , &HC5 , &HC8 , &HCB , &HCD , &HCF , &HD2
    Data &HD4 , &HD6 , &HD9 , &HDB , &HDD , &HDF , &HE1 , &HE3 , &HE5 , &HE7
    Data &HE8 , &HEA , &HEC , &HED , &HEF , &HF0 , &HF1 , &HF3 , &HF4 , &HF5
    Data &HF6 , &HF7 , &HF8 , &HF9 , &HF9 , &HFA , &HFB , &HFB , &HFC , &HFC
    Data &HFC , &HFC , &HFC , &HFC , &HFC , &HFC , &HFC , &HFC , &HFC , &HFB
    Data &HFB , &HFA , &HF9 , &HF9 , &HF8 , &HF7 , &HF6 , &HF5 , &HF4 , &HF3
    Data &HF1 , &HF0 , &HEF , &HED , &HEC , &HEA , &HE8 , &HE7 , &HE5 , &HE3
    Data &HE1 , &HDF , &HDD , &HDB , &HD9 , &HD6 , &HD4 , &HD2 , &HCF , &HCD
    Data &HCB , &HC8 , &HC5 , &HC3 , &HC0 , &HBD , &HBB , &HB8 , &HB5 , &HB2
    Data &HAF , &HAD , &HAA , &HA7 , &HA4 , &HA1 , &H9E , &H9B , &H97 , &H94
    Data &H91 , &H8E , &H8B , &H88 , &H85 , &H82 , &H7E , &H7B , &H78 , &H75
    Data &H72 , &H6F , &H6C , &H69 , &H66 , &H62 , &H5F , &H5C , &H59 , &H56
    Data &H53 , &H50 , &H4E , &H4B , &H48 , &H45 , &H42 , &H40 , &H3D , &H3A
    Data &H38 , &H35 , &H32 , &H30 , &H2E , &H2B , &H29 , &H27 , &H24 , &H22
    Data &H20 , &H1E , &H1C , &H1A , &H18 , &H16 , &H15 , &H13 , &H11 , &H10
    Data &H0E , &H0D , &H0C , &H0A , &H09 , &H08 , &H07 , &H06 , &H05 , &H04
    Data &H04 , &H03 , &H02 , &H02 , &H01 , &H01 , &H01 , &H01 , &H01 , &H00
    Data &H01 , &H01 , &H01 , &H01 , &H01 , &H02 , &H02 , &H03 , &H04 , &H04
    Data &H05 , &H06 , &H07 , &H08 , &H09 , &H0A , &H0C , &H0D , &H0E , &H10
    Data &H11 , &H13 , &H15 , &H16 , &H18 , &H1A , &H1C , &H1E , &H20 , &H22
    Data &H24 , &H27 , &H29 , &H2B , &H2E , &H30 , &H32 , &H35 , &H38 , &H3A
    Data &H3D , &H3F , &H42 , &H45 , &H48 , &H4B , &H4E , &H50 , &H53 , &H56
    Data &H59 , &H5C , &H5F , &H62 , &H66 , &H69 , &H6C , &H6F , &H72 , &H75
    Data &H78 , &H7B , &H7E
'===============================================================================

Симуляция Протеус 7.10 sr0 + исходники Bascom 2.0.7.1  -  скачать

Снимки экрана
http://s8.uploads.ru/t/O7jWt.jpg http://s8.uploads.ru/t/aZmOx.jpg

http://s8.uploads.ru/t/Cofrw.jpg http://s9.uploads.ru/t/f58dL.jpg

+1

6

Генератор синусоиды 25 Гц на Attiny85

Симуляция (Протеус 7.10) + исходник (Bascom 2.0.7.1)  -  скачать

http://s1.uploads.ru/t/dEMKR.jpg

+1

7

Синус 50 Гц, чистый Bascom

исходник + симуляция  -  скачать

http://s9.uploads.ru/t/PvHtw.jpg

+1

8

Синус из двух полупериодов 252 точки

Исходник + симуляция  -  скачать

http://s7.uploads.ru/t/KCgYu.jpg

+1

9

Документация MicroChip по этому поводу, правда для Pic, но главное принцип  -  скачать

Синус из двух полупериодов 32 точек, исходник+симуляция  -  скачать

Синус из двух полупериодов 64 точек, исходник+симуляция  -  скачать

Синус из двух полупериодов 127 точек, исходник+симуляция  -  скачать

+1

10

Генератор синуса, 127 значений, Bascom + ASM

Целый период + 2 полупериода  -  выбирается здесь ( Const Sine_period = 0       'Если 1, выводится чистая синусоида на OCR0a и OCR0b   )

Симуляция + исходник  -  скачать

http://s5.uploads.ru/t/gYIns.jpg http://s8.uploads.ru/t/CS2v6.jpg

0

11

Синус 10...1000 Гц

Исходник + симуляция  -  скачать

http://sd.uploads.ru/t/gRmZS.jpg

+1


Вы здесь » Программирование ATMEL в BASCOM. » Примеры применения в среде Баском » Генераторы синусоиды на AVR