Страница 19 из 25

Re: MPLAB в вопросах и ответах

Добавлено: Вс окт 08, 2017 08:25:19
uldemir
Да нет, это предупреждение должно возникать еще на уровне парсинга, а не кодогенерации. Вот сейчас я его подставлял в функцию, которая еще не используется - и получал предупреждения задолго до того, как получал предупреждение, что функция не используется и никакого кода для неё не сгенерено.

И собственно, уже понятно, что при выполнении c = (c << 1) - c преобразуется в int и выскакивает предупреждение. Устранить его можно кастингом, как в вами упомянутой теме и предложили: c = (unsigned char)(c << 1). Скорее вопрос, почему не выскакивает при (c <<= 1).

Re: MPLAB в вопросах и ответах

Добавлено: Вс окт 08, 2017 10:34:30
Siarzhuk
[uquote="uldemir",url="/forum/viewtopic.php?p=3200995#p3200995"]Скорее вопрос, почему не выскакивает при (c <<= 1).[/uquote]
Возможно потому, что compound операторы работают непосредственно с исходной переменной.

Re: MPLAB в вопросах и ответах

Добавлено: Пн окт 09, 2017 17:02:18
profradio
Хотел бы спросить еще непонятку (хоть к данной теме относится косвенно, но все же рискну спросить сдесь) - домучал код до двухканального вольтметра (во вложении). При проверке в протеусе - протеус работает, все показывает но выводит восклицательный знак с ошибкой:
[PIC12 ADC] PC=0x02EA. ADC conversion clock period (5e-07) is possibly invalid for device clock frequency. [U1]
Ошибка исчезает, если выставить в протеусе частоту м/к 1.25МГц и ниже. (А мне надо 4МГц) - Вопрос - что сделать, чтобы не было этой ошибки? Все значения делителя от 2-х до 64 и внутренн генерат 500КГц A/D Clock Source (TAD) я перепробовал, значение задержки после включения АЦП пробовал от 10 до 1000 мкс.
Может быть это фишка протеуса? Он на мой м/к pic 16f676 пишет PIC12.

Re: MPLAB в вопросах и ответах

Добавлено: Пн окт 09, 2017 17:51:08
Feklistov_as
[PIC12 ADC] PC=0x02EA. ADC conversion clock period (5e-07) is possibly invalid for device clock frequency. [U1]
Я не знаю СИ. В программе не увидел настройки регистра ADCON0, а точнее битов 7-6, которые выбираются в зависимости от тактовой частоты. Для этого нужно обратится к таблице 11-1:
Изображение

И прочитать раздел 11.1, или просто поставить задержку в 20мкс

Re: MPLAB в вопросах и ответах

Добавлено: Вт окт 10, 2017 04:45:54
profradio
Не совсем понял - в PIC16f676 временная настройка делается не в ADCON0, а в ADCON1 - 4, 5, 6 битом.
6, 7 бит ADCON0 отвечают за:
7: Формат сохранения 10-разрядного результата
1=правое выравнивание
0=левое выравнивание
6: Выбор источника опорного напряжения
1=вывод VREF
0=напряжение питания VDD
Я пользовался вот этой таблицей:
Изображение
Для 4МГц время должно быть 2 или 4 мкс, а делитель соответственно на 8 или на 16 - код 001 или 101 - я перепробовал все 7 вариантов из таблицы - все та же ошибка.
Про время задержки я писал - перепробовал от 10 до 1000мкс - ошибка не уходит. Видимо дело в протеусе - попробую в железе.
Файл прошивки hex во вложении.
В коде настройки регистров такие:
ADCON0 = 0b11000001;
ADCON1 = 0b01010000;
У меня версия протеуса 8.5 SP0 professional - если есть возможность - попробуйте в своем протеусе проверить.

Re: MPLAB в вопросах и ответах

Добавлено: Вт окт 10, 2017 05:24:11
Feklistov_as
Не совсем понял - в PIC16f676 временная настройка делается не в ADCON0, а в ADCON1 - 4, 5, 6 битом.
Я виноват, Вы правы.
Тогда, вроде все правильно сделали.
Конечно пробуйте в железе, там все по другому. Но и на Протеус ругаться не нужно. Я много раз на него грешил, но в итоге- каждый раз проблема была во мне!! Хотя откуда он взял ошибку с PIC12 - даже догадок нет.

Re: MPLAB в вопросах и ответах

Добавлено: Ср ноя 29, 2017 21:50:12
uldemir
Подскажите, какие параметры надо указать в PSECT, чтобы переменные _error и _next_correction легли в один банк с остальными переменными (конкретно _correction, так как в конце в зависимости от старшего бита _correction мне надо увеличить или уменьшить _next_correction). Сейчас, судя по дизассемблеру они находятся в самом начале ОЗУ 0 и 1 адрес в нулевом банке
Спойлер

Код: Выделить всё

#include "xc.inc"
    GLOBAL    _unixtime, _flag, _correction
seconds  EQU    0
WINDOW_SIZE EQU    6750
    PSECT data, CLASS=COMRAM
_next_correction: DS    1
_error:          DS    2
 
 ; This is the high priority interrupt handler. It is placed at address 8.
    PSECT intcode,class=CODE,reloc=2
    GOTO    HI_ISR_ROUT

    PSECT isr_routine,class=CODE,reloc=2
HI_ISR_ROUT:
    BANKSEL PIE4
    BTFSC   TMR1IE
    BTFSS   TMR1IF
    BRA        INTEXIT
    BANKSEL _next_correction
    MOVF    _next_correction, W
    BANKSEL  PIR4
    ADDWF   c:TMR1H
    BCF        c:TMR1IF
    
    MOVLW   1
    BANKSEL _unixtime
    ADDWF   _unixtime+0, F
    MOVLW   0
    ADDWFC  _unixtime+1, F
    ADDWFC  _unixtime+2, F
    ADDWFC  _unixtime+3, F
    BSF        _flag, seconds
    
; а теперь Брезенхем
    BANKSEL _correction
    MOVF    _correction, W
    BTFSS   _correction, 7    ; проверяем знак коррекции
    GOTO    positive
    COMF    _correction, W
    ADDLW   1

positive:
    BANKSEL _error
    ADDWF   _error, F
    MOVLW   0
    ADDWFC  _error+1, F
    MOVLW   0x80
    BANKSEL _next_correction
    MOVWF   _next_correction

    BANKSEL _error
    MOVLW   low(WINDOW_SIZE)
    SUBWF   _error, W
    
    MOVLW   high(WINDOW_SIZE)
    SUBWFB  _error+1, W
    
    BTFSS   c:CARRY  ;skip if error >= 6750
    GOTO    INTEXIT      ;goto if error <  6750
    
    MOVLW   low(WINDOW_SIZE)
    SUBWF   _error, F
    MOVLW   high(WINDOW_SIZE)
    SUBWFB  _error+1, F
    
    BANKSEL _correction
    BTFSS   _correction, 7
    INCF    _next_correction
    BTFSC   _correction, 7
    DECF    _next_correction
    
    
INTEXIT:
    RETFIE  F
    END
Распределение памяти выглядит так, но я в дизассемблере вижу, что _next_correction берётся с нулевого адреса, а _error накладывается на _unixtime по адресу 1 и 2.

Код: Выделить всё

Psect Usage Map:

 Psect      | Contents                   | Memory Range      | Size
------------|----------------------------|-------------------|------------
 reset_vec  |                            | 000000h - 000003h |  4 bytes  
 intcode    | Interrupt service routine  | 000008h - 00000Bh |  4 bytes  
 init       | Initialization code        | 00000Ch - 00000Fh |  4 bytes  
 isr_routin |                            | 000010h - 00006Bh | 92 bytes  
 text0      | Program and library code   | 00006Ch - 0000C5h | 90 bytes  
 cinit      |                            | 0000C6h - 0000D7h | 18 bytes  
------------|----------------------------|-------------------|------------
 bssCOMRAM  |                            | 000001h - 000007h |  7 bytes  
------------|----------------------------|-------------------|------------
 config     | Device configuration words | 300000h - 30000Bh | 12 bytes  
------------|----------------------------|-------------------|------------
 idloc      | User ID registers          | 200000h - 20000Fh | 16 bytes  
------------|----------------------------|-------------------|------------
Чёрт... убил целый час в поисках что такое регистр CCPTMRS в pic18f25k40. Упоминание есть, описания - нет. Посмотрел в хидерах XC8 - есть. Даже адрес есть. Ищу по адресу в дашите - Reserved. Гуглопоиск - ничего. Эррата - ничего. Потом в поиске наткнулся на предыдущую версию (40001843c.pdf против 40001843d.pdf) - тот даташит еще в старом стиле и там этот регистр есть.

Re: MPLAB в вопросах и ответах

Добавлено: Сб дек 02, 2017 08:02:12
BOB51
Теперь такие "нюенсы" с даташитами все чаще попадаться будут...
Приходится по несколько версий хранить (и не только для ПИКов, но и для остальных семейств...)
:(

Re: MPLAB в вопросах и ответах

Добавлено: Сб дек 02, 2017 08:53:58
uldemir
а, кажется, разобрался. не хватало поля space=1. А если я размещаю в секции COMRAM - оно точно будет до 0x5F адреса? и можно ли тогда до неё добраться через ACCESS?

Похоже, что так и есть:
COMRAM — consists of a single memory range that covers the common (unbanked) RAM, if present, for all PIC18 devices
Но надо будет одним глазом поглядывать на адреса выделенные моей секции.

Re: MPLAB в вопросах и ответах

Добавлено: Сб дек 02, 2017 16:12:58
SpeedFighter
Железячники, выручайте, написал простенькую программку для МК PIC18F1230 в MPLAB X 4.05. Программка должна на выходе давать случайную импульсную последовательность. За крутоть кода не поясню, я новичек в программировании МК и мог выпустить т.н. быдло-код.

Вот код:
Спойлер

Код: Выделить всё

#include <pic.h>  // Библитека пичков
#include <stdio.h>
#include <stdlib.h>
#include <pic18f1230.h> // Библиотека конкретного пичка

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


void delay(int type); // Функция задержки 
void Prepare(void); // Функция подготовки МК

int main(int argc, char** argv)
{
    Prepare(); // Запуск подготовки МК
    while(1) // Бесконечный цикл, основная задача МК
    {
        delay(0); // Задержка межуд сигналами
        TRISB = 0b00010000; // Подаем на выход лог. единицу
        delay(1); // Длительность сигнала
        TRISB = 0b00000000; // Выставляем лог. ноль        
    }
    return (EXIT_SUCCESS);    
}

void delay(int type) // Функция задержки
{
    int N; // Локальная переменная для промежуточных присвоений
    if(type == 0)
    {
        N = DELMIN + rand() % DELMAX; // Формируем случайную задержку
    }
    else
    {
        N = SIGNAL; // Определяем длительность сигнала
    }
    
    for(int i = 0; i <= N; i++) {} // Держим заданный лог. уровень
}

// Подготовка МК
void Prepare(void)
{
    TRISA = 0b00000000; // Направление работы ножек порта А
    TRISB = 0b00010000; // Направление работы ножек порта В
    CMCON = 0x07; // Отключение компараторов
    PORTA = 0; // Очищаем порт А
    PORTB = 0; // Очищаем порт Б
    RBPU = 0;  // Подтягивающие R (0-вкл, 1-выкл)
}

Ошибки и предупреждения:
СпойлерE:\Development environment\MPLABX\Compiler\include\pic_chip_select.h:3588: error: (103) #error: Device-specific header could not be found for target chip
E:\Development environment\MPLABX\Compiler\include\pic.h:25: warning: (111) redefining preprocessor macro "CLRWDT" (E:\Development environment\MPLABX\Compiler\include\pic18.h: 39)
E:\Development environment\MPLABX\Compiler\include\pic.h:26: warning: (111) redefining preprocessor macro "SLEEP" (E:\Development environment\MPLABX\Compiler\include\pic18.h: 47)
E:\Development environment\MPLABX\Compiler\include\pic.h:42: warning: (111) redefining preprocessor macro "__CONFIG" (E:\Development environment\MPLABX\Compiler\include\pic18.h: 53)
E:\Development environment\MPLABX\Compiler\include\pic.h:45: warning: (111) redefining preprocessor macro "__IDLOC" (E:\Development environment\MPLABX\Compiler\include\pic18.h: 57)
E:\Development environment\MPLABX\Compiler\include\pic.h:50: warning: (111) redefining preprocessor macro "__PROG_CONFIG" (E:\Development environment\MPLABX\Compiler\include\pic18.h: 50)
(908) exit status = 1
Сам проект прикладываю

Re: MPLAB в вопросах и ответах

Добавлено: Сб дек 02, 2017 16:49:13
uldemir
А при чём тут железячники? Ошибка типа софтверная. Уберите последний инклюд, думаю он и так из первого должен вызываться. А... похоже, компилятор не поддерживает ваш ПИК?
А что за компилятор вы пользуете? MPLAB - это IDE, а не компилятор.
Если PIC C18, то наоборот, первый инклюд выкиньте.

и нахрена вам в микроконтроллере argv argc? Как вы их передавать собираетесь? Если там поставить просто void, то может, и stdlib вам не нужен будет.

Добавлено after 29 minutes 3 seconds:
Аха, Всё же XC8. Ну, тогда все инклюды долой, делаем один #include <xc.h>
И не забываем, что надо еще конфигурационное слово сделать...
Ладно, подскажу: Window -> PIC Memory Views -> Configuraton bits. Там их устанавливаете и там же есть кнопка сгенерить. Сгенеренный текст копируете в исходник.

Re: MPLAB в вопросах и ответах

Добавлено: Вс дек 03, 2017 07:04:17
SpeedFighter
Спасибо, помогло.

Вопрос про MPLAB:

Как сделать поддержку русских комментариев?

Re: MPLAB в вопросах и ответах

Добавлено: Вс дек 03, 2017 07:16:48
КРАМ
Включив соответствующий код раскладки. Например:
Изображение

Re: MPLAB в вопросах и ответах

Добавлено: Вс дек 03, 2017 10:58:21
Аlex
Кодировку можно выбрать какой-нибудь по-умолчанию во всех проектах :
Изображение
2017-12-03_11-57-25.png
(68.96 КБ) 1567 скачиваний
Чтобы потом не мучиться каждый раз при выборе.

Re: MPLAB в вопросах и ответах

Добавлено: Вс янв 21, 2018 21:13:31
uldemir
Меня сегодня прозрело немного по поводу "implicit signed to unsigned conversion" при выполнении сдвигов. Надо мне обрабатывать отдельно младший и старший ниббл. Ну, скажем из БКД получить двоичное. Надо старший ниббл умножить на 10 и прибавить младший. С младшим проблем нет: temp & 0x0Fu - и все дела. А вот со старшим есть нюанс: (temp >> 4) * 10 - даёт предупреждение, ((temp>>4) & 0x0Fu) * 10 - даёт предупреждение, а вот ((temp & 0xF0u) >> 4) * 10 - отрабатывает чисто. Правда, это в случае, если переменная temp имеет тип unsigned char. Что будет с unsigned int - пока не разбирался.

Re: MPLAB в вопросах и ответах

Добавлено: Ср мар 07, 2018 12:04:46
Albert_V
Вышла новая MPLAB X IDE v4.15 (добавили поддержку программирования Atmel-ов из IDE) :kill:
Не рекомендую её ставить.
Эта падла не сохраняет положение окон. Каждый раз, при запуске, приходилось открывать текст программы вручную. :kill:
"Откатился" на v4.10.

Re: MPLAB в вопросах и ответах

Добавлено: Ср мар 07, 2018 14:00:40
Родэрик
У меня на xp она вообще не запустилась. То есть 4.10 получается последняя версия с поддержкой xp.

Re: MPLAB в вопросах и ответах

Добавлено: Чт мар 29, 2018 00:26:30
БАТАРЕЙКУС
Доброе время суток уважаемые коты, только на днях порвал с виндус ХР, MPLAB 8.40 PROTEUS 7.7, и шагнул в мир виндус 7, PROTEUS 8, и MPLAB XC8, вот хотелось спросить, ссылки где можно скачать рабочий MPLAB XC8 и Си компилятор к нему с лекарствами, без лекарств то полно....?
заранее спасибо.

Re: MPLAB в вопросах и ответах

Добавлено: Чт мар 29, 2018 08:12:11
Feklistov_as
скачать рабочий MPLAB XC8 и Си компилятор к нему с лекарствами
А разве они не бесплатные?! Все на оффициальном сайте есть.
Или нужны с самый лучшей оптимизацией кода?
http://www.microchip.com/mplab/compilers

Re: MPLAB в вопросах и ответах

Добавлено: Сб мар 31, 2018 22:45:21
БАТАРЕЙКУС
Хорошо, установил всё бесплатное, но ужас..., не могу соединить MPLAB X и PROTEUS 8, более того MPLAB X не генерирует файл "cof" поэтому отладить программу в пошаговом режиме с PROTEUS 8 не получится, подскажите кто как это победил ?