Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 13.09.2019
Сообщений: 13
1

Сформировать сигнал через ЦАП

14.11.2019, 00:02. Просмотров 1304. Ответов 4
Метки нет (Все метки)

Всем привет. Есть задание: нужно сформировать с помощью ЦАП сигнал(как на картинке ниже). Потом спомощью осциллографа проверить правильность решения. При разработке программы учитывать следующее:
1. Для того чтобы передать данные в ЦАП, используется ячейка памяти с адресом 0x0F000.
2. Для задания временных интервалов необходимо провести расчет задержек.

Umax = 5V
Амплитуда: U1 = 3/4Umax; U2 = Umax
Длительность импульсов/Период: t1 = t2 = t3 = 15 ms; Tsign = 85 ms

Микроконтроллер - ATmega8515

Название: 1.png
Просмотров: 25

Размер: 3.8 Кб

Результат (код ниже)
Сформировать сигнал через ЦАП


Вопрос: как сделать похожим сигнал на тот, который в задании? Игрался с r17, но не помогло.

Код:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
.include "m8515def.inc"
.equ  DAC=0x0F000
.dseg
    tmp:     .byte 1
.cseg
.org $0
    rjmp        reset
.org $18
 
reset:
        ldi         r16, HIGH( RAMEND )
        out         SPH, r16
        ldi         r16, LOW ( RAMEND )
        out         SPL, r16
ldi           r16, (1 << SRW10) | (1 << SRE)
out          MCUCR, r16
nachalo:
 
      ldi          r16, 0
      ldi          r18, 0xff
 
cycle:
     sts        dac, r16
     inc        r16
            
     ldi        r17,0x44
m1:                                        
     nop                                   
     nop
     nop
     nop
     dec        r17                              
     cpi        r17, 0                              
     brne       m1  
         
     cpi        r16, 0xd0
     brne       cycle 
 
           
cycle1:
     sts        dac, r16
 
    ldi        r17,0x36
m3: ldi        r19,0xff
m2:  
                                      
     nop                                   
     nop
     nop
     nop
     dec       r19                              
     cpi        r19, 0                              
     brne      m2    
     dec       r17                              
     cpi        r17, 0                              
     brne      m3                    
     
     cpi        r16, 0xd0
     brne       cycle1 
 
cycle2:
     sts        dac, r16
     inc        r16
            
     ldi        r17,0x01
m88:                                        
     nop                                   
     nop
     nop
     nop
     dec        r17                              
     cpi        r17, 0                              
     brne       m88  
         
     cpi        r16, 0xff
     brne       cycle2
 
cycle4:
     sts        dac, r16
     dec        r16
            
     ldi        r17,0x30
m8:                                        
     nop                                   
     nop
     nop
     nop
     dec        r17                              
     cpi        r17, 0                              
     brne       m8  
         
     cpi        r16, 0
     brne       cycle4
 
cycle5:
     sts       dac, r16
 
    ldi        r17,0x90
m10:    ldi    r19,0xff
m9:  
                                      
     nop                                   
     nop
     nop
     nop
     dec       r19                              
     cpi       r19,0                              
     brne      m9    
     dec       r17                              
     cpi       r17,0                              
     brne      m10                    
     
     cpi       r16,0x00
    brne      cycle5
 
    rjmp      nachalo
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.11.2019, 00:02
Ответы с готовыми решениями:

Нужно сделать чтобы сигнал сам выключался через 15 секунд
Нужно сделать чтобы сигнал сам выключался примерно секунд через 15, как сделать не знаю писал не...

как инвертировать сигнал с ЦАП?
Здравствуйте. Подскажите как мне управляемо (с ножки МК) инвертировать сигнал с ЦАП. Т.е. подавая с...

Музыка через встроенный ЦАП
Со встроенным ЦАПом немного работал, но музыку им не играл. А на сколько он вообще пригоден для...

генерация синусоидального сигнала через ЦАП STM32F407VG
есть код, написанный в cosox: #include &quot;stdyo.h&quot; #include &quot;stdlib.h&quot; #include &quot;stm32f4xx.h&quot;...

4
Тутошний я
1887 / 1003 / 185
Регистрация: 03.11.2009
Сообщений: 3,384
Записей в блоге: 2
14.11.2019, 19:15 2
Цитата Сообщение от c1505072 Посмотреть сообщение
как сделать похожим сигнал на тот, который в задании?
форма сигнала в задании не соответствует данным.
возьми лист в клеточку и нарисуй как будет выглядеть сигнал. и сравни с тем, что получается. по моему похож.

а ЦАП как сделано?и какая частота кварца?
0
2657 / 1582 / 339
Регистрация: 09.09.2017
Сообщений: 6,409
15.11.2019, 12:28 3
Цитата Сообщение от Grey Посмотреть сообщение
по моему похож.
Спад должен быть немного более крутым: нарастание идет от 0 до 3/4 за T, а спад от 1 до 0 за то же T.
Так ли это в коде не знаю. Разбираться в ассемблерной простыне без комментариев и имен переменных желания особого нет. Такое ощущение, что директиву .def автор не знает.
0
Модератор
Эксперт CЭксперт С++
3566 / 3176 / 561
Регистрация: 07.10.2015
Сообщений: 6,555
15.11.2019, 12:43 4
С программкой как раз все понятно, понятно, что работает неправильно
Чтобы были пологие склоны, надо в периоды спада/подъема значение в ЦАП необходимо выгружать постоянно, а не только после паузы. Иначе имеем резкие перепады.
Чтобы правильно настроить паузы надо однозначно знать ответ на вопрос:
какая частота кварца?
Кроме того, еще один вопрос: U1 = 3/4 Umax - нижний уровень сигнала? Если так, то его ж надо обеспечить значением ЦАП-а.
1
Тутошний я
1887 / 1003 / 185
Регистрация: 03.11.2009
Сообщений: 3,384
Записей в блоге: 2
15.11.2019, 14:53 5
Лучший ответ Сообщение было отмечено c1505072 как решение

Решение

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Спад должен быть немного более крутым: нарастание идет от 0 до 3/4 за T, а спад от 1 до 0 за то же T.
так и есть. казалось бы 3/4 далеко до максимума. но на графике склоны почти одинаковые.
Цитата Сообщение от liv Посмотреть сообщение
Чтобы были пологие склоны, надо в периоды спада/подъема значение в ЦАП необходимо выгружать постоянно
это же цап. сигнал всё равно будет ступеньками.
мне код без комментариев тоже не понравился. а решение понравилось.
обычно вычисляют значение графика и выводят через равные промежутки времени.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cycle:
     sts        dac, r16
     inc        r16
            
     ldi        r17,0x44
m1:                                        
     nop                                   
     nop
     nop
     nop
     dec        r17                              
     cpi        r17, 0                              
     brne       m1  
         
     cpi        r16, 0xd0
     brne       cycle
но в ассемблере не удобно работать с дробями. а тактовая частота всё равно высокая. вывод данных частый. ступенька на сигнале узкая.
и мы вычисляем значение задержки времени на равные промежутки значения графика.
поэтому он игрался с r17. хотя нужно было просто высчитать задержку для каждого участка графика.

Добавлено через 32 минуты
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
nachalo:
ldi          r16, 0 //0 = 0 вольт// в цикле 2 находим что 5 вольт =ff
      ldi          r18, 0xff
cycle:
     sts        dac, r16
     inc        r16
ldi        r17,0x44
m1:                                        
     nop                                   
     nop
     nop
     nop
     dec        r17                              
     cpi        r17, 0                              
     brne       m1  
cpi        r16, 0xd0 // тогда почему здесь не bd?
     brne       cycle 
cycle1:
     sts        dac, r16
ldi        r17,0x36
m3: ldi        r19,0xff //зачем эта задержка? или почему в 1 цикле её нету?
m2:  
nop                                   
     nop
     nop
     nop
     dec       r19                              
     cpi        r19, 0                              
     brne      m2    
     dec       r17                              
     cpi        r17, 0                              
     brne      m3                    
cpi        r16, 0xd0
     brne       cycle1 
cycle2:
     sts        dac, r16
     inc        r16
ldi        r17,0x01 //а здесь без задержки никак нельзя увеличить до максимума?
m88:                                        
     nop                                   
     nop
     nop
     nop
     dec        r17                              
     cpi        r17, 0                              
     brne       m88  
cpi        r16, 0xff //вот наши 5 вольт
     brne       cycle2
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.11.2019, 14:53

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

Сформировать в Matlab сигнал
Скажите,как можно с помощью программирования сформировать косинус который идет 0 до 1 мкс, а потом...

Сформировать треугольный сигнал в Simulink
Ребят, подскажите пожалуйста как построить вот такой сигнал(прикрепил изображение ниже). Всё...

Сформировать трапециевидный периодический сигнал
Здравствуйте! Нужна ваша помощь. Есть кусок кода. Нужно, чтобы вместо прямоугольных импульсов были...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.