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

Импульсный источник питания - расчет за 10 минут в eDesignSuite

Как ориентироваться в огромном количестве существующих вариантов, чтобы выбрать наиболее подходящий для конкретного случая. «Ручной» перебор всех вариантов может оказаться весьма трудоемким процессом, а полученный результат – далеко не оптимальным. Специализированное программное обеспечение, позволяет уменьшить количество рутинных операций при проектировании.

Подробнее

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

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

Share this post


Link to post
Share on other sites
                     

Как упростить выбор ИП для промышленного применения?

Компания Mean Well выпускает широкий перечень встраиваемых источников питания с креплением на шасси, имеющих, на первый взгляд, схожие характеристики. Статья расскажет о ключевых особенностях выпускаемых семейств и упростит выбор источника питания для промышленного применения.

Подробнее

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...

  • Сообщения

    • Уже нашёл. Всем спасибо. Думать некогда.
    • Закрой шляпой причинное место, уважаемая. Номиналы зависят от многих факторов, но не в коем случае ни от  Lilienthal Engineering. Вячеслав прекрасно разберется сам, без твоих Ахов.
    • Нормальная такая себе заявочка - произвольного выбора комплектация, русская прошивка (что в родной плохо - загадка, там и басурманского языка почти нет) и уж тем более наложенный платеж, да и еще не в Китае. Сам то хоть думаешь что пишешь?   У меня есть такой, покупал на площадке Banggood в ноябре 2018-го за 2600₽. Честно говоря штука хоть и пижонская, но довольно мало употребимая. Разномастные станции с давно снятыми с производства картриджами T12 (не оригиналы) более уместны и дешевле.
    • Бывает... вот так и разводят нас  укро-бело-русских славян...   Круче шакалить по поводу и без повода. И использовать радиотехнический ресурс для выяснения личных симпатий и антипатий.  А еще круче быть вагиной в прямом смысле этого слова. Ты же мне торжественно обещал, что будешь ставить только лайки...  Забыл...  Прощаю. Девушки ветренны. Сегодня так а завтра сзади...
    • Круто. А я, дурачек, думал, что это известная фирма...
    • Да, уловил. Может это и удобно, но мне не пригодится. Лучше я после ошибки компилятора подумаю, может можно чего-то куда-то переставить дабы не терять ни память ни такты. А то прям как на СИ - чего оно там накомпилировало то шьём. Не влазит - берём проц пожирнее. Не успеваем - берём побыстрее.
    • По фото не очень понятно коса это отвод от середины? Или вторичка СТ намотана в 2 провода и потом начало начало одной полуобмотки соединено с концом другой. Мост в однотакте не катит, надо так  
  • Similar Content

    • By Rad TV
      Скетч простой и кислий. Сделан автором RadTV канал:https://www.youtube.com/channel/UC1k5elIKErFnmwTzIsRgQrA?view_as=subscriber
      Буду рад рокомендациях и помощи!Сделал сам проект должен бить простим и  что би влезло в ATtini85!
      Есть защита акб и просто парения (!!!Кнопка на розмикания!!!)
      Обновления будут!!!!
       
       
      RadMOD ver1.0.txt
    • By Стас73
      Доброй ночи, уважаемые.
      Прошу Вашего совета по следующей куче проблем для меня, т.к. не соображаю в электронике, схемах, резисторах и подобному, но дружу с компом и есть желание сделать определенный механизм, но пока нет наставления на путь истинный от специалистов)
      Задача состоит в следующем - хочу мотор стеклоочистителя подключить к Ардуино, но управлять им необходимо с кнопки. Шилд, например, который обрабатывает сигнал нажатия на кнопку (допустим кнопка записи), при ее активации, нажимаю на другую кнопку, которая дает команду движку вращаться по часовой стрелке. Отпускают ее, моторчик останавливается. Другая кнопка, вращение в противоположную сторону. Т.е. записал последовательность и продолжительность вращений,  нажимаю вновь на кнопку запись и мои действия сохраняются. Далее на 4 кнопку жму и моя игра с моторчиком автоматически воспроизводится. Если такое выполнимо с помощью плат и шилдов без доп программирования логики, то буду ОЧЕНЬ  признателен если расскажете как вкратце это осуществить или кинете ссылки к примеру на Али с нужными товарами. Если легковыполнимо, то в будущем наверное уже разберусь,  как обойтись без нажатия на 4 кнопку (воспроизведения записанных действий) и запускать этот процесс, подключив датчик движения или звука.
      Если необходимо описывать логику или создавать типа какого-то протокола, что шилд (?) умел понимать, что я от него хочу, то подскажите среду разработки для неба, что б там по минимуму было наворотов) В принципе с основами c++ для Ардуино скорее всего придется ознакомиться. 
      Заранее спасибо!
    • By MirVsem
      Добрый день.
      Есть интересные модули ибп для слаботочки до 1А.
      m.aliexpress.ru/item/4000109380893.html
       По цене идеально подходит для зоопарка роутеров, IoT устройств... Переключение на резерв (туда-обратно) без просадки. Зарядка литиевой банки как положено, всякие защиты от перегрузки и прочее. Казалось бы все замечательно. 
      НО как всегда не без ложки дёгтя.
       Защита от переразрядки работает неадекватно. Хотя возможно это не сама защита, а повышающий модуль. На пороге ~3в у него срабатывает циклический перезапуск и так пока банка не просядет ниже 3в. Точно померять нечем.
      Из наблюдений. Проверил напряжение переключается с 12в на 9в и щелчки. Естественно нагрузка в это время дико насилуется (роутер свистит минут 5 пока полностю не отключится)
      Вопрос к гуру. Возможно ли что-то доработать в даном модуле чтобы исправить этот досадный баг?
    • By Юлия Михайлова
      Требуються люди умеющие работать с микроконтролерами esp 32 и stm32 , так же будет плюсом опыт работы с raspberry , требования опыт работы не мение 1,5 года , возраст не старше 35 лет , готовы взять на удаленную работу просьба отправлять резюме , и звонить по номеру +380 (68) 227 82 52
    • Guest Роман
      By Guest Роман
      Добрый день, форумчане. Такая задача. Хочу создать несколько устройств на светодиодах. Задача каждого в том, чтобы от движения (датчик вибрации, наклона) светодиод начинал моргать, переливаться и т.д. Подпитывается всё от батарейки, конечно же как можно меньших размеров (таблетка).
      Собственно я уже реализовал такое пробное устройство на ATtiny13, вибродатчике 18015 и батарейке CR1220. Всё работает, но хотелось бы это дело и удешевить и уменьшить в размерах, если это конечно же возможно. Особо в параметрах МК я не разбираюсь, но могу сказать что мне от неё точно нужно:
      1) Маленький размер
      2) Как минимум 1 канал ШИМ (а лучше 3, для переливания трёх светодиодов RGB)
      3) Память на 1Кб (программу для одного такого устройства приложу ниже, может её можно и сократить, но не факт что такую же, но на три диода получится ужать)
      4) Низкое потребление или возможность подключения режимов с низким потреблением.
      5) Работа от 3В. (от таблетки)
      6) Возможность программирования через Arduino UNO (но другие варианты тоже рассматриваю, просто Arduino уже есть)

      Повторюсь пока что нашел и использовал только ATtiny13, который меня вполне устроил, но он достаточно дорогой и в корпусе SOIC его найти достаточно проблематично. К тому же как мне показалось, он слишком хорош для такого проекта. Повторюсь, я чайник, и может есть какие-то более дешевые аналоги.

      Очень надеюсь на Вашу помощь. Заранее большое Вам спасибо!
      Прикладываю обещанный мною код:
      int vib = 4; int led = 0; long loopTime = 5000; void setup() { pinMode(led, OUTPUT); pinMode(vib, INPUT); } void loop() { if (digitalRead(vib)){ unsigned long currentMillis = millis(); while(millis()-currentMillis<=loopTime) { for(int fadeValue = 0; fadeValue <=255; fadeValue+=5){ analogWrite(led,fadeValue); delay(2); } for(int fadeValue = 255; fadeValue >=0; fadeValue-=5){ analogWrite(led,fadeValue); delay(2); } for(int fadeValue = 0; fadeValue <=255; fadeValue+=5){ analogWrite(led,fadeValue); delay(2); } for(int fadeValue = 255; fadeValue >=0; fadeValue-=5){ analogWrite(led,fadeValue); delay(2); } digitalWrite(led, LOW); delay(600); } } }  
×
×
  • Create New...