Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
 
Speed Fighter
6 / 6 / 1
Регистрация: 29.03.2015
Сообщений: 162
#1

Подключение кнопок через АЦП

16.12.2017, 07:08. Просмотров 241. Ответов 1
Метки нет (Все метки)

Здарова, железячники.

Хочу научиться пользоваться АЦП микрушек, но, увы, пока не получается. Подключаю кнопку к МК, при нажатии на кнопку должен гореть зеленый светодио, а он - не горит (моделировал в протосе).

Вот код:

Кликните здесь для просмотра всего текста
C
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
/* 
 * File:   newmain.c
 * Author: newbi
 *
 * Created on 15 декабря 2017 г., 15:44
 */
 
// Подключаем библиотеки
#include <stdio.h>      // Стандартная библиотека Си для ввода-вывода
#include <stdlib.h>     // Стандартная библиотека Си для контроля
#include <xc.h>         // Библиотека компилятора XC8 для работы с PIC
 
// Определение параметров микроконтроллера
#define _XTAL_FREQ 16000000     // Тактовая частота 16 МГц (см. OSCCON)
 
// Определение параметров для подключение периферии
#define KEYBOARD AN0    // Определяем порт для подключения клавиатуры через АЦП
// ВАЖНО: ПОРТ ДОЛЖЕН ПОДДЕРЖИВАТЬ АНАЛОГОВЫЕ СИГНАЛЫ (НАЗЫВАТЬСЯ AN)
 
 
// Объявляем используемые функции
void Prepare();
 
//volatile 
unsigned char chislo = 0; 
unsigned int g_bStat = 0;
 
int main() 
{
    Prepare();
    while(1)
    {
        if(!ADCON0bits.GO)
        {
            chislo = 5/(256*ADRESH);
            
            if(chislo > 0)
            {
                RC7 = 1;   
                __delay_ms(10);
                ADCON0bits.GO = 1 ; // Метка начала преобразования
            }
            else
            {
               RC7 = 0;  
               __delay_ms(10);
               ADCON0bits.GO = 1 ; // Метка начала преобразования
            }
        }
    }
    return 0;
}
 
// Функция подготовки (настройки) параметров МК
void Prepare()
{
    OSCCON = (1<<4)|(1<<5)|(1<<6);  // Установка IRCF = '111' для частоты в 16 MHz
    ADCON1bits.VCFG0 = 0;           // Установка опорного напряжения
    ADCON1bits.VCFG1 = 0;           // Установка опорного напряжения
    TRISA = 0b1111111;              // Ножки RA0 - R7 - вход
    TRISC = 0b0000000;              // Ножки RC0-RC7 - выход
    ANCON0 = 1;                     // AN как аналоговый входы
    ADCON2bits.ACQT=1;              // 2 = 4TAD
    ADCON2bits.ADCS=2;              // FOSC/32
    ADCON0bits.CHS4 = 0;            // Настройка входа АЦП (AN0)
    ADCON0bits.CHS3 = 0;            // Настройка входа АЦП (AN0)
    ADCON0bits.CHS2 = 0;            // Настройка входа АЦП (AN0)
    ADCON0bits.CHS1 = 0;            // Настройка входа АЦП (AN0)
    ADCON0bits.CHS0 = 0;            // Настройка входа АЦП (AN0)
    ADCON2bits.ADFM = 0;            // Левое выравынивание
    ADCON0bits.ADON = 1;            // Включили модуль АЦП
    PIR1bits.ADIF = 0;              // Сброс прерываний АЦП
    PIE1bits.ADIE = 0;              // Разрешили прерывание АЦП
    INTCONbits.PEIE = 0;            // Периферийные прерывания разрешены
    INTCONbits.GIE = 0;             // Глобальные прерывания разрешены
    ADCON0bits.GO = 1 ;             // Метка начала преобразования
}
 
// Функция обработки прерывания
/*void interrupt isr (void)
{
// ------------- Прерывание АЦП --------------
    if (PIR1bits.ADIF && PIE1bits.ADIE) // Обработали прерывание от AD (АЦП)
    {
        LATAbits.LATA0 = 0; // Метка конца преобразования
        PIR1bits.ADIF = 0; // Сброс прерывания АЦП
        chislo = 5/(256*ADRESH);
        g_bStat = 1;
    } 
    ADCON0bits.GO = 0 ; // Метка начала преобразования
} */


Проблема, как я понял, в том, что условие chislo > 0 никогда не выполяется (если в этом условии поставить RC7 = 0, вместо 1, а внизу поставить RC7 = 1, то тогда светодиод горит).

Схемку в протосе прилагаю.
Пичок: PIC18F25K80
0
Миниатюры
Подключение кнопок через АЦП  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2017, 07:08
Ответы с готовыми решениями:

Подключение кнопок к Rasberry pi 3
Как подключить множество кнопок со светодиодами к Rasberry pi 3 и вывести...

Управление яркостью через триммер и АЦП
Суть задания-используя переменный резистор стенда(подключенный к ацп) управлять...

Расширение АЦП микроконтроллера и подключение к АЦП датчиков
Здравствуйте. У меня встала задача сделать устройство для элеватора, для...

Подключение АЦП к контроллеру для вычислений
Всем привет! Есть АЦП, который преобразует величину напряжения в цифровой...

Mega16 и неиспользуемый АЦП (питание ацп?)
Если я не использую АЦП контроллера нужно ли подавать на АЦП питание? Если...

1
Speed Fighter
6 / 6 / 1
Регистрация: 29.03.2015
Сообщений: 162
16.12.2017, 09:29  [ТС] #2
Разобрался. Ошибка в формуле АЦП:

ADRESH должен быть в числителе.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2017, 09:29

Подключение программатора (COM) Громова через USB/COM переходник
Доброго времени суток, вопрос такой нужно спаять программатор под мк AtTiny ...

Подключение LCD на HD44780 через I2C расширитель PCF8574 к Atmega8
Ребятки, срочно нужна помощь, голова скоро лопнет(( Нужно подключить сие чудо...

АЦП
Недавно начал изучать мк AVR. Написал программу для работы с АЦП. Ее работу...


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

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

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