Например TDA7294

Форум РадиоКот • Просмотр темы - Програмирование pic на СИ.
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 07:25:06

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 1334 ]     ... , , , 47, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пт дек 01, 2017 11:58:44 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Если для младших (12, 16), то - XC8. Если под 18-ые камушки, можно ещё присмотреться в сторону MCC18, тоже неплохой компилятор. Единственным, на мой взгляд, минусом у него является проблемы с объявлением массивов более 256 байт. Приходится скрипт линкера править.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пт дек 01, 2017 17:31:49 
Первый раз сказал Мяу!

Карма: 13
Рейтинг сообщений: 17
Зарегистрирован: Чт июн 15, 2017 10:40:31
Сообщений: 32
Откуда: Екатеринбург
Рейтинг сообщения: 1
Уважаемый dosikus, а можно поинтересоваться, откуда Вы узнали, что я "плаваю"? Из того, что пользуюсь CCS? Так я уже объяснил, в чем причина. Цена на лицензию XC8 является неприемлемой для тех, кто не зарабатывает деньги программами для PIC. А всякими "таблетками от жадности" для программ я не пользуюсь принципиально, у меня все программы купленные. Однажды мне не хватило бесплатной версии XC8 (по времени не укладывался в требования), переписывать на ассемблере особого желания не было, слишком много было уже написано. Поиск и дал вариант с CCS, которым я и стал пользоваться когда пишу на С. За неимением лучшего доступного варианта. О моем уровне знаний и опыта это никоим образом не говорит. Программированием и электроникой занимаюсь профессионально более 30 лет. Да, PIC занялся, для себя, а не для работы, три с небольшим года назад. Но, опять таки, уровень знаний Вы видеть просто не можете.

Вы говорите, что MikroC слишком ардуинообразен и далек от настоящего С? Да, могу согласиться, что от идеала он далек. CCS выбирают только из-за плюшек? Это почему же? Ими кто то заставляет пользоваться? Кодогенератор и оптимизатор там вполне приличные, а этого достаточно. Вы не заметили, что вопрос о С задал человек, который С еще и не знает практически? Насколько ему важно такое уж полное соответствие последним стандартам С? Да и Вы, в программа для PIC, а не для настольных ПК и серверов, так часто пользуетесь всеми возможностями С99, например? Базовый вариант языка все эти компиляторы поддерживают. Расширения языка и отступления от стандарта в документации на них описаны. Так ли уж важно, опишите Вы процедуру прерывания как void interrutp ISR() и в ней полностью обработаете прерывание определив его источник, или напишете #INT_TIMER0, например, а потом void ISR() и уже точно будете знать, что процедура получит управление только при прерывании от таймера (диспетчер прерываний скрыт внутри среды компилятора). Или чем так критично отличается TRISA=0x25, от set_tris_a(0x25)? Да, это обертка, но стандарта С это не нарушает ни разу. Я могу понять, что setup_adc у кого то вызывает отторжение тем, что ему больше нравится прописывать значения в регистры вручную, но новичку (автор вопроса новичек!) это облегчит жизнь. И опять таки, стандарта это не нарушает. Меня вот очень раздражает в CCS такое #bit TMR0IF=getenv("BIT:TMR0IF"), но я готов смириться, когда других вариантов нет. А вот серьезная засада в CCS то, что он не различает регистр букв, прямо как Pascal. Причем разработчик прямо заявляет, что включать case sensitive лучше не надо, так как он не гарантирует, что все библиотеки при этом будут работать нормально при компиляции.

Я за свою жизнь со столькими экзотическими языками и диалектами того же С работал, что поверьте, все эти отличия просто мелочи. Гораздо сложнее было на С писать в 90-е годы прошлого века для наших 1816ВЕ51 (MCS51 совместимые). Вот где был засада сидела на засаде. И мне не понятна такая вот позиция, что мол кроме XC нет ничего, а все не согласные дилетанты и плавают. Профессионалу, зарабатывающему программированием PIC, действительно нужен XC. И не только он. Но тратить, минимум 1000 USD только на компилятор, не каждый может себе позволить. И заявлять, что описывая возможные варианты я оказываю медвежью услугу, как минимум, неприлично. На мой взгляд, гораздо большие "гуру медвежьих услуг" те, кто заявляет, что без конкретного инструмента человек обречен на провал. Программы пишет человек, а не компилятор. Фотографирует фотограф, а не камера. Можно купить самый навороченный компилятор, да что там компилятор, IDE, и писать программы на уровне первоклассника. А можно чем то попроще и писать действительно профессиональные программы. А объявляя что то "единственно верным", мы просто встаем на путь очередной "священной войны", коих уже много было (windows vs linux, зеркальная vs беззеркальная, и тому подобное).

Повторю свою точку зрения, ну и groot почитав все это может что для себя решит.

- Все три упомянутые мной компилятора нормально поддерживают С, как язык программирования. Да, у каждого свои расширения, и свои ограничения и отступления от стандарта. Но пользоваться можно любым. На выбор может повлиять цена и используемая OS.

- Гораздо важнее знать и понимать сам С. Причем не обязательно С89 или С99, достаточно уровня классики Кернигана и Ричи, на первом этапе. Все равно, на PIC10, 12, 16 Вы не будете пользоваться всеми возможностями современных стандартов С. Но понимание языка нужно обязательно.

- По большому счету, для разработки программ на языках высокого уровнядля микроконтроллеров (и не только) не требуется знание ассемблера. Оно может быть полезным, но может и мешать. Так как в голове переходящего с ассемблера на С человека будут крутиться шаблоны мышления ассемблера.

- Язык программирования это лишь инструмент. Компилятор это лишь инструмент. Главное - человек, его знания и умения. Его способность подобрать, или придумать, алгоритм решения своей задачи.

Написал много, но не в плане наезда или повода для драки.

_________________
Мир вокруг нас разумен настолько, насколько разумны мы сами. Профессионал не обязательно говорит умные слова, но зная самые глубины, способен объяснить их любому "на пальцах".


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Сб дек 02, 2017 08:01:30 
Друг Кота
Аватар пользователя

Карма: 138
Рейтинг сообщений: 2712
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21784
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Цена на лицензию XC8 является неприемлемой для тех, кто не зарабатывает деньги программами для PIC. А всякими "таблетками от жадности" для программ я не пользуюсь принципиально, у меня все программы купленные. Однажды мне не хватило бесплатной версии XC8 (по времени не укладывался в требования), переписывать на ассемблере особого желания не было, слишком много было уже написано. Поиск и дал вариант...

Microchip продает на Директе помесячную лицензию на любой из XC компиляторов. Такая стоит 30 баксов.То есть около 1800 рублей.
К слову, полная лицензия на копилятор имеет ГОДОВОЙ срок действия и стоит около 1000 долларов на 3 компьютера, но одного пользователя. То есть даже при профессиональном использовании ее очень трудно "отбить". Такшта если Вы принципиальны в вопросе соблюдения авторских прав на ПО, то пишите в бесплатной версии до момента возникновения проблем, а затем покупаете месячную для завершения проекта. Вот и все.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Сб дек 02, 2017 09:26:30 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 155
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Уважаемый dosikus, а можно поинтересоваться, откуда Вы узнали, что я "плаваю"?


Из вашей же писанины, ибо вы ни черта не знаете ни о компиляторах вами рекламируемыми ни о С вообще.

Добавлю еще вам "плюшек" :
в микроС закрытые либы, фрэймворк одинаков и в микроЕ паскрале и в микроС и в микросЕ барсике.
Догадываетесь что в ассемблерном листинге? Нет? Советую внимательней изучить...
Либы "универсальные", ардуино_подобные, раздутые и недоступные для изучения нутра.


CCS - извечные проблемы с указателями в флэш , да и вообще с адресацией в флэш .
Извечные проблемы с многофайловыми проектами.
Производители усердно добавляют новые "плюшки", все более отдаляющие CCS от стандарта.
К примеру -перезагрузка функций.

В итоге - вы советуете изучать новичкам "С для пЫк" , вместо вменяемого С.
Гуру медвежьих услуг?


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пт дек 08, 2017 20:29:42 
Открыл глаза

Зарегистрирован: Вс май 28, 2017 19:07:32
Сообщений: 63
Рейтинг сообщения: 0
Ребят, такая проблема:

Программу для PIC10F322 написал, которая запускает генератор и включает светодиод. МК должен запускаться/останавливаться при нажатых кнопках старт/стоп (останавливается так же, если нажаты или нет обе кнопки).

На деле МК работает не на нажатые клавиши, а при нажатии.

Вот код:

Спойлер
Код:
// Подключение нужных библиотек
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>

// Параметры микроконтроллера
#define _XTAL_FREQ 16000000 // Тактовая частота 4 МГц

// Параметры сигнала
#define SIGNAL 30 // Длительность сигнала в мкс
#define DELMIN 100 // Максимальная задержка в мкс
#define DELMAX 400000 // Максимальная задержка в мкс

// Обознаение выводов и кнопок
#define BUTTON RA0 // Кнопка МК
#define LED RA1 // Вывод на светодиоды
#define GREEN 0 // Сигнал для зеленого светодиода
#define RED 1 // Сигнал для красного светодиода
#define GENERATOR RA2 // Выход генератора

// PIC10F322 Configuration Bit Settings

// 'C' source line config statements

// CONFIG
#pragma config FOSC = INTOSC        // Oscillator Selection bits (EC: CLKIN function enabled)
#pragma config BOREN = ON       // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config WDTE = OFF        // Watchdog Timer Enable (WDT enabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF      // MCLR Pin Function Select bit (MCLR pin function is digital input, MCLR internally tied to VDD)
#pragma config CP = ON          // Code Protection bit (Program memory code protection is enabled)
#pragma config LVP = OFF         // Low-Voltage Programming Enable (Low-voltage programming enabled)
#pragma config LPBOR = ON       // Brown-out Reset Selection bits (BOR enabled)
#pragma config BORV = LO        // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config WRT = OFF        // Flash Memory Self-Write Protection (Write protection off)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

void Prepare(); // Функция подготовки МК

int main()
{
    Prepare(); // Запуск функции подготовки     
    int K = 4;
    while(1) // Бесконечный цикл работы
    {   
        if(BUTTON == 1) // Проверка на нажатые кнопки
        {
            LED = GREEN; // Зажигаем зеленый светодиод
            //srand(K); // Инициализация генератора случайных импульсов
            //K = DELMIN + rand ()% DELMAX; // Присвоение псевдослучайного числа
            //for(int i = 0; i <= K/60; i++) {} // Пустой цикл задержки
            __delay_us(SIGNAL-4); // Определяем задержку
            GENERATOR = 1; // Подаем на выход лог. единицу
            __delay_us(SIGNAL-2); // Определяем длительность сигнала
            GENERATOR = 0; // Подаем на выход лог. ноль   
        }
        else
        {
            LED = RED; // Зажигаем красный светодиод
            GENERATOR = 0; // На выход ставил лог. ноль
        }   
    }
    return 0;   
}

// Функция подготовки
void Prepare()
{
    TRISA = 0b1001; // Направление работы ножек порта А (вход)
    PORTA = 0b0000; // очищаем порт А
    OSCCON = (1<<4)|(1<<5)|(1<<6); // Установка IRCF = '111' для частоты в 16 MHz
    WPUA&=~((1<<0)|(1<<1)|(1<<2)|(1<<3)); // Отключение WEAK PULL-UP
    ANSELA = 0; // Отключение аналоговой части
}


Вот disassembly listing:

Спойлер
Код:
17:            // Подключение нужных библиотек
18:            #include <stdio.h>
19:            #include <stdlib.h>
20:            #include <xc.h>
21:           
22:            // Параметры микроконтроллера
23:            #define _XTAL_FREQ 16000000 // Тактовая частота 4 МГц
24:           
25:            // Параметры сигнала
26:            #define SIGNAL 30 // Длительность сигнала в мкс
27:            #define DELMIN 100 // Максимальная задержка в мкс
28:            #define DELMAX 400000 // Максимальная задержка в мкс
29:           
30:            // Обознаение выводов и кнопок
31:            #define BUTTON RA0 // Кнопка МК
32:            #define LED RA1 // Вывод на светодиоды
33:            #define GREEN 0 // Сигнал для зеленого светодиода
34:            #define RED 1 // Сигнал для красного светодиода
35:            #define GENERATOR RA2 // Выход генератора
36:           
37:            // PIC10F322 Configuration Bit Settings
38:           
39:            // 'C' source line config statements
40:           
41:            // CONFIG
42:            #pragma config FOSC = INTOSC        // Oscillator Selection bits (EC: CLKIN function enabled)
43:            #pragma config BOREN = ON       // Brown-out Reset Enable (Brown-out Reset enabled)
44:            #pragma config WDTE = OFF        // Watchdog Timer Enable (WDT enabled)
45:            #pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
46:            #pragma config MCLRE = OFF      // MCLR Pin Function Select bit (MCLR pin function is digital input, MCLR internally tied to VDD)
47:            #pragma config CP = ON          // Code Protection bit (Program memory code protection is enabled)
48:            #pragma config LVP = OFF         // Low-Voltage Programming Enable (Low-voltage programming enabled)
49:            #pragma config LPBOR = ON       // Brown-out Reset Selection bits (BOR enabled)
50:            #pragma config BORV = LO        // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
51:            #pragma config WRT = OFF        // Flash Memory Self-Write Protection (Write protection off)
52:           
53:            // #pragma config statements should precede project file includes.
54:            // Use project enums instead of #define for ON and OFF.
55:           
56:            void Prepare(); // Функция подготовки МК
57:           
58:            int main()
59:            {
60:                Prepare(); // Запуск функции подготовки     
01E8  21DD     CALL 0x1DD
61:                int K = 4;
01E9  3004     MOVLW 0x4
01EA  00C2     MOVWF K
01EB  3000     MOVLW 0x0
01EC  00C3     MOVWF 0x43
62:                while(1) // Бесконечный цикл работы
63:                {   
64:                    if(BUTTON == 1) // Проверка на нажатые кнопки
01ED  29FA     GOTO 0x1FA
01FA  1805     BTFSC PORTA, 0x0
01FB  29EE     GOTO 0x1EE
65:                    {
66:                        LED = GREEN; // Зажигаем зеленый светодиод
01EE  1085     BCF PORTA, 0x1
67:                        //srand(K); // Инициализация генератора случайных импульсов
68:                        //K = DELMIN + rand ()% DELMAX; // Присвоение псевдослучайного числа
69:                        //for(int i = 0; i <= K/60; i++) {} // Пустой цикл задержки
70:                        __delay_us(SIGNAL-4); // Определяем задержку
01EF  3022     MOVLW 0x22
01F0  00C1     MOVWF 0x41
01F1  0BC1     DECFSZ 0x41, F
01F2  29F1     GOTO 0x1F1
01F3  0000     NOP
71:                        GENERATOR = 1; // Подаем на выход лог. единицу
01F4  1505     BSF PORTA, 0x2
72:                        __delay_us(SIGNAL-2); // Определяем длительность сигнала
01F5  3025     MOVLW 0x25
01F6  00C1     MOVWF 0x41
01F7  0BC1     DECFSZ 0x41, F
01F8  29F7     GOTO 0x1F7
73:                        GENERATOR = 0; // Подаем на выход лог. ноль   
01F9  1105     BCF PORTA, 0x2
74:                    }
75:                    else
76:                    {
77:                        LED = RED; // Зажигаем красный светодиод
01FC  1485     BSF PORTA, 0x1
01FD  29F9     GOTO 0x1F9
78:                        GENERATOR = 0; // На выход ставил лог. ноль
79:                    }   
80:                }
81:                return 0;   
82:            }
83:           
84:            // Функция подготовки
85:            void Prepare()
86:            {
87:                TRISA = 0b1001; // Направление работы ножек порта А (вход)
01DD  3009     MOVLW 0x9
01DE  0086     MOVWF TRISA
88:                PORTA = 0b0000; // очищаем порт А
01DF  0185     CLRF PORTA
89:                OSCCON = (1<<4)|(1<<5)|(1<<6); // Установка IRCF = '111' для частоты в 16 MHz
01E0  3070     MOVLW 0x70
01E1  0090     MOVWF OSCCON
90:                WPUA&=~((1<<0)|(1<<1)|(1<<2)|(1<<3)); // Отключение WEAK PULL-UP
01E2  30F0     MOVLW 0xF0
01E3  00C0     MOVWF __pcstackBANK0
01E4  0840     MOVF __pcstackBANK0, W
01E5  0589     ANDWF WPUA, F
91:                ANSELA = 0; // Отключение аналоговой части
01E6  0188     CLRF ANSELA
92:            }
01E7  0008     RETURN


Схема, если нужно:

СпойлерИзображение


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пт дек 08, 2017 20:48:04 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 1368
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7214
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Электрически у вас "кнопка" не способна подать низкий логический уровень. придумайте что-нибудь внятнее. и входы не оставляйте висеть в воздухе.

_________________
А люди посмотрят и скажут: "Собаки летят. Вот и осень."


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пт дек 08, 2017 20:59:36 
Открыл глаза

Зарегистрирован: Вс май 28, 2017 19:07:32
Сообщений: 63
Рейтинг сообщения: 0
В общем, я сделал так:
1. Поменял сопротивления резисторов R1 на R2, а R2 на R1.
2. Изменил сопротивление кнопки в разомкнутом состоянии на 500 МОм.

Теперь кнопки работают так, как должны.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пт дек 08, 2017 21:18:19 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 1368
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7214
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Хорошо, когда дойдёт дело до реально спаянной схемы - возвращайтесь.

_________________
А люди посмотрят и скажут: "Собаки летят. Вот и осень."


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пт дек 08, 2017 21:19:46 
Открыл глаза

Зарегистрирован: Вс май 28, 2017 19:07:32
Сообщений: 63
Рейтинг сообщения: 0
А можно узнать, почему такая реализация не годится? С точки зрения схемотехники.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пт дек 08, 2017 21:27:49 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 1368
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7214
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Долго объяснять. Но на висячем выводе без подтяжки, потенциал может считываться какой угодно. И далеко не обязательно лог.0. Потом с резисторами - проверьте какие входы у того микроконтроллера с триггером Шмита или нет. В своё время был помучавшись с PortB.0 у pic16f84 - перепад уровня читался, а прерывания не было. Оказалось, что прерывание было заведено через ТШ - а для него чуть-чуть уровня "логической единицы", которого для порта хватало - немножечко не дотягивало. Так что может еще резисторы придётся покрутить. А вообще, вам в другой теме сказали - используйте АЦП (если оно в микроконтроллере есть) для контроля нажатия кнопок.

_________________
А люди посмотрят и скажут: "Собаки летят. Вот и осень."


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пт дек 08, 2017 21:36:00 
Открыл глаза

Зарегистрирован: Вс май 28, 2017 19:07:32
Сообщений: 63
Рейтинг сообщения: 0
Хорошо, если АЦП, то тогда такие вопросы:

1. Про дребезг контактов:
1а. Нужно ли его обрабатывать?
2а. Можно ли обработать дребезг через макрос __delau_ms(30) или это признак дурного тона?

2. Как вообще работать с АЦП? Как подключить кнопки, я понимаю. А вот как считать значение с АЦП - нет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пт дек 08, 2017 21:56:06 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 1368
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7214
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
1. Я дребезг обрабатываю всегда. Делайте как вам удобно. Сам никогда и ни разу не пользовался такой функцией или макросом. Обычно этим занимаются таймеры.
2. Я обычно читаю даташит и там написано.

_________________
А люди посмотрят и скажут: "Собаки летят. Вот и осень."


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пн дек 11, 2017 15:41:16 
Потрогал лапой паяльник

Карма: 1
Рейтинг сообщений: 13
Зарегистрирован: Чт авг 08, 2013 01:06:54
Сообщений: 359
Рейтинг сообщения: 0
Доброго времени суток. Нигде не могу найти кряк на XC8. Но нашел на HI-TECH (причем Pro). Что лучше, XC8 без всякой оптимизации, или HI-TECH с максимальной. Нашел еще кряк на MCC18, о котором выше писал Аlex, но как-то стремно его использовать, мало кто им пользуеться. Также нашел на ССS, но почитав понял, что он как CodeVision для AVR (галочки-кнопочки). Учусь на 16 ПИКах, в будущем возможны 18 ПИКи. Может кто поделится таблеткой от XC8 ? (можно в личку).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пн дек 11, 2017 15:50:11 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
В личку ответил.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пт дек 15, 2017 19:48:13 
Открыл глаза

Зарегистрирован: Вс май 28, 2017 19:07:32
Сообщений: 63
Рейтинг сообщения: 0
Кто может объяснить, почему не работает код (моделирую в протосе)?

Смысл кода:

Осваиваю АЦП микроконтроллера PIC18F25K80, учусь так скажем. При включении МК АЦП должен начать работать и, если на входе больше 1 Вольта, то включить светодиод. В протосе ничего этого нет.

Код:

Спойлер
Код:
/*
 * 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 RA0    // Определяем порт для подключения клавиатуры через АЦП
// ВАЖНО: ПОРТ ДОЛЖЕН ПОДДЕРЖИВАТЬ АНАЛОГОВЫЕ СИГНАЛЫ (НАЗЫВАТЬСЯ AN)


// Объявляем используемые функции
void Prepare();

volatile unsigned char chislo = 0;
volatile int g_bStat = 0;

int main()
{
    Prepare();
    while(1)
    {
        if((chislo >= 1) && (g_bStat))
        {
            RC7 = 1;
        }
        else
        {
            RC7 = 0;
        }
    }
    return 0;
}

// Функция подготовки (настройки) параметров МК
void Prepare()
{
    //TRISA = 0b1100; // Направление работы ножек порта А (вход)
    //PORTA = 0b0000; // Очистка порта A
    OSCCON = (1<<4)|(1<<5)|(1<<6); // Установка IRCF = '111' для частоты в 16 MHz
    ADCON1bits.VCFG0 = 0;
    ADCON1bits.VCFG1 = 0;
    // Настройка опорного напряжения VREF+ в 2,048 В
    TRISA = 0b1111111; // Вход
    TRISC = 0b0000000; // Выход 
    ANSEL0 = 1; // AN0 как аналоговый вход
    ADCON0bits.CHS4 = 0; // Настройка входа АЦП (AN0)
    ADCON0bits.CHS3 = 0; // Настройка входа АЦП (AN0)
    ADCON0bits.CHS2 = 0; // Настройка входа АЦП (AN0)
    ADCON0bits.CHS1 = 0; // Настройка входа АЦП (AN0)
    ADCON2bits.ADFM = 0;
    ADCON2bits.ACQT = 0b00000111; // Время ACQT = 20TAD (33us/4.1us)
    ADCON0bits.ADON = 1; // Включили модуль АЦП
    PIR1bits.ADIF = 0; // Сброс прерываний АЦП
    PIE1bits.ADIE = 1; // Разрешили прерывание АЦП
}

// Функция обработки прерывания
void interrupt isr (void)
{
// ---------- Прерывание АЦП ----------
    if (PIR1bits.ADIF && PIE1bits.ADIE) // Обработали прерывание от AD (АЦП)
    {
        LATCbits.LATC1 = 0; // Метка конца преобразования
        PIR1bits.ADIF = 0; // Сброс прерывания АЦП
        chislo = 5/(256*ADRESH);
        g_bStat = 1;
    } // if (PIR1bits.ADIF && PIE1bits.ADIE)
} // high_isr END


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пт дек 15, 2017 20:08:40 
Друг Кота
Аватар пользователя

Карма: 138
Рейтинг сообщений: 2712
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21784
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
А кто запускает преобразование?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пт дек 15, 2017 20:37:16 
Открыл глаза

Зарегистрирован: Вс май 28, 2017 19:07:32
Сообщений: 63
Рейтинг сообщения: 0
Немножко переделал код:

Спойлер
Код:
/*
 * 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, то тогда светодиод горит).

Отредактировал!


Последний раз редактировалось SpeedFighter Сб дек 16, 2017 06:31:45, всего редактировалось 3 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Сб дек 16, 2017 06:03:22 
Друг Кота
Аватар пользователя

Карма: 138
Рейтинг сообщений: 2712
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21784
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Откройте даташит в разделе АЦП и определите по нему состояние каждого регистра. Какое значение Tad выбрано у Вас?
А кроме того, запуск АЦП удобно производить с помощью таймера. Например 5-го.
Еще раз, читайте даташит.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Сб дек 16, 2017 06:31:09 
Открыл глаза

Зарегистрирован: Вс май 28, 2017 19:07:32
Сообщений: 63
Рейтинг сообщения: 0
Со старым разобрался.

Вот какой вопрос:

На вход поступает аналоговый сигнал < 1 В. Почему-то в таком случае я получаю после этого действия:

Код:
chislo = 5*ADRESH/(256);


что chislo = 0. Почему так?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Сб дек 16, 2017 17:15:38 
Друг Кота
Аватар пользователя

Карма: 138
Рейтинг сообщений: 2712
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21784
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Вы сами объявили его как unsigned char. Значит оно может принимать только целые значения от 0 до 255.
Все промежуточные результаты тоже будут ограничены этим диапазоном.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 1334 ]     ... , , , 47, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y