Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

Помогите с разобраться с прошивкой

Вт июл 18, 2017 11:24:24

Здравстуйте. Нашёл интересный проект на github, плату я собрал но вот с прошивкой разобраться не могу.
На странице этого проекта есть только фаил с названием main.c


вот его содержание:
Спойлер
Код:
/*
 * File:   main.c
 * Author: Petr Kortanek, i4wifi a.s.
 *
 * Created on 23rd November 2013
 *
 * 2014-01-11 - RA3 (MCLR, prog 1) input for button
 * 2014-04-09 - RA0 (ICSPDAT, prog 4) potentiometer input
 * 2014-08-11 - fixed PWM duty (+10bit), RA1 (ICSPCLK, prog 5) input switch 6A / 10A
 */

#include <stdio.h>
#include <stdlib.h>
#include <xc.h>

#define _XTAL_FREQ 4000000
#define Button_pressed PORTAbits.RA3

#pragma config LVP = OFF, MCLRE = OFF, BOREN = OFF, PLLEN = OFF, FOSC = INTOSC, WDTE = OFF, CP = OFF, PWRTE = OFF

char latcha = 0;
char latchc = 0;
char pilot_value = 255;
char pot_value = 255;
char pot_value2 = 255;
char adchannel = 2;
char measure_nth = 0;
char button_pressed_counter = 0;
char amps = 16;
char amps_to_set = 16;
char setbypot = 0;
short duty = 500; //50%

//attached to RC1
void relayon() {
  latchc = latchc | 0b00000011;//RC1+backup RC0
  PORTC = latchc;
}
void relayoff() {
  latchc = latchc & 0b11111100;//RC1+backup RC0
  PORTC = latchc;
}

//attached to RC2
void ledon() {
  latchc = latchc | 0b00000100;
  PORTC = latchc;
}
void ledoff() {
  latchc = latchc & 0b11111011;
  PORTC = latchc;
}

void button_flashing() {
  for (int i=0; i<20; i++) {
    ledon();
    __delay_ms(30);
    ledoff();
    __delay_ms(30);
  }
}

void setAmps() {
  setbypot = 0;

  //we get current limit from the pot
  if (pot_value <= 222) { //<4.4V, amps 6-80
    amps = 6 + (222-pot_value)/3;
    setbypot = 1;
  }
  //we get current limit from the "pot2" (set 6A / 10A)
  if (pot_value2 <= 222) { //<4.4V,
    amps = 10;
    if (pot_value2 <= 25) { //short => amps 6 ~ >3kOhm
      amps = 6;
    }
    setbypot = 1;
  }
  if (setbypot == 0) {
    amps = amps_to_set;
  }
  //minimum
  if (amps < 5)
    amps = 5;
  //maximum
  if (amps > 80)
    amps = 80;
 
  //compute PWM duty
  if (amps < 51)
    duty = 1000 - (100 * amps) / 6;
  else
    duty = 1000 - (4*amps+640);

  //set PWM output 10bit
  CCPR1L = duty >> 2;
  duty &= 0b00000011;
  duty <<= 4;
  CCP1CON = duty + 12; //1100

}

void main() {

    OSCCON = 0b01101010; // 4MHz

    TRISA = 0b11111111; //pilot detect RA2, button detect RA3, pot RA0, pot2 RA1
    TRISC = 0b11110000; //relay RC1 (+backup RC0), LED RC2, pilot RC3
    latcha = 0;
    latchc = 0;
    PORTA = latcha;
    PORTC = latchc;

    ADCON1 = 0b01100000; // f/64 4MHz, 16 us
    ADON = 1; //channel: RA2=PWM detect, RA0=pot value, RA1=pot2 value
    ADCON0bits.CHS = 2;

    //pilot PWM RC3
    PSTR1CONbits.STR1C = 1;
    APFCON1bits.P1CSEL = 0; //P1C function is on RC3
   
    PR2 = 249 ;//period value
    CCP1CON = 0b00001100; //PWM mode

    OPTION_REG = 0b00000001; //pullups and TMR0
    WPUAbits.WPUA3 = 1; //button pressed detect - MCLR
    WPUAbits.WPUA1 = 1;  //6A / 10A input RA1

    //T2CON timer ON + prescaler 4
    T2CON = 0b00000101 ;

    //INTCON = 0b11100000;
    GIE = 1;
    PEIE = 1;
   
    ADIE = 1;
    TMR2IE = 1;
   
    setAmps();

    while(1) {

        //MODE set current
        if(Button_pressed == 0) {
          button_pressed_counter++;
          //setting mode entered - rapid led flashing
          if (button_pressed_counter == 5) {
            button_flashing();
            amps_to_set = 0;
          }
          if (button_pressed_counter >= 5) {
            amps_to_set++;
            setAmps();
            ledoff();
            __delay_ms(300);
            ledon();
            __delay_ms(300);
          } else {
            __delay_ms(800);
          }

        //MODE normal operation
        } else {
          if(button_pressed_counter>=5) {
            //current setting mode exit confirmation
            button_flashing();
          }
          button_pressed_counter = 0;

          //car connected (pilot pulled down <8V)
          if(pilot_value < 111) {
            relayon();
            ledon();
            __delay_ms(800);

          } else {
            ledon();
            __delay_ms(30);
            relayoff();
          }
          ledoff();
          __delay_ms(300);
        }
    }
}

void interrupt isr() {

  //channel: RA2=PWM detect or RA0=pot value
  if (ADIF) {
    if (adchannel == 0) {
      pot_value = ADRESH;
      setAmps();
      adchannel = 1;
    } else if (adchannel == 1) {
      pot_value2 = ADRESH;
      setAmps();
      adchannel = 2;
    } else   {
      pilot_value = ADRESH;
      adchannel = 0;
    }
    ADCON0bits.CHS = adchannel;
    ADIF = 0;
  }

  if (TMR2IF) {
    TMR2IF = 0;
    //voltage must be measured when voltage is "up"
    measure_nth++;
    if (measure_nth>98) {
      __delay_us(950);
      GO_nDONE = 1;
      measure_nth = 0;
    }
  }
}

Re: Помогите с разобраться с прошивкой

Вт июл 18, 2017 11:39:45

А вопрос то в чём ?

Re: Помогите с разобраться с прошивкой

Вт июл 18, 2017 11:58:40

Вопрос в том- является ли это самой прошивкой ?
В программировании к сожалению пока вообще не разбираюсь . По моим догадкам это не скомпилированная прошивка.
И может ли кто-то помочь скомпилировать?

Re: Помогите с разобраться с прошивкой

Вт июл 18, 2017 12:01:19

Ваши догадки правильные.

Re: Помогите с разобраться с прошивкой

Вт июл 18, 2017 12:14:25

подскажите тогда как его скомпилировать , какой программой.
Или может кто-то сможет помочь скомпилировать?
Прошивка под PIC16f1824.
Заранее спасибо.

Re: Помогите с разобраться с прошивкой

Вт июл 18, 2017 12:22:44

Прошивка :
123.hex
(4 KiB) Скачиваний: 527


Проект :
123.rar
(117.09 KiB) Скачиваний: 355

Re: Помогите с разобраться с прошивкой

Вт июл 18, 2017 12:47:50

Спасибо огромное)). На днях куплю программатор попробую прошить, а подскажите с помощью какой программы компилировали?

Добавлено after 1 minute 33 seconds:
И подойдёт ли Pic kit 3 программатор ?

Re: Помогите с разобраться с прошивкой

Вт июл 18, 2017 13:13:19

Компилируют МПЛабом с Си компилятором, например ХС8.
Конечно подойдет, родной же программатор.

Re: Помогите с разобраться с прошивкой

Вт июл 18, 2017 13:21:17

Спасибо вам ).

Re: Помогите с разобраться с прошивкой

Вт июл 18, 2017 21:12:02

И подойдёт ли Pic kit 3 программатор ?

Пробовал: PicKit2 этот МК не видит, так что только PicKit3

Re: Помогите с разобраться с прошивкой

Ср июл 19, 2017 02:09:18

Видит.

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

Re: Помогите с разобраться с прошивкой

Ср июл 19, 2017 08:54:00

Не правильно выразился: в списке видит, но при подключении не видит! По крайней мере у меня лайт-версия пиккита-2

Re: Помогите с разобраться с прошивкой

Вс июл 23, 2017 18:06:04

По крайней мере у меня лайт-версия пиккита-2


Тогда чего хаить нормальный программатор?
На зеркало неча пенять, коли рожа крива - русская пословица, означающая: Если сам виноват, то не перекладывай вину на других.

Re: Помогите с разобраться с прошивкой

Пн июл 24, 2017 10:55:27

Более того, он не только их видит, но и нормально программирует.
1823, 1825, 1829 - с этими работаю постоянно. И тоже самодельный лайт.

Re: Помогите с разобраться с прошивкой

Пн июл 24, 2017 21:20:10

а у меня не захотел - пришлось подключать к пиккит3

Re: Помогите с разобраться с прошивкой

Вт мар 24, 2020 15:29:24

Уважаемые! Помогите, пожалуйста, собрать прошивку в файле .hex из приведенного архива. Прошиваться будет PIC16F628A. Заранее спасибо! :beer:

З.Ы. Сам пытался, но понял что :facepalm:
Вложения
freescale.zip
(4.26 KiB) Скачиваний: 221

Re: Помогите с разобраться с прошивкой

Вт мар 24, 2020 16:41:29

Как минимум не хватает 2х файлов.
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */

Re: Помогите с разобраться с прошивкой

Вт мар 24, 2020 17:05:26

Как минимум не хватает 2х файлов.


Спасибо за оперативный ответ! :beer: Значит вопрос снят! :facepalm:

Re: Помогите с разобраться с прошивкой

Пн мар 30, 2020 10:06:30

samand587, а при чем здесь PIC, если выложенная прошивка для совсем другого контроллера MC68HC908QY1 ? Там же это прям написано сверху. Да и архив ваш называется Freescale по названию производителя той архитектуры (ныне NXP). Это 68HC08, совсем не PIC.

Re: Помогите с разобраться с прошивкой

Пн мар 30, 2020 10:36:41

NStorm, Вы правы! Выложил немножечко не то! :dont_know: :music: Вот правильная прошивка и корректировок не требует! :)) Вот для этого http://robocua.blogspot.com/2014/01/eas ... clock.html :solder:
Вложения
pic628(1).zip
(3.64 KiB) Скачиваний: 192
Ответить