Програмирование pic на СИ.

Поклонники продукции Microchip Technology Inc тусуются тут.
Kisslotnik
Родился
Сообщения: 2
Зарегистрирован: Вс фев 09, 2014 14:44:23

Re: Програмирование pic на СИ.

Сообщение Kisslotnik »

люди росто умоляю! не прошу а умоляю ! уже все сделал плату спаял а вот с прошивкой немогу разобраться.имееться исходник в asm надо както сделать hex .Я пробовал но там куча ошибок при компелирование.прошивка под pic12f509...ктото поможет скомпилировать нормально? может там кое что изменить чуть чуть...
Вот цитата из статьи для чего это устройство "АВТОЗАПУСК ДВИГАТЕЛЯ АВТОМОБИЛЯ
ПЕРВЫЙ, УПРОЩЕННЫЙ ВАРИАНТ БЕЗ ИНДИКАЦИИ

Это моя одна из первых разработок. Здесь всего два реле для управления: включение зажигания и включения стартера. Для запуска предусмотрено два канала, один от сигнализации, другой свободный от, например внешнего электронного таймера-часов. Я для этих целей использовал китайские электронные часы за $1 в виде пейджера. Я соединил коллектор ключевого транзистора часов (управление пищалкой) со входом устройства автозапуска. Активный уровень сигнала для запуска - низкий. Вот функции, которыми обладает устройство автозапуска:

- возможность запустить двигатель дистанционно по свободному каналу сигнализации (при условии положении коробки передач в состоянии PARKING);
- запуск двигателя по внешнему сигналу
- грамотное слежение и управление режимами работы мотора при запуске и прогреве;


Устройство автозапуска при заводе двигателя проверяет положение коробки передач, что предотвращает включение стартера при установке автомобиля на одной из передач и отслеживает обороты двигателя, отслеживая момент завода. После запуска мотор будет работать в течение 10 минут, после чего автоматически заглушится. При переключении передач или при нажатии на педаль газа, двигатель автоматически заглохнет. Если двигатель заглох или не завелся за 6 секунд работы стартера, то будет предпринято еще 2 попытки через 15 секунд ожидания."
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Програмирование pic на СИ.

Сообщение Аlex »

Ни ссылки на статью, ни исходников, ни ошибок, ничего не показали. Одни только эмоции :facepalm:
Kisslotnik
Родился
Сообщения: 2
Зарегистрирован: Вс фев 09, 2014 14:44:23

Re: Програмирование pic на СИ.

Сообщение Kisslotnik »

все взято отсюда http://www.disall.narod.ru/carstart.htm
схема уже спаянна контролер куплен 12f509
как делать компиляцию уже научился только вот бы поправитьисходник чтоб все было нормально и небыло ошибок..... там есть кое какие значения по вреени которые я бы хотел ещё изменить


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


фух вроде разобрался!еслиб знал как выложить сюда прошивку выложилбы ...

щас вопрос другой как бы можно было сделать чтоб при повторном нажатие на сигналку двигатель глушился ,не переделывая схему устройства,это возмможно? это трудно сделать?
Последний раз редактировалось AlekseyEnergo Пн фев 10, 2014 22:15:38, всего редактировалось 1 раз.
Причина: Нарушение пункта 2.2 правил форума. Подредактировал. Предупредил!
electronik_tver
Открыл глаза
Сообщения: 54
Зарегистрирован: Пн авг 05, 2013 12:18:46

Re: Програмирование pic на СИ.

Сообщение electronik_tver »

Схему посмотрел, заглушить возможно не меняя схемы ни как иначе чем отпустить реле зажигания и при наличии исходника и запаса памяти мк все программно осуществимо. В асм не лазил не силен, предположу что если на управляющих входах активный низкий некотой длительности, как на доп канале мгогих сигналок то в программе добавляем блок который меняет состояние реле зажигания при каждом таком импульсе на входе. Кстате не нашел в схеме чем мк видит нажатый тормоз, видимо нужно использовать сборный сигнал блокировки паркинг. Если конечно это еще актуально для умоляющего )
Аватара пользователя
Штабскапитан Овечкин
Грызет канифоль
Сообщения: 251
Зарегистрирован: Вт апр 29, 2008 14:19:10
Откуда: Великий Новгород (не путать с Нижним)
Контактная информация:

Re: Програмирование pic на СИ.

Сообщение Штабскапитан Овечкин »

Для работы с 1886ве2у (аналог PIC17C756A) нужен HI-TECH_PICC_v9.50_PL2. Излазил все Гуглы и прочие Яндексы - все ссылки дохлые. На сайтах Микрочипа и Хайтека тоже, похоже, давно уже отправлено в мусор. Может ли кто из многоуважаемых кошаков поделиться? Моё мыло: hachupiva<злая собака>ngs.ru.
Вся электроника работает на волшебном синем дыме, ибо, когда этот дым её покидает, электроника умирает.
Аватара пользователя
skleptik
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Ср авг 08, 2012 20:22:11
Откуда: Красноярск

Re: Програмирование pic на СИ.

Сообщение skleptik »

Здрасте!
Самостоятельно осваиваю программирование на си исследуя чужие тексты программ.
Вот зашел в тупик. Помогите плиз. ткните носом где не прав, или где посмотреть, как правильно.
Пользую MPLAB X ide 1.95 и Proteus 8.

При добавлении строк проса кнопки, программа перестает работать в протеусе, а в симуляторе MPLAB работает. Там по тексту прокомментировано какие строки.

Цель. программа - генератор импульсов с двумя кнопками, + и - величины паузы, соответственно частоты импульсов. Программа только для учебных целей пишется.

/*
* File: generator.c
* Author: Skleptik
*
* Created on 25 Февраль 2014 г., 19:43
*/

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

#include "pic12f675.h"
#pragma config FOSC = INTRCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON // Power-Up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = OFF // GP3/MCLR pin function select (GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD)
#pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled)
#pragma config CP = OFF // Code Protection bit (Program Memory code protection is disabled)
#pragma config CPD = OFF //

#define out1 GPIO0
#define out2 GPIO1
#define kn1 GPIO2
#define kn2 GPIO3
#define led1 GPIO4
#define led2 GPIO5

void init(void) /*Подпрограмма инициализации микроконтроллера*/
{
CMCON=0x07; //Выключаем модуль компаратора
OPTION_REG=0b01111111; //Устанавливаем предделитель TMR0 1:1
TRISIO=0b00001100; //Задаем направление работы порта A
GPIO=0; //Устанавливаем необходимыелогические уровни
WPU=0b00000100;
IOCB=0b00001100;
}

void delay (unsigned int time)
{
while (time-->0);
}

void main (void)
{
char temp;
unsigned int i;
i=1;
temp=0;
init();
while (1)
{
while (kn1==0) // При добавлении этих строк , программа перестает работать в протеусе.
{ // а в симуляторе MPLAB работает.
delay(10); //
temp=i++; //
} //
if (kn1==1); //
{ // Эти строки тут кончаются.
delay(temp);
out1=1;
delay(temp);
out1=0;
}
}
}
Вложения
Programma.txt
текст программы
(1.77 КБ) 310 скачиваний
Alpout
Открыл глаза
Сообщения: 77
Зарегистрирован: Вт сен 27, 2011 09:27:40

Re: Програмирование pic на СИ.

Сообщение Alpout »

Есть вопос по Си..Что значат этот код. Мудреный код, не оч понял.

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

#define SetBit(x,y) (x|=(1<<y))
#define ClrBit(x,y) (x&=~(1<<y))
#define ToggleBit(x,y) (x^=(1<<y))
#define TestBit(x,y) (x&(1<<y))
а конкретнее

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

(x&=~(1<<y))
вот эти условия что означают?
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: Програмирование pic на СИ.

Сообщение urry »

y номер бита, который нужно сбросить в 0 (нумеруется от 0 до 7)
х - это регистр или байт, в котором сбрасывается бит
(x&=~(1<<y))

пусть в регистре PORTA нужно обнулить 7 разряд
ClrBit(PORTA,7);

1<<y 1<<7 это дает 0b1000000
~(1<<y) инвертирование 0b01111111
PORTA = PORTA & 0b01111111;


:)) :)) :))
Alpout
Открыл глаза
Сообщения: 77
Зарегистрирован: Вт сен 27, 2011 09:27:40

Re: Програмирование pic на СИ.

Сообщение Alpout »

urry писал(а): 1<<y

знак после единички это же сдвиг, то есть семь раз сдвигает 1ку?
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Програмирование pic на СИ.

Сообщение dosikus »

Alpout писал(а): то есть семь раз сдвигает 1ку?


Угу , но все это делает препроцессор и до компиляции преобразуется в константы.
Применяется для читаемости кода ...
eleks
Родился
Сообщения: 18
Зарегистрирован: Ср мар 26, 2014 16:20:34

Re: Програмирование pic на СИ.

Сообщение eleks »

Как проверить в MikroC состояние любого бита в любом байте? Или каким образом можно организовать доступ как с самому байту целиком, так и к каждому его биту отдельно.
Пока операции с байтом пытаюсь делать следующим образом (внутрискобочное выражение с байтом istatus в операторе IF).

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

if (0b00100000 & istatus) buf[1][1] = buf[1][1] | 0b00000100; // if Overcurrent

Но, не уверен, что это правильно

Поторопился с сообщением. :)
Достаточно было поднять взгляд чуть выше
AlVitIs
Родился
Сообщения: 1
Зарегистрирован: Пн апр 14, 2014 22:59:16

Re: Програмирование pic на СИ.

Сообщение AlVitIs »

Пытался задать вопрос на форуме микрочип, но там меня проигнорировали, или.... таких проблем ни у кого не было....
Месяц бьюсь над ответом от датчика по i2c. Прошу помощи.
Исходные данные: МК - p16f690, пакет программирования - mikroC c библиотеками....
Надо - реализовать обмен по I2C....

Есть программа (это уже вычещена, только мин функции для проверки)...

Код:
Спойлер

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

unsigned int lightH, lightL, light, proximityH, proximityL, current_duty, proximity;
// unsigned short  count_3sek, count_strob, flag,  out_light, ZOUT;
//bit  flag0, flag1;

// Software I2C connections
sbit Soft_I2C_Scl           at RB5_bit;
sbit Soft_I2C_Sda           at RB4_bit;
sbit Soft_I2C_Scl_Direction at TRISB5_bit;
sbit Soft_I2C_Sda_Direction at TRISB4_bit;
// End Software I2C connections


Init_VNCL400(){
  Soft_I2C_Start();
  Soft_I2C_Write(0x26);
  Soft_I2C_Write(0x83);
  Soft_I2C_Write(10);
  Soft_I2C_Stop();

  PORTA.RA0 = 1;

  Soft_I2C_Start();
  Soft_I2C_Write(0x26);
  Soft_I2C_Write(0x84);
  Soft_I2C_Write(0x80);
  Soft_I2C_Stop();

  PORTA.RA1 = 1;

  Soft_I2C_Start();
  Soft_I2C_Write(0x26);
  Soft_I2C_Write(0x89);
  Soft_I2C_Write(2);
  Soft_I2C_Stop();

  PORTA.RA2 = 1;

  Soft_I2C_Start();
  Soft_I2C_Write(0x26);
  Soft_I2C_Write(0x8A);
  Soft_I2C_Write(0x81);
  Soft_I2C_Stop();
 
 
}

void Read_VNCL400() {

  Soft_I2C_Start();
  Soft_I2C_Write(0x26);
  Soft_I2C_Write(0x85);
  Soft_I2C_Stop();
  Soft_I2C_Start();
  Soft_I2C_Write(0x27);
  lightH = Soft_I2C_Read(0);
  Soft_I2C_Stop();
 
  PORTA.RA4 = 1;
 
  Soft_I2C_Start();
  Soft_I2C_Write(0x26);
  Soft_I2C_Write(0x86);
  Soft_I2C_Stop();
  Soft_I2C_Start();
  Soft_I2C_Write(0x27);
  lightL = Soft_I2C_Read(0);
  Soft_I2C_Stop();

  PORTA.RA5 = 1;

//  lightL = Soft_I2C_Read(1);
//  proximityH = Soft_I2C_Read(1);
//  proximityL = Soft_I2C_Read(0);
//  Soft_I2C_Stop();

}

 void Transform_light() {
     light = ((((lightH<<8)&0xFF00))+ lightL);
 //      light =  lightL;
 //    proximity = (((proximityH<<8)&0xFF00)+ proximityL);
//       proximity = proximityL;

}



//---------- Performs project-wide init
void Init_Main() {


  ANSEL  = 0;
  ANSELH = 0;
 
  TRISA = 0x00;
  TRISB = 0x00;
  TRISC = 0x00;
 
  PORTA = 0x00;
  PORTB = 0x00;
  PORTC = 0x00;

  TRISA = 0x00;
  TRISB = 0x00;
  TRISC = 0x00;

  OPTION_REG = 0x80;
  WPUA = 0 ;
  WPUB = 0 ;

  INTCON = 0;

  Soft_I2C_Init();           // Initialize Soft I2C communication
  Init_VNCL400();
 
  current_duty = 200;
  PWM1_Init(1000);               // Initialize ECCP (PWM)
  PWM1_Start();
}

void main() {
  Delay_ms(10);

  Init_Main();
  while (1) {
    void Read_VNCL400();
    void Transform_light();
   
    if (light>100) {
         PORTC.RC4 = 1;
         current_duty = 200;
         }
    else            {
         PORTC.RC4 = 0;
         current_duty = 100;
         }

    if (lightH>0) PORTC.RC3 = 1;          // проверка снятия измерения
     else         PORTC.RC3 = 0;

    if (lightH>250) PORTC.RC6 = 1;       // проверка снятия измерения
     else        PORTC.RC6 = 0;
     
    if (lightL>250) PORTC.RC7 = 1;       // проверка снятия измерения
     else           PORTC.RC7 = 0;

     PWM1_Set_Duty(current_duty);

    Delay_ms(500);
  }
}

Порт А и С использую для контроля пеередачи...

Так вот, после загрузки параметров в VNCL400 - порты отзываются (по уровням на ра.0, ра.1 и р0а.2 ), а после блоков чтения (ра.4 и ра.5) - тишина. На мой взгляд там прога в МК и виснит.
Может я что-то не так делаю?????
Аватара пользователя
sirha
Вымогатель припоя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Re: Програмирование pic на СИ.

Сообщение sirha »

Токо начал изучать pic ,подскажите пожалусте где ошибка,никак не могу зажечь светодиод кнопкой

проект компилирую в MikroC:

pic12f675

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

void main (void)
{

TRISIO = 0b11110;

GPIO.F0 = 0;


 for (;;)
 {

if (GPIO.F1 ==0)

{delay_ms(50);
GPIO.F0 = 1;}

else

{GPIO.F0 = 0;}

}}
Вложения
prote.rar
проект в протеусе
(6.22 КБ) 170 скачиваний
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Програмирование pic на СИ.

Сообщение Аlex »

У 675 порты по-умолчанию - аналоговые. Как их перевести в цифровые I/O - курим тех. документацию.
Аватара пользователя
sirha
Вымогатель припоя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Re: Програмирование pic на СИ.

Сообщение sirha »

Аlex писал(а):У 675 порты по-умолчанию - аналоговые. Как их перевести в цифровые I/O - курим тех. документацию.


млииин спс огромное :music:

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

void main (void)
{

TRISIO = 0b11110;
ANSEL.F1 = 0 ;   // включение цифрового входа
ADCON0 = 0; //  выключаем  ацп
CMCON=0x7;  //выключаем  компараторы



 for (;;)
 {

if (GPIO.F1 ==1)

{delay_ms(50);
GPIO.F0 = 1;}

else

{  delay_ms(50);
GPIO.F0 = 0;}

}}
Аватара пользователя
anatol378
Мудрый кот
Сообщения: 1833
Зарегистрирован: Вс окт 04, 2009 13:23:12
Откуда: н. новгород

Re: Програмирование pic на СИ.

Сообщение anatol378 »

Штабскапитан Овечкин писал(а): Излазил все Гуглы и прочие Яндексы - все ссылки дохлые.

Восстанавливаем пробелы выполненные в виде нижнего подчеркивания и первая строка в Гугле
https://www.google.ru/search?newwindow= ... FZ8OrmxL8I
выдала ссылку (живая)
http://eldigi.ru/site/prog/9.php
Лучше умному тупить, чем тупому умничать
Аватара пользователя
sirha
Вымогатель припоя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Re: Програмирование pic на СИ.

Сообщение sirha »

Подскажите пожайлуста почему в протеусе не выполняется бесконечный цикл :( ?
кнопку жму долговата (сек 5) и цикл выполняется всего 2 раза

pic12f675

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

void main (void)
{

TRISIO = 0b111000;
ANSEL.F3 = 0 ;   // включение цифрового входа

CMCON=0x7;  //выключаем  компараторы

  GPIO=0;


if (GPIO.F3==1)


{

while(1)
{
GPIO.F0 = 1;
delay_ms(200);
GPIO.F0=0;
delay_ms(200);
GPIO.F1=1;
delay_ms(200);
GPIO.F1=0;
delay_ms(200);
GPIO.F2=1;
delay_ms(200);
GPIO.F2=0;
delay_ms(200);
}}}
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Програмирование pic на СИ.

Сообщение uldemir »

А что, по вашему мнению, должно происходить когда GPIO.F3 не равно 1?
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Програмирование pic на СИ.

Сообщение Аlex »

Вспомнился анекдот.
Программист ставит себе на тумбочку перед сном два стакана.
Один с водой - на случай, если захочет ночью пить.
А второй пустой - на случай, если не захочет.
:)
Аватара пользователя
sirha
Вымогатель припоя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Re: Програмирование pic на СИ.

Сообщение sirha »

Обьясните тогда как мне сделать чтобы после нажатия кнопки был бы бесконечный цикл,при этом отпустив кнопку

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

void main (void)
{

 
TRISIO = 0b111000;
ANSEL.F3 = 0 ;   // включение цифрового входа

CMCON=0x7;  //выключаем  компараторы

  GPIO=0;

while(1)
{
if (GPIO.F3==1)

{  goto label1; }

 else
 
 {goto label2;  }
}

label1:

  while(1)
  {
GPIO.F0 = 1;
delay_ms(200);
GPIO.F0=0;
delay_ms(200);
goto label1;
 }

  label2:
 
  while(1)
  {break;}

}


ну сейчас то почему не пашет??

мигает 6 раз)

ведь цикл уже после условия

вот проект для avr который однако работает в бесконечном цикле дак в чем же тогда причина?,подскажите пожалуста

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

label3:

while (1)
      {
     if (PINB.0==0)
{ goto label1;}
else
{goto label2;}
      } 
     
      label1:
      while(1)
      {
      PORTC.0=1;
      delay_ms(50);
      PORTC.0=0;
      delay_ms(50);
 
      }     
      label2:
      while(1)
      {
     goto label3;}
}
Ответить

Вернуться в «PIC»