Jump to content
vv7

Вопрос про MPLAB Code Configurator и PIC18F4550

Recommended Posts

Добрый всем вечер ! В общем решил воспользоваться "MPLAB Code Configurator" плагином для MPLAB X. По сути ... очень удобная вещь ! Но вот нет поддержки моего пика PIC18F4550 ! Компилятор XC8 Скриншот ошибки в атаче. 

11.png

Поменял в проекте на PIC18F45K50 плагин окрылся ( 2 скриншот )

12.png

Написал код:

Скрытый текст

/**
  Generated Main Source File

  Company:
    Microchip Technology Inc.

  File Name:
    main.c

  Summary:
    This is the main file generated using MPLAB(c) Code Configurator

  Description:
    This header file provides implementations for driver APIs for all modules selected in the GUI.
    Generation Information :
        Product Revision  :  MPLAB(c) Code Configurator - 4.0
        Device            :  PIC18F45K50
        Driver Version    :  2.00
    The generated drivers are tested against the following:
        Compiler          :  XC8 1.35
        MPLAB             :  MPLAB X 3.40
*/

/*
    (c) 2016 Microchip Technology Inc. and its subsidiaries. You may use this
    software and any derivatives exclusively with Microchip products.

    THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
    EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY IMPLIED
    WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A
    PARTICULAR PURPOSE, OR ITS INTERACTION WITH MICROCHIP PRODUCTS, COMBINATION
    WITH ANY OTHER PRODUCTS, OR USE IN ANY APPLICATION.

    IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
    INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
    WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS
    BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE
    FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN
    ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY,
    THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.

    MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF THESE
    TERMS.
*/

#include "mcc_generated_files/mcc.h"

/*
                         Main application
 */
static int ms = 0, led = 0, turn = 0, time = 100, back = 0;
void main(void)
{
    // Initialize the device
    SYSTEM_Initialize();

    // If using interrupts in PIC18 High/Low Priority Mode you need to enable the Global High and Low Interrupts
    // If using interrupts in PIC Mid-Range Compatibility Mode you need to enable the Global and Peripheral Interrupts
    // Use the following macros to:

    // Enable high priority global interrupts
    //INTERRUPT_GlobalInterruptHighEnable();

    // Enable low priority global interrupts.
    //INTERRUPT_GlobalInterruptLowEnable();

    // Disable high priority global interrupts
    //INTERRUPT_GlobalInterruptHighDisable();

    // Disable low priority global interrupts.
    //INTERRUPT_GlobalInterruptLowDisable();

    // Enable the Global Interrupts
    //INTERRUPT_GlobalInterruptEnable();

    // Enable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptEnable();

    // Disable the Global Interrupts
    //INTERRUPT_GlobalInterruptDisable();

    // Disable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptDisable();
    
    while (1)
    {
        if ( TMR0_HasOverflowOccured() ) {
            ms++;
		if ( ms == time ) {
            if ( turn == 0 ) { led++; } else { led--; };
            if ( time == 0 ) { back = 1; } else { if ( time == 100 ) { back = 0; } } ;
            switch ( led ) {
                case 1:
                    PORTB = 0b11111101;
                    if ( back == 0 ) { time--; } else { time++; }
                    if ( turn == 1 ) { turn = 0; };
                    break;
                case 2:
                    PORTB = 0b11111011;
                    break;
                case 3:
                    PORTB = 0b11110111;
                    break;
                case 4:
                    PORTB = 0b11101111;
                    break;
                case 5:
                    PORTB = 0b11011111;
                    break;
                case 6:
                    PORTB = 0b10111111;
                    break;
                case 7:
                    PORTB = 0b01111111;
                    turn = 1;
                    break;
            }
            ms = 0;
        } 
        }
    }
}
/**
 End of File
*/

 

Который по сути должен прекрасно работать, ибо работает даже в протесе на мк PIC18F4550. Нго только я пытаюсь заставить его работать в живой среде. Перепрашиваю через прогу Standalone, вставляю в плату и ничего. Если написать тоже самое под PIC18F4550 без использования Code Configurator'а, то всё робит. 

Собсно вопросы:

  1. Как заставить прошивку под Pic18F45K50 работать под PIC18F4550 и возможно ли такое. Я понял из даташит что у нх отличается только только ADC и по другому построен внутренний осцилятор. Но так ведь они схожи, только один поддерживается Этим Плагином, а другой - нет.
  2. Может кто знает когда примерно появиться поддержка этого мк. Слышал компания "microchip" сейчас как раз и занимается интегрированием старых мк в новые структуры. Сверху Вниз. Недавно и PIC18F45K50 не поддерживался.
  3. На графике в осцилятор появляется какая-то огромная частота после прохождения всего цикла switch(). Я не могу понять почему. ( Всё в последнем скриншоте )

15.png

Неужели это всё из-за разности мк ?

Страничка с поддерживаемыми пиками Тут.

На компиляторе C18 ткакая же задача работает без проблем.

Код: 

Скрытый текст

/* 
 * File:   newmain.c
 * Author: X3
 *
 * Created on 12 декабря 2016 г., 18:09
 */

#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <timers.h>

static int ms = 0, led = 0, turn = 0, time = 100, back = 0;
void low_isr(void);
void high_isr(void);

#pragma code high_vector=0x08
void interrupt_at_high_vector(void)
{
  _asm GOTO high_isr _endasm
}

#pragma code
#pragma interrupt high_isr
void high_isr (void) {
    if (INTCONbits.TMR0IF){
        INTCONbits.TMR0IF = 0;
        TMR0H = 0xF7;
        TMR0L = 0x50;
        ms++;
    }
}

int main(int argc, char** argv) { 
    
    ADCON1 = 0x0F;
    T0CON = 0b10001000;
    TMR0H = 0xF7;
    TMR0L = 0x50;     
    INTCON = 0x20;
    INTCON2 = 0x04;
    RCONbits.IPEN = 1;
    INTCONbits.GIEH = 1;
    
    TRISB = 0x00;
    PORTB = 0xFF;
    
    while(1){
		if ( ms == time ) {
            if ( turn == 0 ) { led++; } else { led--; };
            if ( time == 0 ) { back = 1; } else { if ( time == 100 ) { back = 0; } } ;
            switch ( led ) {
                case 1:
                    PORTB = 0b11111101;
                    if ( back == 0 ) { time--; } else { time++; }
                    if ( turn == 1 ) { turn = 0; };
                    break;
                case 2:
                    PORTB = 0b11111011;
                    break;
                case 3:
                    PORTB = 0b11110111;
                    break;
                case 4:
                    PORTB = 0b11101111;
                    break;
                case 5:
                    PORTB = 0b11011111;
                    break;
                case 6:
                    PORTB = 0b10111111;
                    break;
                case 7:
                    PORTB = 0b01111111;
                    turn = 1;
                    break;
            }
            ms = 0;
        }
    }
    return 0;
}

 

16.png

Спасибо всем огромное !!!

Edited by vv7
Добавил C18

Share this post


Link to post
Share on other sites

Забейте на старые PIC'и, юзайте новые. Они в разы превосходят во всём. Даже в цене !
 

Share this post


Link to post
Share on other sites

Да, но у меня их 2 и ещё 2 PIC18F452 ... надо их заиспользовать.

Share this post


Link to post
Share on other sites

Технология Maxim Integrated nanoPower: когда малый IQ имеет преимущества

При разработке устройств с батарейным питанием важно выбирать компоненты не просто с малым потреблением, но и с предельно малым током покоя. При этом следует обратить внимание на линейку nanoPower производства компании Maxim Integrated. В статье рассмотрено их применение на примере системы датчиков беспроводной оконной сигнализации.

Подробнее

А например. Какие бы вы посоветовали ? Конечно ... хочется использовать и эти, но можно посмотреть и на новые. 

У меня кстате получилось запустить прошивку под PIC18F45K50 на PIC18F4550, я только поменял биты конфигурации на 18F4550. Остался только непонятная и бешеная частота, как на втором скриншоте. Не могу понять почему. Тот же код прекрасно работает под C18 комп. ... 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By Максим123456789
      делаю диплом, в схеме у меня микроконтроллер PIC16F688 и мне нужно его заменить на ATmega. Не могу найти похожий
    • By Anton Bondarenko
      Всем привет
      Прошу не ругать, впервые подобный вопрос задаю.
      Хочу сделать прибор, который будет посылать сигнал, когда возле прибора будет проходить металлический предмет. 
      — угол отслеживания до 30° а лучше прямая линия, траектория
      — время реакции очень высокое до 100 мс
      — ширина проема в котором нужно сканировать от 10 до 20метров,
      — передача сигнала через вифи
      Может есть готовые решения, или отдельные компоненты.
      Подскажите пжл в каком направлении искать.
      Смотрел датчики движения, но главная проблема — время реакции.
      Спасибо
       
    • By Sofia Vin
      Предлагаем проектную работу в Москве:
      Микроконтроллер STM32F103.
        
      Есть встроенный код с использованием функций библиотеки FreeRTOS, код имеет описанный протокол для связи с внешним миром.
        
      Необходимо проводить доработку кода под задачи программиста верхнего уровня и его тестирование в составе оборудования. 
      Работа в лаборатории (м.Университет) и удаленно. 
      Оплата по договоренности.
      Если Вы обладаете опытом схемотехнического проектирования и программирования микроконтроллеров, и Вас заинтересовала данная возможность, ждем Ваши отклики по контактным данным:
      8 (925) 023-60-02   Алексей
      E-mail: nassa@marathon.ru
       
    • By Антон Плюшкин
      В общем есть небольшая тривиальная задача - сделать свитюльку. Контроллер управляет светодиодиками, цвета меняются, людишки довольны.
      Схема проста: Attiny44a -> 2n3904 x3 -> RGB-светодиод.
      Собрал, протестил, всё норм, но!
      Как только в коде я использую функцию задержки - _delay_ms (util/delay.h) - контроллер повисает!
      #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> int main(void) { // Input/Output Ports initialization // Port A initialization // Function: Bit7=Out Bit6=Out Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRA=(1<<DDA7) | (1<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0); // State: Bit7=0 Bit6=0 Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0); // Port B initialization // Function: Bit3=In Bit2=Out Bit1=In Bit0=In DDRB=(0<<DDB3) | (1<<DDB2) | (0<<DDB1) | (0<<DDB0); // State: Bit3=T Bit2=0 Bit1=T Bit0=T PORTB=(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Phase correct PWM top=0xFF // OC0A output: Non-Inverted PWM // OC0B output: Non-Inverted PWM // Timer Period: 0,031875 ms // Output Pulse(s): // OC0A Period: 0,031875 ms Width: 0 us // OC0B Period: 0,031875 ms Width: 0 us TCCR0A=(1<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (1<<WGM00); TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (1<<CS00); TCNT0=0x00; OCR0A=0x00; OCR0B=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Ph. correct PWM top=0x00FF // OC1A output: Non-Inverted PWM // OC1B output: Disconnected // Noise Canceler: Off // Input Capture on Falling Edge // Timer Period: 0,031875 ms // Output Pulse(s): // OC1A Period: 0,031875 ms Width: 0 us // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (1<<WGM10); TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10); TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 0 Interrupt(s) initialization TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0); // Timer/Counter 1 Interrupt(s) initialization TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (0<<TOIE1); // External Interrupt(s) initialization // INT0: Off // Interrupt on any change on pins PCINT0-7: Off // Interrupt on any change on pins PCINT8-11: Off MCUCR=(0<<ISC01) | (0<<ISC00); GIMSK=(0<<INT0) | (0<<PCIE1) | (0<<PCIE0); // USI initialization // Mode: Disabled // Clock source: Register & Counter=no clk. // USI Counter Overflow Interrupt: Off USICR=(0<<USISIE) | (0<<USIOIE) | (0<<USIWM1) | (0<<USIWM0) | (0<<USICS1) | (0<<USICS0) | (0<<USICLK) | (0<<USITC); // Analog Comparator initialization // Analog Comparator: Off // The Analog Comparator's positive input is // connected to the AIN0 pin // The Analog Comparator's negative input is // connected to the AIN1 pin ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0); ADCSRB=(0<<ACME); // Digital input buffer on AIN0: On // Digital input buffer on AIN1: On DIDR0=(0<<ADC1D) | (0<<ADC2D); // ADC initialization // ADC disabled ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0); unsigned char VL_OCR0A = 0, VL_OCR0B = 0, VL_OCR1A = 0; OCR0A = 0; OCR0B = 0; OCR1A = 0; while(1) { _delay_ms( 100 ); VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } } Т.е. если указать задержку в начале цикла, то светодиод не светится вообще.
      Если задержку убрать - светодиод немного подсвечивает всеми цветами.
      while(1) { _delay_ms( 100 ); // <--- ЗАДЕРЖКА --- VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } Где я накосячил?
      З.Ы.: Замечаний по поводу оптимизации кода, излишних переменных и п.р. прошу не писать - изощряюсь как могу ибо не пойму почему не работает
    • Guest Денис
      By Guest Денис
      В общем, есть такое чудо китайской техники (фото)
      Что оно может:
      1. Заряжаться через microUSB порт
      2. Кнопка вкл/выкл, она же переключает режимы
      3. 3 режима свечения светодиода (он светит разными цветами)
      Что я хочу сделать:
      1. Пункты 1 и 2 выше
      2. Разнообразить количество режимов, переливание статичный цвет и тд...
      Вопрос: как это сделать? что купить?

      P.S. К сожалению, в гугле не нашел подробной инструкции, а я в электронике я дуб дубом


  • Сообщения

    • Я стою такой унылый, Предаю себя стыду, Хулиганы дали в рыло У прохожих на виду. Был бы я резвей и легче, Не в таких больших летах, Убежал бы я при встрече На здоровых-то ногах. Будь я малость помоложе И здоровый, как амбал, Я бы дал в ответ по роже И закончил бы скандал. Но они намного шире, Без морщин и без седин. И к тому же их четыре, Ну а я всего один. Плюс последствия гастрита, Простатит и диабет…                 И пришлось достать мне биту, Арматуру и кастет. Получилось как-то глупо, Неудобно, видит бог, Но лежат четыре трупа У моих артритных ног. Жить и жить могли б ребята, Если б я был молодой… Только ж я не виноватый, Что я старенький такой!
    • @КЭС ,про грибы зашла картинка. Местную политтему напоминает. Которая микрофилиал пендосии
    • Привет всем. Есть у меня реле давления с несчастной судьбой, в котором вначале сломали разъём и пришлось реле ломать вскрывать, а затем по неосторожности были выдраны тонюсенькие волоски идущие от чипа, на плату 5 шт. Каким образом, это дело можно восстановить? Паяльник тут явно не прокатит) Вначале повёлся на токопроводящий клей. купил типа с серебром - оказалось полное фуфло, которое вообще ничего не проводит.    
    • "они сначала начали шипеть и в итоге повыстреливали. Там стояли конденсаторы 4,7 мф 100 В а я поставил 50 вольт. Но не в этом то дело. Я сразу же вернул старые литы но они тоже начали шипеть. Внимательно изучив схему и осмотрев то место куда припаяны эти конденсаторы я заметил что там где нарисован плюсик вовсе не плюсик а наоборот, и для второго плеча также. Выходит что на печатке ошибка и я припаял конденсаторы не той полярностью." Это говорит о бездарном мастерстве, а конденсаторы здесь не причём.
    • 5551 проверял? Где эмиттер-база-коллектор
    • Спасибо за предупреждение. BAT15 подойдёт.
×
×
  • Create New...