Внутренний ЦАП в PIC.
|
|
iso10 |
Дата: Вс, 11.12.2016, 22:09 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
19
Замечания:
±
На сайте с 16.07.2012
Статус:
Offline
|
Имеется PIC12F1822 никак не разберусь с ЦАП. Если кто работал с встроенным цап в других пиках, подскажите "что, да как". Как прописать регистры и какие команды в Picbasic на выход ЦАП (в случае с 12f1822 это порт RA0). Даташит читал.
|
|
|
|
MiXaS |
Дата: Пн, 12.12.2016, 16:24 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Цитата iso10 ( ) Имеется PIC12F1822 никак не разберусь с ЦАП. Если кто работал с встроенным цап в других пиках, подскажите "что, да как". Как прописать регистры и какие команды в Picbasic на выход ЦАП (в случае с 12f1822 это порт RA0). Даташит читал Трудно разобраться с тем, чего нет. У PIC12F1822 нет ЦАП. Есть АЦП. Если вы говорите про АЦП, то и выхода у него нет. Есть только входы. В пиках ЦАПы идут в более продвинутых камнях.
|
|
|
|
ADMIN |
Дата: Пн, 12.12.2016, 18:07 | Сообщение # 3 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Михаил, мне кажется, вы заблуждаетесь. Даташит на данный мк утверждает, что ЦАП в нем есть и содержит информацию о регистрах настройки работы ЦАП на 155 странице.
Добавлено: Поскольку такого PIC у меня нет, пробовал такую программку в Протеусе: Проект, правда, в Протоне, но суть ясна, думаю
Код Device = 12F1822
Config1 FOSC_INTOSC, WDTE_OFF, PWRTE_ON, MCLRE_OFF, CP_OFF, CPD_OFF, BOREN_OFF, CLKOUTEN_OFF, IESO_OFF, FCMEN_OFF Config2 WRT_OFF, PLLEN_ON, STVREN_ON, LVP_ON
Dim Dir As Bit TRISA.0 = 0 'Порт А.0 - на выход DACCON0= %11100000; // DAC enable, VDD as reference While 1=1 If Dir = 0 Then DACCON1 = DACCON1 + 1 'Переключаем матрицу R2R вверх If DACCON1 > 31 Then Dir = 1 EndIf Else DACCON1 = DACCON1 - 1 'и вниз. Типа пилы должно получиться по задумке If DACCON1 = 0 Then Dir = 0 EndIf EndIf DelayMS 10 Wend
Ничего не вышло. Может, дело в протеусе. Вот ссылка - по ней более или менее ясно, что надо настроить.
|
|
|
|
ADMIN |
Дата: Вт, 13.12.2016, 09:15 | Сообщение # 4 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Нашел ошибку с помощью рабочего кода Си-компилятора. Почему, пока не знаю, но нужно порт RA.0 настраивать на ввод. То есть TRISA.0=1 должно быть. Тогда все работает. Вот подтверждение:
|
|
|
|
iso10 |
Дата: Вт, 13.12.2016, 10:07 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
19
Замечания:
±
На сайте с 16.07.2012
Статус:
Offline
|
По даташиту стр.147, настройка ADCON0:
bit 7 Unimplemented: Read as ‘0’ bit 6-2 CHS<4:0>: Analog Channel Select bits 00000 = AN0 00001 = AN1 00010 = AN2 00011 = AN3 00100 = AN4(1) 00101 = AN5(1) 00110 = AN6(1) 00111 = AN7(1) 01001 = Reserved. No channel connected. • • • 11100 = Reserved. No channel connected. 11101 = Temperature Indicator(4) 11110 = DAC output(2) 11111 =FVR (Fixed Voltage Reference) Buffer 1 Output(3) bit 1 GO/DONE: A/D Conversion Status bit 1 = A/D conversion cycle in progress. Setting this bit starts an A/D conversion cycle. This bit is automatically cleared by hardware when the A/D conversion has completed. 0 = A/D conversion completed/not in progress bit 0 ADON: ADC Enable bit 1 = ADC is enabled 0 = ADC is disabled and consumes no operating current
То есть, как я понял, в настройках АЦП надо указывать либо АЦП (номер порта), либо ЦАП (11110 = DAC output). И видимо придется каждый раз переключать, т.к. АЦП у меня тоже задействован.
Сообщение отредактировал
iso10 - Вт, 13.12.2016, 10:07
|
|
|
|
ADMIN |
Дата: Вт, 13.12.2016, 12:45 | Сообщение # 6 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Ну если используется канал ацп на этом же порту, то да, нужно будет переключаться
|
|
|
|
iso10 |
Дата: Вт, 13.12.2016, 14:08 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
19
Замечания:
±
На сайте с 16.07.2012
Статус:
Offline
|
Цитата ADMIN ( ) Ну если используется канал ацп на этом же порту, то да, нужно будет переключаться Нет, под АЦП задействован другой порт RA1. Но как задавать конфигурацию регистра ADCON0? То есть придется каждый раз "переключать" ADCON0 = %01111001 (ЦАП RA0) на ADCON0 = %00000101 (АЦП RA0).
|
|
|
|
ADMIN |
Дата: Вт, 13.12.2016, 16:47 | Сообщение # 8 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
В 12F1822 этого не надо делать, так как биты с 4 по 7 работают только в 12F1823. Об этом сказано в даташите на 142 странице
|
|
|
|
iso10 |
Дата: Вт, 13.12.2016, 18:14 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
19
Замечания:
±
На сайте с 16.07.2012
Статус:
Offline
|
00100 = AN4(1) 00101 = AN5(1) 00110 = AN6(1) 00111 = AN7(1) 1: PIC16(L)F1823 only. For PIC12(L)F1822 it is “Reserved. No channel connected”.
Вы это имеете ввиду? У меня на 142 стр. информации о выборе АЦП и ЦАП нет.
|
|
|
|
ADMIN |
Дата: Ср, 14.12.2016, 02:47 | Сообщение # 10 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Нет, вот картинка: Вообще, при симуляции в протеусе ADCON0 показывает по нулям. Экспериментируйте!
|
|
|
|
iso10 |
Дата: Сб, 17.12.2016, 11:56 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
19
Замечания:
±
На сайте с 16.07.2012
Статус:
Offline
|
Цитата ADMIN ( ) В 12F1822 этого не надо делать, так как биты с 4 по 7 работают только в 12F1823. Об этом сказано в даташите на 142 странице Это биты выбора канала (порта) и в 12F1822 они тоже работают, просто нет столько портов. Какая команда в Picbasic на вывод заданного напряжения на выход встроенного ЦАП?
|
|
|
|
ADMIN |
Дата: Сб, 17.12.2016, 21:00 | Сообщение # 12 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Цитата iso10 ( ) Это биты выбора канала (порта) и в 12F1822 они тоже работают, просто нет столько портов. Да. Это очевидно. Спец команды нет. Если внимательно посмотреть на приведенный мной код и прочесть комментарии, то можно понять, что вывод напряжения в порт производится простой записью числа от 0 до 32 в регистр DACCON1.
|
|
|
|