Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
ALEX666
0 / 0 / 0
Регистрация: 14.02.2009
Сообщений: 6
1

Программа для анализа работы АЦП на AVR Atmel

07.05.2009, 21:37. Просмотров 4383. Ответов 0
Метки нет (Все метки)

программа для анализа работы АЦП на avr Atmel. нужно организовать вычитание двух потенциометров! ADC6-ADC7! вычитание происходит все горит, когда один в макс. а другой в мин. показвает максимальное значение 10! а надо чтобы показвал от -FF ДО FF! ПОМОГИТЕ НАЙТИ ОШИБКУ ИЛЬ ВАШ ВАРИАНТ......... СПАСИБО ЗАРАНЕЕ
разрядность входных сигналов: 10
система счисления: 16
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
.include "m8535def.inc" 
                      ;Назначим новые имена для регистров
 .def  count=r20            ;Счетчик, позиция
 .def  takt=r21
 .def  tmp=r19            ;Регистр буферный
 .def  znak=r29               ;Знак числа на вывод
 
    .org $0                    ;Начальный адрес
     rjmp reset
 .org $0E 
  rjmp in_ADC        
 .cseg                    ;Начало сегмента кодов (сама программа)
 .org $200
 
            ;Вектор прерывания от АЦП
                                  ;Устанавливаем указатель стека на конец RAM
reset: ldi r16, low(RAMEND) 
 ldi r17, high(RAMEND) 
 out spl, r16 
 out sph, r17 
                                    ;Конфигурация входов выходов
    ldi r16, 0xFE   ;0 бит порта А
 out DDRB,r16    ;на вход
 ldi r16, 0x00 ; все биты порта А
 out DDRA, r16 ;устанавливаем на ввод
 ldi r16, 0xFF 
 out DDRC, r16 ;Порт D и порт С устанавливаем
 out DDRD, r16 ;на вывод
; out PORTA, r16 ;Подтягивающие резисторы
 out PORTB,r16
 
  ldi takt, 1                     ;Начальное значение такта 
 ldi count,1                     ;Начальное значение счетчика (позиции)
 
  clr r22
 clr r23
 clr r25                         ;Готовим для вывода знака
 
                                    ;Инициализация АЦП
 ldi r16, 0x26 
 out ADMUX, r16                 ;Выравнивание влево, канал 6
 ldi r16, 0xEF                 ;Разрешение работы, циклическая работа,
 out ADCSRA, r16                 ;разрешение прерывания, КД=128
 
 sei                             ;Разрешение прерываний
 
main:
    nop
 rjmp main                     ;Ожидание прерывания
                                  ;Подрограмма прерывания от АЦП
 
 
 
in_ADC:  
    in r27,SREG
 
kanal1:
 cpi takt ,2
 breq kanal2
 ldi r16, 0x26 
 out ADMUX, r16                 ;Выравнивание влево, канал 6
    in r16, ADCL                 ;Младший байт в r16
 in r17, ADCH                 ;Старший байт в r17
 
 
;lsr r17
 
;lsr r17 
             ;формируем число в r17
;lsr r17
 
 andi r17,0xFF
 inc takt
 
 rjmp super_prer
 
kanal2:
 ldi r16, 0x27 
 out ADMUX, r16                 ;Выравнивание влево, канал 7
 in r22, ADCL                 ;Младший байт в r22
 in r23, ADCH                 ;Старший байт в r23
 
 
;lsr  r23
 
;lsr r23                             ;формируем число в r23
 
;lsr r23
 
andi takt, 1                      ;На первый такт
 
andi r23, 0xFF
 
rcall raznost
 
clr r16
 
rcall preobr_koda
rcall indic
rjmp super_prer
 
super_prer:
 
 ldi r16, 0xEF                ;Разрешение работы, циклическая работа,
 out ADCSRA, r16                 ;разрешение прерывания, КД=128
 out SREG,r27
 reti
 
raznost:
 
sbc r17, r23
brlo minus                        ;разность чисел
rjmp plus
         
preobr_koda:
 
subi r17, 0xFF
brlo preobr_chislo
inc r16
rjmp preobr_koda
 
preobr_chislo:
 
ldi r18, 0xFF
add r17, r18
swap r16
add r16, r17
ret
 
 
plus:
    ldi znak,0x00                           ;код темноты(плюс)
    rjmp rezultat
 
minus:
    ldi znak,0x40                           ;код минуса
    neg r17
 rjmp rezultat
 
 
 
rezultat: 
 ret
 
indic: 
    cpi count, 2                    ;Если позиция 2, то 
 breq cifir_2                     ;на выдачу старшей цифры
 cpi count, 3                    ;Если позиция 3, то
 breq cifir_3                     ;на выдачу знака числа
 
cifir_1: 
 mov tmp, r16                 ;Иначе выделяем младшую цифру
 andi tmp, 0x0F 
 inc count
 ldi r26,0x01 
 rjmp konec_rasch                 ;Переходим на конец выделения цифры
 
cifir_2: 
    mov tmp, r16                ;Выделяем старшую цифру
 swap tmp 
 andi tmp, 0x0F 
 inc count
 ldi r26,0x02
 rjmp konec_rasch                 ;Переходим на конец выделения цифры
    
cifir_3: 
    mov tmp,znak
 ldi count,1
 ldi r26,0x04
 out PORTD, r26                  ;Выдача кода позиции
 out PORTC, tmp
 ret
konec_rasch:
 ldi r31,$01
 ldi r30,$00 ;чтение 
 add r30, tmp 
 clr tmp
    lpm
    mov tmp,r0
  
 out PORTD, r26                  ;Выдача кода позиции
 out PORTC, tmp
  ret                         ;Иначе сразу возврат из п/п прерывания
  .org $80 ;запись в PZU
     .db $3F,$06,$5B,$4F,$66,$6D,$7D,$07,$7F,$6F,$77,$7C,$39,$5E,$79,$71
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2009, 21:37
Ответы с готовыми решениями:

ключик для IAR 6.11 Atmel AVR ...
не знаю корректен ли в данном сообществе и на данном форуме такой вопрос .. Но как новичок, сделав...

Ассемблер для микроконтроллеров Atmel AVR
Всем приветы, люди кто может помочь с написанием программки на ассемблере для микроконтроллеров...

Настройка Netbeans для программирования Atmel AVR
Всем привет. В статье речь пойдет о настройке IDE Netbeans для программирования 8-битных...

Внешний АЦП для AVR
Здравствуйте форумчане. Необходим совет по поводу внешнего АЦП для МК. Для решения моей задачи...

Работа с АЦП (ATMega8, Atmel Studio 6.2)
Есть схема, которая выводит уровень дыма в воздухе, то есть показывает уровень пожарной опасности....

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2009, 21:37

Atmel AVR
друзья, не подскажите возможно ли с помощью программного кода спалить микроконтроллер фирмы Atmel...

АЦП замена АЦП в AVR
Перешёл с AVR на STM32. И вот столкнулся с проблемой. Как подключить датчики с выходом 0-5В на АЦП...

Подскажите по HEX Atmel AVR
Здравствуйте пишу дополнение для программы МК Atmega8. Суть такова, есть исходники ассемблера, по...


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

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

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