Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.65/43: Рейтинг темы: голосов - 43, средняя оценка - 4.65
1 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 100

Работа с АЦП (PIC16F676)

01.12.2014, 22:56. Показов 8644. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
МК pic16f676
Задача: попробовать сделать АЦП.
Код программы:
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
    
 
    #include <htc.h>
    #include <lcd.h> //библиотека ЖК
    #define _XTAL_FREQ 4000000 //4МГц
     
    __CONFIG(WDTDIS & UNPROTECT & MCLREN & LVPDIS & HS);
    unsigned int adc_rd;
    unsigned char volt=[];
    unsigned int ADC_1;//внутренняя переменная АЦП
    main (){
     
    CMCON=0x07;// отключаем компаратор
    ANSEL = 0b00111111; //порты AN0-AN5 включены как аналоговые
    ADCON0 = 0b00111000; // аналоговый вход AN7 -- подача напряжения
    ADCON1 = 0x00;   // Reference voltage is Vdd
    TRISC = 0b00000000; // PORTC All Outputs
    TRISA = 0b00100000; // PORTA All Outputs, Except AN6
    //дисплей
    lcd_init(); //инициализация дисплея
    lcd_goto(0);    // переместиться на первую линию
     
    adc_rd = ADC_Read(7); // читаем выходной регистр АЦП с 7 канала
    ADC_1 = adc_rd/2;
     
    volt[0] = ADC_1/1000 + 48; //первое число
    volt[1] = (ADC_1/100)%10 + 48; //второе число
    volt[3] = (ADC_1/10)%10 + 48; //третие число
     
     
    __delay_ms(150);   // задержка
    __delay_ms(150);   // задержка
    lcd_puts(volt);
     
    while (1){}
    }
Выдает следующие ошибки:
C
1
2
3
4
5
6
7
8
9
10
11
    
 
    Error   7.20 expression syntax
    Warning  21.10 function declared implicit int
    Error    24.9 pointer required
    Error    24.9 pointer required
    Error    25.9 pointer required
    Error    25.9 pointer required
    Error    26.9 pointer required
    Error    26.9 pointer required
    Warning  31.14 illegal conversion of integer to pointer
вроде как все правильно сделано, а все равно ругается.. . не знаю... .
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.12.2014, 22:56
Ответы с готовыми решениями:

Работа с ИЖК (PIC16F676, HiTech)
Здравствуйте! Никак не получается работать с ЖК на pic16f676.... На других некоторых пробовал (pic16f628, pic16f877, pic16f874), а на...

PIC16F676
делаю плату и не могу найти диаметр для PIC16F676

ATtiny13. Работа с АЦП (Си)
необходима информация о том, как правильно можно использовать ЦАП и компаратор в паре, а именно с встроенного ЦАП подать некое напряжение...

31
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
02.12.2014, 03:43
Цитата Сообщение от user437 Посмотреть сообщение
вроде как все правильно сделано,
Цитата Сообщение от user437 Посмотреть сообщение
unsigned char volt=[];
Это что?
Цитата Сообщение от user437 Посмотреть сообщение
main (){
C++
1
int main()
Цитата Сообщение от user437 Посмотреть сообщение
ANSEL = 0b00111111;
Двоичное представление нестандартное,не все компиляторы поддерживают
0
1 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 100
02.12.2014, 11:08  [ТС]
это массив.
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
02.12.2014, 11:34
Цитата Сообщение от user437 Посмотреть сообщение
это массив.
Вам намекнули, что это ошибка - и не массив и не переменная...
0
 Аватар для Витальич
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
02.12.2014, 16:52
Цитата Сообщение от user437 Посмотреть сообщение
unsigned char volt=[];
Цитата Сообщение от user437 Посмотреть сообщение
это массив.
Правила языка СИ обязывают размер массива указывать в явном виде:
volt[3]; или volt[]={0,0,0};
1
1 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 100
02.12.2014, 21:27  [ТС]
подправил иначе всю программу.
выдает Error [500] ; 0. undefined symbols:
_lcd_puts(pic16f676.obj) _lcd_init(pic16f676.obj) _lcd_goto(pic16f676.obj)
что на этот раз?
кстати я не нашел в папке include файла .h с pic16f676, поэтому сделал <htc.h>
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
02.12.2014, 21:52
библиотеку LCD подключил?
0
1 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 100
02.12.2014, 22:21  [ТС]
да. все решил. ошибка глупая)
итак... вот код
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
#include <htc.h>
#include <lcd.c>
 
#define _XTAL_FREQ 4000000
 
__CONFIG(WDTDIS & UNPROTECT & MCLRDIS & INTOSCIO);
 
main() {
 
TRISA=0b00000001; //RA0 на вход, остальные на выход.
TRISC=0;
PORTA=0;
PORTC=0;
CMCON=0x07;//отключен компаратор
ANSEL=0b00000001; //RA0 как аналоговый
ADCON0=0b10000101;//разрешен АЦП. частота системной синхронизации 32
ADCON1=0b01100000;//что тут выставлено??
int h_adc, l_adc;
unsigned char v;
lcd_init();
lcd_goto(0);
lcd_puts("U=");
__delay_ms(100);
GODONE=1;
while (GODONE) {}
l_adc=ADRESL;
h_adc=ADRESH;
v=l_adc+h_adc*1024;
lcd_puts(v);
 
while (1){}
}
Что в нем не так, если на индикаторе ничего не отображается?
Схема схожая с http://forum.cxem.net/index.ph... _id=229123

Добавлено через 6 минут
P.S: хм. ошибка убралась сделав я lcd.c, хотя в другой программе когда было lcd.h ничего не ругалось....
P.S.S: нормально я ведь контроллер определил через htc.h? Используется pic16f676

Добавлено через 10 минут
уже исправил
ругается на lcd_puts(v);
как вывести содержимое переменной?
и можете расшифровать что у меня подключено, а что нет в ADCON1=0b01100000;
и что это значит в ADCON0, где надо выбирать для чего-то разрядность системной синхронизации и какую брать и почему...
1
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
02.12.2014, 22:28
Цитата Сообщение от user437 Посмотреть сообщение
P.S: хм. ошибка убралась сделав я lcd.c,
А я ведь спрашивал
Цитата Сообщение от ValeryS Посмотреть сообщение
библиотеку LCD подключил?
исходя из этого
Цитата Сообщение от user437 Посмотреть сообщение
#include <lcd.c>
видно что нет
так делать нельзя, это страшный костыль, который неизвестно когда выстрелит
подключать к файлу нужно действительно
C++
1
 #include <lcd.h>
это не библиотека, а заголовочный файл
а вот файл lcd.c это действительно библиотека, в данном случае нескомпилированая
и его нужно подключить к проекту, как именно, смотри документацию на свой контроллер
Цитата Сообщение от user437 Посмотреть сообщение
P.S.S: нормально я ведь контроллер определил через htc.h? Используется pic16f676
А регистры совпадают?
1
1 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 100
02.12.2014, 22:32  [ТС]
т.е. я правильно сдела сейчас и всегда надо библиотеки подключать так:
#include <имя.c>
А .h тогда что?
_____________
С чем должны регистры совпадать? Я не нашел .h файл под pic16f676 и подключил htc.h (как я понял это универслаьный чтоли...)
_____________
ругается на lcd_puts(v);
как вывести содержимое переменной?
и можете расшифровать что у меня подключено, а что нет в ADCON1=0b01100000;
и что это значит в ADCON0, где надо выбирать для чего-то разрядность системной синхронизации и какую брать и почему...
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
02.12.2014, 22:45
Лучший ответ Сообщение было отмечено raxp как решение

Решение

Цитата Сообщение от user437 Посмотреть сообщение
т.е. я правильно сдела сейчас и всегда надо библиотеки подключать так:
#include <имя.c>
нет
почитай что такое директива препроцессора include
еще раз
библиотеки подключаются к проекту, а не включаются в файл при помощи include
и если это сработало один раз на простеньком проекте, не факт что это сработает при серьезной разработке, будешь ловить несуществующие ошибки
почитай что такое единица трансляции
Цитата Сообщение от user437 Посмотреть сообщение
не нашел .h файл под pic16f676
А у производителя смотрел?
Цитата Сообщение от user437 Посмотреть сообщение
подключил htc.h (как я понял это универслаьный чтоли...)
универсальных не бывает, максимум под одну серию
Цитата Сообщение от user437 Посмотреть сообщение
ругается на lcd_puts(v);
еще б ему не ругаться, массив запихал, а что принимает lcd_puts?
Цитата Сообщение от user437 Посмотреть сообщение
как вывести содержимое переменной?
поэлементно
Цитата Сообщение от user437 Посмотреть сообщение
а что нет в ADCON1=0b01100000;
и что это значит в ADCON0,
Библия разработчика, даташит производителя
все остальное от лукавого
ты даташит смотрел? за что отвечает каждый бит?
0
1 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 100
02.12.2014, 22:51  [ТС]
%Даташит смотрел и ничего не понял, я с английским не вд рузьях, а русскоязычный даташит не нашел.

%Как же тогда подключить .h, если он так ругается? Как тогда сделать. чтоб не ругался?

% lcd_puts принимает char, я в него и пихнул переменную char-типа. Это переменная у меня, а не массив.

http://www.microchip.com/wwwpr... e=en010213 вот. не вижу, где тут .h файл к нему...
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
02.12.2014, 23:32
Цитата Сообщение от user437 Посмотреть сообщение
Это переменная у меня, а не массив.
а принимает то что lcd_puts ?
Цитата Сообщение от user437 Посмотреть сообщение
lcd_puts принимает char,
а из этого
Цитата Сообщение от user437 Посмотреть сообщение
lcd_puts("U=");
я сделал вывод что принимает char*, сиречь строку
Цитата Сообщение от user437 Посмотреть сообщение
Даташит смотрел и ничего не понял, я с английским не вд рузьях
ну и кто тебе тут виноват, если хочешь заниматься разработкой, то английский надо знать хотя бы на уровне Гугл-переводчика
Я вот тоже английский плохо знаю, посади меня рядом с англичанином и слова не скажу, а технические тексты читаю, нужда заставила, не хотят сволочи буржуина русский переводить
Начни с 8051, для неё куча документации есть в интернете и на русском тоже
конкретно про pic16f676 я ничего не скажу, не работал я с ПИКами, и желания нет, я работал с ARM AVR пятьдесят первыми, я указываю на ошибке в программе в Си то я хоть что то петрю
жди когда появится человек который знает их
но лучше все таки изучить даташит
обычно производители дают несколько даташитов
для разработчика, распиновка, электрические параметры
для программистов, где находится тот или иной регистр, порт, память
иногда отдельный даташит про периферию

Добавлено через 2 минуты
pic16f676.h
http://www.ecse.rpi.edu/course... ic16f676.h
Пять минут работы в Гугле

Добавлено через 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
// ----- ADCON0 bits --------------------
typedef union {
  struct {
    unsigned char ADON:1;
    unsigned char GO:1;
    unsigned char CHS0:1;
    unsigned char CHS1:1;
    unsigned char CHS2:1;
    unsigned char :1;
    unsigned char VCFG:1;
    unsigned char ADFM:1;
  };
  struct {
    unsigned char :1;
    unsigned char NOT_DONE:1;
    unsigned char :1;
    unsigned char :1;
    unsigned char :1;
    unsigned char :1;
    unsigned char :1;
    unsigned char :1;
  };
  struct {
    unsigned char :1;
    unsigned char GO_DONE:1;
    unsigned char :1;
    unsigned char :1;
    unsigned char :1;
    unsigned char :1;
    unsigned char :1;
    unsigned char :1;
  };
} __ADCON0_bits_t;
1
1 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 100
02.12.2014, 23:46  [ТС]
спасибо.
а мне надо чтб он вывел значения переменной. что надо изменить?

чем пик лучше авр и наоборот?
0
 Аватар для Витальич
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
03.12.2014, 07:28
Цитата Сообщение от user437 Посмотреть сообщение
чем пик лучше авр и наоборот?
Однозначно ни кто не ответит, а только вызовет холивар.
На мой взгляд, если рассматривать с точки зрения системы команд и архитектуры AVR удобней и производительней чем 12 и 16 серии пиков. В 18 серии пики избавились от большинства своих "детских" болезней, но и AVR не стояла на месте, xMega наверное так и останется самым навороченным восьмибитником. С электрической точки зрения, я бы отдал предпочтение Пикам, на мой взгляд они надежней и прощают больше ошибок топологии платы. С точки зрения логистики, были у меня два проекта, где я не смог закупить AVR по расчетной стоимости, а только с пере платой раз в 10. После этого (лет 5) в серию AVR не закладываю.
P.S. на ранних ревизиях 16 пиков их порты легко можно было загнать в триггерный режим, но в современных ревизиях вроде как побороли.
0
1 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 100
03.12.2014, 20:42  [ТС]
Ну. а как мн вывести значение переменной на ЖК?
+
как же тогда надо сделать, чтобы сделать #include <lcd.h>, чтоб без ошибок
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,701
04.12.2014, 16:47
mikroC_pic.rarЗабей на этот "htc" компилятор и переходи на MicroC там библиотеки не кривые и подключать их не надо они автоматически подключаются при компиляции. Есть help на Русском.
0
1 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 100
04.12.2014, 20:02  [ТС]
Ну. а как мн вывести значение переменной на ЖК?

меня это больше всего волнует....
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,701
05.12.2014, 06:47
Цитата Сообщение от user437 Посмотреть сообщение
Ну. а как мн вывести значение переменной на ЖК?
Символы U= на LCD выводятся? Если нет то надо смотреть схему подключения LCD к МК. Выкладывай сюда схему.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
05.12.2014, 06:59
Цитата Сообщение от VladimirU Посмотреть сообщение
Символы U= на LCD выводятся?
так он не может значения переменных вывести
Цитата Сообщение от user437 Посмотреть сообщение
lcd_puts
выводит строку, а какие там еще функции есть остается только гадать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.12.2014, 06:59
Помогаю со студенческими работами здесь

Работа с АЦП PIC16F688
Здравствуйте! Подскажите пожалуйста мне про АЦП. Если используем левое выравнивание, то надо использовать только H? но тогда ведь не...

Работа с АЦП ADuC842
Всем доброго времени суток, помогите пожалуйста найти решение моей проблемы! Необходимо найти программным путем измерить амплитуду и...

PIC16F676. Конфигурация МК
Уважаемые форумчане помогите новичку. Я пытаюсь написать программу под pic16f676. вернее пытаюсь разобраться с прерываниями по INT, Так вот...

Работа с АЦП микроконтроллером PIC
movlw b'11111111' movwf TRISA movlw b'00000001' movwf TRISB clrf TRISD bcf STATUS, RP0 Если добавить код ...

Работа АЦП
Доброго времени суток! Решил я немного поиграться с АЦП и написал простенький скетч, с инициализацией. Всё отлично работало для одного...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru