Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
HERETIC
92 / 93 / 13
Регистрация: 10.10.2008
Сообщений: 606
Завершенные тесты: 1
1

ATMega8535. Работа с АЦП

21.12.2015, 11:39. Просмотров 1534. Ответов 17
Метки нет (Все метки)

Ребята нужна ваша помощь.
Нужно написать программу для измерения переменного напряжения, поступающего на четыре входа АЦП.

В качестве опорного напряжения я выбрал внешний источник 5В.
В качестве входов - первые четыре лапы АЦП.

Подскажите как правильно инициализировать сам АЦП и как выполнить само измерение переменного напряжения, с сохранением результата по каждому каналу в своей переменной.

Буду рад любой помощи. Я в микроконтроллерах полный профан.

Добавлено через 5 минут
Главное программа должна быть написана ассемблере
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2015, 11:39
Ответы с готовыми решениями:

АЦП, Atmega8535
Задача. Код программы: .include"m8535def.inc" .cseg .org$0 ldi r16,low(RAMEND) ldi...

ATMega8535. Работа с индикаторами
В исходном состоянии на индикаторах HG1 И HG2 горят цифры 0. По прерыванию INT0 цифра HG1 на...

Работа с АЦП
Появилась задача: управлять яркостью горения диода с помощью фоторезистора. Все делается в Atmel...

ATMega128. Работа с АЦП
Помогите, пожалуйста, найти информацию по написанию прошивки для контроллера atmega128, при...

ATmega2560. Работа с АЦП
Добрый день! Хочу сделать программу, которая по приему соответствующего символа по UART...

17
Voland_
1736 / 1069 / 107
Регистрация: 04.01.2010
Сообщений: 3,652
21.12.2015, 12:17 2
HERETIC, есть два подхода - открыть ДШ на atmega8535, найти описание ADC и понять как его иницализировать, инициализировать мультиплексор, запускать АЦП на измерение и ожидать ответа. Там не очень все это сложно, АЦП в АВР относительно прост.
Либо взять CodeVision AVR, у него есть мастер приложения, в котором вы можете выбрать нужный вам конфиг (в нем есть все, что вам надо) и создать приложение, скомпилировать его. В настройках раньше была функция создания ассемблерного кода перед линковкой, соответственно, вы можете потом посмотреть как это было сделано. Ну, или скомпилировать код и открыть его, например, в Протеусе, в режиме отладки.
0
Витальич
1277 / 1183 / 175
Регистрация: 02.12.2013
Сообщений: 4,886
21.12.2015, 12:28 3
В данном разделе дикие нравы, сейчас начнут требовать схему и наработки
Но я решил немного помочь
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
;Пацанский макрос 
    .MACRO outi         
    LDI     R16,@1          
    OUT     @0,R16  
    .ENDM
 
; ADC Init - Инициализурем АЦП. где нибудь до основного цикла
 
    outi    ADCSRA,(1<<ADEN)|(1<<ADIE)|(1<<ADSC)|(1<<ADATE)|(3<<ADPS0)
    ; Расшифровка строки
    ; ADEN = 1 - разрешаем АЦП
    ; ADIE = 1 - Разрешаем прерывания. 
    ; ADSC = 1 -  Запускаем преобразование (первое, дальше автоматом)
    ; ADATE = 1 -  Непрерывные последовательные преобразования, одно за другим.
    ; ADPS2..0 = 3 - Делитель частоты на 8 - почему на 8? Мне так нравится.
 
;Это в коде 
 
    outi    ADMUX,0b01000101
    ;Расшифровка
    ;REFS -- 0b[01]000101 первые два бита - напряжение с входа AVCC
    ;ADLAR --0b01[0]00101 следующий бит выравнивание по правому краю
    ;MUX -- 0b010[00000] Сигнал на вход идет с нулевого канала АЦП.
Далее сидим и ждем прерывания АЦП там будут значения
Обработчик мне писать влом, как и всё остальную инициализацию. Может еще кто добрый найдется и еще что посоветует.

Добавлено через 58 секунд

Не по теме:

Цитата Сообщение от Витальич Посмотреть сообщение
В данном разделе дикие нравы, сейчас начнут требовать схему и наработки
Как в воду смотрел

1
HERETIC
92 / 93 / 13
Регистрация: 10.10.2008
Сообщений: 606
Завершенные тесты: 1
21.12.2015, 12:33  [ТС] 4
Этот код я уже видел у ДиХалта. Я так понимаю, что в обработчике и нужно выполнять измерение напряжения.
0
21.12.2015, 12:33
pyzhman
21.12.2015, 13:15
  #5

Не по теме:

Витальич, Ctrl+C Ctrl+V? Ай-ай-ай, как некрасиво.:yahoo:

0
HERETIC
92 / 93 / 13
Регистрация: 10.10.2008
Сообщений: 606
Завершенные тесты: 1
21.12.2015, 13:27  [ТС] 6
pyzhman, во-первых я не просил написать всю программу. А во-вторых, прежде чем ерничать, если можете помочь, то помогите.
0
pyzhman
1161 / 516 / 76
Регистрация: 15.05.2012
Сообщений: 2,956
21.12.2015, 14:08 7
Мой предыдущий пост ни в коей мере не относится к вам. Приношу свои извинения коли неверно выразил свою мысль.
0
Витальич
1277 / 1183 / 175
Регистрация: 02.12.2013
Сообщений: 4,886
21.12.2015, 14:48 8
pyzhman, нее сейчас всё брошу и буду сам ручками писать программист может плохо кодить, но Ctrl+C Ctrl+V уметь пользоваться должен в совершенстве
HERETIC, продолжаем копи паст. Специально для pyzhman(а) всё ручками в блокнотике переписал
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
.include "m8535def.inc" 
.def      temp = r16  
 
.cseg                   
.org
    rjmp reset
.org $0E 
    rjmp in_ADC   
 
; настройки
reset:
 
    LDI YH, High(RAMEND) 
    LDI YL, Low(RAMEND)
    OUT SPH, YH
    OUT SPL, YL 
    ldi temp, 0x80
    out     acsr, temp
 
    LDI     temp, (1<<ADEN)|(1<<ADIE)|(1<<ADSC)|(1<<ADATE)|(3<<ADPS0) 
    out ADCSRA, temp    
 
; основной программный цикл 
main:
    rjmp    main
 
; обработка прерывания АЦП
in_ADC:
    in  r16, ADCL                 ;Младший байт в r16
    in  r17, ADCH                 ;Старший байт в r17
    reti
нее так не нравится, знаю я один раздельчик где можно и ручками

Добавлено через 3 минуты
pyzhman, добавили бы пару строчек для хорошего человека
0
pyzhman
1161 / 516 / 76
Регистрация: 15.05.2012
Сообщений: 2,956
21.12.2015, 15:13 9
Эх-ма. Наступлю себе на горло.
Assembler
1
2
3
4
5
6
7
8
9
10
; основной программный цикл
main:
;1. наращиваем номер канала АЦП
;если он превысил 3, то сбрасываем в ноль (для перебора четырех каналов)
;2. корректируем ADMUX в плане выбора канала
;3. запускаем измерение
;ждем флага окончания обработки (можно не использовать прерывания)
;4. читаем данные ADC
;5. делаем с ними нужные действия
rjmp main
Добавлено через 2 минуты
main и rjmp main честно содрал у Витальич'а.

Добавлено через 10 минут
Чтобы настроить АЦП, нужно занести данные в регистры ADCSRA и ADMUX.
0
Витальич
1277 / 1183 / 175
Регистрация: 02.12.2013
Сообщений: 4,886
21.12.2015, 16:17 10
Цитата Сообщение от pyzhman Посмотреть сообщение
main и rjmp main честно содрал у Витальич'а.
Это Вы моему адвокату и следователю рассказывать будете
Цитата Сообщение от pyzhman Посмотреть сообщение
(можно не использовать прерывания)
можно, но тогда как сделать измерения в спящем режиме
Я выбираю с прерываниями!!!
Цитата Сообщение от pyzhman Посмотреть сообщение
Эх-ма. Наступлю себе на горло.
интересно что Вы сейчас скажите про меня и на какую я часть наступил себе

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
.include "m8535def.inc"
.def        status_AD = r1
.def        pt_m_chanelH = r27
.def        pt_m_chanelL = r26
 
.def        AD_CL = r14
.def        AD_CH = r13
 
.def        temp = r16
  
 
.cseg                   
.org
    rjmp reset
.org $0E 
    rjmp in_ADC   
 
; настройки
reset:
 
    LDI YH, High(RAMEND) 
    LDI YL, Low(RAMEND)
    OUT SPH, YH
    OUT SPL, YL 
    ldi temp, 0x80
    out     acsr, temp
 
    LDI     temp, (1<<ADEN)|(1<<ADIE)|(1<<ADSC)|(1<<ADATE)|(3<<ADPS0) 
    out ADCSRA, temp 
 
    clr pt_m_chanelH
    ldi pt_m_chanelL, $20   
    clr status_AD
        inc status_AD
; основной программный цикл 
main:
    cp status_AD, 1
    BREQ    run_ad
    rjmp    main
run_ad: 
    clr status_AD
    ; код запуска АЦП
      rjmp  main
; обработка прерывания АЦП
in_ADC:
    in  AD_CL, ADCL                
    in  AD_CH, ADCH
    st  X+,    AD_CL    
    st  X,     AD_CH    
    
    cpi pt_m_chanelL, $21
    BREQ setup_chanel2
 
 
    cpi pt_m_chanelL, $23
    BREQ setup_chanel3
 
 
    cpi pt_m_chanelL, $25
    BREQ setup_chanel4
 
 
    cpi pt_m_chanelL, $27
    BREQ setup_chanel1
 
 
setup_chanel1: 
    LDI pt_m_chanelL,$20
; настройка канала 1
     rjmp ad_end
 
setup_chanel2: 
    LDI pt_m_chanelL,$22
; настройка канала
     rjmp ad_end
 
setup_chanel3: 
    LDI pt_m_chanelL,$24
; настройка канала
     rjmp ad_end
 
setup_chanel4: 
    LDI pt_m_chanelL,$26
; настройка канала
ad_end:
     inc status_AD  
        reti
Результаты записаны в память $20 - 21 первый канал $22 - 23 второй итд
Настройку канала я приводил выше, она совмещена с запускам, но в данном решении настройку канала и запуск AЦП надо разделить
0
pyzhman
1161 / 516 / 76
Регистрация: 15.05.2012
Сообщений: 2,956
22.12.2015, 07:40 11
У меня тут после -20-ти с лишним бахнул 0 по Цельсию. Мело вечером. Сейчас, пока разгребал, силы покинули. Но буквы знакомые в коде разобрал-таки. С учётом
Цитата Сообщение от HERETIC Посмотреть сообщение
в микроконтроллерах полный профан
наворочено круто. Применение Х совершенно не допустимо. И этот спящий режим (ну да, можно и опустить) совсем не к месту. Опять же флажок в обработчике. Смысл великий? Получается дубль ADIF.
Ну да ладно, вроде победили настройку и запуск (надеюсь). Осталась самая большая бяка -
Цитата Сообщение от HERETIC Посмотреть сообщение
выполнить само измерение переменного напряжения
0
Витальич
1277 / 1183 / 175
Регистрация: 02.12.2013
Сообщений: 4,886
22.12.2015, 08:35 12
Цитата Сообщение от pyzhman Посмотреть сообщение
Применение Х совершенно не допустимо.
X- используется в прерывании, значит МК вышел из ждущего режима или я что то не помню про AVR? Я уже лет пять не использую AVR в своих проектах. Мог и подзабыть.
Цитата Сообщение от pyzhman Посмотреть сообщение
наворочено круто.
Зато сам наваял и такого нет решения, так что в плагиате не обвинят
Цитата Сообщение от pyzhman Посмотреть сообщение
Осталась самая большая бяка -
Схему ждем.
0
pyzhman
1161 / 516 / 76
Регистрация: 15.05.2012
Сообщений: 2,956
22.12.2015, 13:03 13
X - пара регистров R26:R27. Они же pt_m_chanelH и pt_m_chanelL по дефолту в программе. А использовать можно, конечно, везде и всегда бо ассемблер.
Не, пока не проверено через антиплагиат, зарекаться не надо (Хм, интересно, а плагиат плагиата считается плагиатом? И где тогда искать концы?)
И да! А какое измерение нужно ТС? Среднеквадратичное? Амплитудное? Их же там мама не горюй сколько.
0
Витальич
1277 / 1183 / 175
Регистрация: 02.12.2013
Сообщений: 4,886
22.12.2015, 13:23 14
Цитата Сообщение от pyzhman Посмотреть сообщение
X - пара регистров R26:R27
а то я не знаю я еще не настолько забыл, а вот код это учитывает ибо писал из расчета 48-49 строчки моего кода.
Цитата Сообщение от pyzhman Посмотреть сообщение
А какое измерение нужно ТС? Среднеквадратичное? Амплитудное?
, а ТС не сказал и вообще пропал, хоть бы за дал вопрос по моей нетленки, Видит бог я бы ответил. И усреднение на асме бы на ваял.
Цитата Сообщение от pyzhman Посмотреть сообщение
Не, пока не проверено через антиплагиат
Это как?
Цитата Сообщение от pyzhman Посмотреть сообщение
зарекаться не надо
ЭЭЭ, слушай, мамой клянусь, ДА!
P.S. HERETIC, Вы на нас с pyzhman внимание не обращайте, у нас старые с ним разборки дела. Шуткуем частенько.
P.P.S.HERETIC, код который я привел, реально можно довести до рабочего состояния, но Вы пропали.
0
pyzhman
1161 / 516 / 76
Регистрация: 15.05.2012
Сообщений: 2,956
22.12.2015, 14:08 15
Цитата Сообщение от Витальич Посмотреть сообщение
Это как?
Например, так:
0
Миниатюры
ATMega8535. Работа с АЦП  
pyzhman
1161 / 516 / 76
Регистрация: 15.05.2012
Сообщений: 2,956
22.12.2015, 14:10 16
Само собой, первые три ссылки можно смело отбросить. А остальные имеют полное право направить судебных приставов.
0
Витальич
1277 / 1183 / 175
Регистрация: 02.12.2013
Сообщений: 4,886
22.12.2015, 14:15 17
таки первые три ссылки где совпадение 37% на меня

Добавлено через 57 секунд
Цитата Сообщение от pyzhman Посмотреть сообщение
А остальные имеют полное право направить судебных приставов.
8% Вы знаете куда я их пошлю?
0
HERETIC
92 / 93 / 13
Регистрация: 10.10.2008
Сообщений: 606
Завершенные тесты: 1
23.12.2015, 21:20  [ТС] 18
Всем спасибо за помощь. Я уже все сделал.
0
23.12.2015, 21:20
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2015, 21:20

Странная работа АЦП Attiny13A
Доброе время суток. Затеял тут один девайсик залудить. Заюзал Attiny13A-PU. PWM, прерывания, все...

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

Работа с несколькими каналами АЦП в Attiny85
Коллеги, нужен дельный совет, подскажите кто имеет опыт плиз. Суть в следующем: АЦП ATtiny85...


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

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

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