Програмирование pic на СИ.
-
Kisslotnik
- Родился
- Сообщения: 2
- Зарегистрирован: Вс фев 09, 2014 14:44:23
Re: Програмирование pic на СИ.
люди росто умоляю! не прошу а умоляю ! уже все сделал плату спаял а вот с прошивкой немогу разобраться.имееться исходник в asm надо както сделать hex .Я пробовал но там куча ошибок при компелирование.прошивка под pic12f509...ктото поможет скомпилировать нормально? может там кое что изменить чуть чуть...
Вот цитата из статьи для чего это устройство "АВТОЗАПУСК ДВИГАТЕЛЯ АВТОМОБИЛЯ
ПЕРВЫЙ, УПРОЩЕННЫЙ ВАРИАНТ БЕЗ ИНДИКАЦИИ
Это моя одна из первых разработок. Здесь всего два реле для управления: включение зажигания и включения стартера. Для запуска предусмотрено два канала, один от сигнализации, другой свободный от, например внешнего электронного таймера-часов. Я для этих целей использовал китайские электронные часы за $1 в виде пейджера. Я соединил коллектор ключевого транзистора часов (управление пищалкой) со входом устройства автозапуска. Активный уровень сигнала для запуска - низкий. Вот функции, которыми обладает устройство автозапуска:
- возможность запустить двигатель дистанционно по свободному каналу сигнализации (при условии положении коробки передач в состоянии PARKING);
- запуск двигателя по внешнему сигналу
- грамотное слежение и управление режимами работы мотора при запуске и прогреве;
Устройство автозапуска при заводе двигателя проверяет положение коробки передач, что предотвращает включение стартера при установке автомобиля на одной из передач и отслеживает обороты двигателя, отслеживая момент завода. После запуска мотор будет работать в течение 10 минут, после чего автоматически заглушится. При переключении передач или при нажатии на педаль газа, двигатель автоматически заглохнет. Если двигатель заглох или не завелся за 6 секунд работы стартера, то будет предпринято еще 2 попытки через 15 секунд ожидания."
Вот цитата из статьи для чего это устройство "АВТОЗАПУСК ДВИГАТЕЛЯ АВТОМОБИЛЯ
ПЕРВЫЙ, УПРОЩЕННЫЙ ВАРИАНТ БЕЗ ИНДИКАЦИИ
Это моя одна из первых разработок. Здесь всего два реле для управления: включение зажигания и включения стартера. Для запуска предусмотрено два канала, один от сигнализации, другой свободный от, например внешнего электронного таймера-часов. Я для этих целей использовал китайские электронные часы за $1 в виде пейджера. Я соединил коллектор ключевого транзистора часов (управление пищалкой) со входом устройства автозапуска. Активный уровень сигнала для запуска - низкий. Вот функции, которыми обладает устройство автозапуска:
- возможность запустить двигатель дистанционно по свободному каналу сигнализации (при условии положении коробки передач в состоянии PARKING);
- запуск двигателя по внешнему сигналу
- грамотное слежение и управление режимами работы мотора при запуске и прогреве;
Устройство автозапуска при заводе двигателя проверяет положение коробки передач, что предотвращает включение стартера при установке автомобиля на одной из передач и отслеживает обороты двигателя, отслеживая момент завода. После запуска мотор будет работать в течение 10 минут, после чего автоматически заглушится. При переключении передач или при нажатии на педаль газа, двигатель автоматически заглохнет. Если двигатель заглох или не завелся за 6 секунд работы стартера, то будет предпринято еще 2 попытки через 15 секунд ожидания."
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Програмирование pic на СИ.
Ни ссылки на статью, ни исходников, ни ошибок, ничего не показали. Одни только эмоции 

-
Kisslotnik
- Родился
- Сообщения: 2
- Зарегистрирован: Вс фев 09, 2014 14:44:23
Re: Програмирование pic на СИ.
все взято отсюда http://www.disall.narod.ru/carstart.htm
схема уже спаянна контролер куплен 12f509
как делать компиляцию уже научился только вот бы поправитьисходник чтоб все было нормально и небыло ошибок..... там есть кое какие значения по вреени которые я бы хотел ещё изменить
ага ,немного разобрался, файл уже компилиться ноосталось несколько варнингов по сирене ,ноя не использую сирену в прошивке использую как дополнительный вход...
фух вроде разобрался!еслиб знал как выложить сюда прошивку выложилбы ...
щас вопрос другой как бы можно было сделать чтоб при повторном нажатие на сигналку двигатель глушился ,не переделывая схему устройства,это возмможно? это трудно сделать?
схема уже спаянна контролер куплен 12f509
как делать компиляцию уже научился только вот бы поправитьисходник чтоб все было нормально и небыло ошибок..... там есть кое какие значения по вреени которые я бы хотел ещё изменить
ага ,немного разобрался, файл уже компилиться ноосталось несколько варнингов по сирене ,ноя не использую сирену в прошивке использую как дополнительный вход...
фух вроде разобрался!еслиб знал как выложить сюда прошивку выложилбы ...
щас вопрос другой как бы можно было сделать чтоб при повторном нажатие на сигналку двигатель глушился ,не переделывая схему устройства,это возмможно? это трудно сделать?
Последний раз редактировалось AlekseyEnergo Пн фев 10, 2014 22:15:38, всего редактировалось 1 раз.
Причина: Нарушение пункта 2.2 правил форума. Подредактировал. Предупредил!
Причина: Нарушение пункта 2.2 правил форума. Подредактировал. Предупредил!
-
electronik_tver
- Открыл глаза
- Сообщения: 54
- Зарегистрирован: Пн авг 05, 2013 12:18:46
Re: Програмирование pic на СИ.
Схему посмотрел, заглушить возможно не меняя схемы ни как иначе чем отпустить реле зажигания и при наличии исходника и запаса памяти мк все программно осуществимо. В асм не лазил не силен, предположу что если на управляющих входах активный низкий некотой длительности, как на доп канале мгогих сигналок то в программе добавляем блок который меняет состояние реле зажигания при каждом таком импульсе на входе. Кстате не нашел в схеме чем мк видит нажатый тормоз, видимо нужно использовать сборный сигнал блокировки паркинг. Если конечно это еще актуально для умоляющего )
- Штабскапитан Овечкин
- Грызет канифоль
- Сообщения: 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 на СИ.
Здрасте!
Самостоятельно осваиваю программирование на си исследуя чужие тексты программ.
Вот зашел в тупик. Помогите плиз. ткните носом где не прав, или где посмотреть, как правильно.
Пользую 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;
}
}
}
Самостоятельно осваиваю программирование на си исследуя чужие тексты программ.
Вот зашел в тупик. Помогите плиз. ткните носом где не прав, или где посмотреть, как правильно.
Пользую 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 скачиваний
Re: Програмирование pic на СИ.
Есть вопос по Си..Что значат этот код. Мудреный код, не оч понял. а конкретнее вот эти условия что означают?
Код: Выделить всё
#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 на СИ.
y номер бита, который нужно сбросить в 0 (нумеруется от 0 до 7)
х - это регистр или байт, в котором сбрасывается бит
(x&=~(1<<y))
пусть в регистре PORTA нужно обнулить 7 разряд
ClrBit(PORTA,7);
1<<y 1<<7 это дает 0b1000000
~(1<<y) инвертирование 0b01111111
PORTA = PORTA & 0b01111111;

х - это регистр или байт, в котором сбрасывается бит
(x&=~(1<<y))
пусть в регистре PORTA нужно обнулить 7 разряд
ClrBit(PORTA,7);
1<<y 1<<7 это дает 0b1000000
~(1<<y) инвертирование 0b01111111
PORTA = PORTA & 0b01111111;
Re: Програмирование pic на СИ.
urry писал(а): 1<<y
знак после единички это же сдвиг, то есть семь раз сдвигает 1ку?
Re: Програмирование pic на СИ.
Alpout писал(а): то есть семь раз сдвигает 1ку?
Угу , но все это делает препроцессор и до компиляции преобразуется в константы.
Применяется для читаемости кода ...
Re: Програмирование pic на СИ.
Как проверить в MikroC состояние любого бита в любом байте? Или каким образом можно организовать доступ как с самому байту целиком, так и к каждому его биту отдельно.
Пока операции с байтом пытаюсь делать следующим образом (внутрискобочное выражение с байтом istatus в операторе IF).
Но, не уверен, что это правильно
Поторопился с сообщением.
Достаточно было поднять взгляд чуть выше
Пока операции с байтом пытаюсь делать следующим образом (внутрискобочное выражение с байтом istatus в операторе IF).
Код: Выделить всё
if (0b00100000 & istatus) buf[1][1] = buf[1][1] | 0b00000100; // if OvercurrentНо, не уверен, что это правильно
Поторопился с сообщением.
Достаточно было поднять взгляд чуть выше
Re: Програмирование pic на СИ.
Пытался задать вопрос на форуме микрочип, но там меня проигнорировали, или.... таких проблем ни у кого не было....
Месяц бьюсь над ответом от датчика по i2c. Прошу помощи.
Исходные данные: МК - p16f690, пакет программирования - mikroC c библиотеками....
Надо - реализовать обмен по I2C....
Есть программа (это уже вычещена, только мин функции для проверки)...
Код:
Порт А и С использую для контроля пеередачи...
Так вот, после загрузки параметров в VNCL400 - порты отзываются (по уровням на ра.0, ра.1 и р0а.2 ), а после блоков чтения (ра.4 и ра.5) - тишина. На мой взгляд там прога в МК и виснит.
Может я что-то не так делаю?????
Месяц бьюсь над ответом от датчика по 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) - тишина. На мой взгляд там прога в МК и виснит.
Может я что-то не так делаю?????
Re: Програмирование pic на СИ.
Токо начал изучать pic ,подскажите пожалусте где ошибка,никак не могу зажечь светодиод кнопкой
проект компилирую в MikroC:
pic12f675
проект компилирую в 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 на СИ.
У 675 порты по-умолчанию - аналоговые. Как их перевести в цифровые I/O - курим тех. документацию.
Re: Програмирование pic на СИ.
Аlex писал(а):У 675 порты по-умолчанию - аналоговые. Как их перевести в цифровые I/O - курим тех. документацию.
млииин спс огромное
Код: Выделить всё
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;}
}}Re: Програмирование pic на СИ.
Штабскапитан Овечкин писал(а): Излазил все Гуглы и прочие Яндексы - все ссылки дохлые.
Восстанавливаем пробелы выполненные в виде нижнего подчеркивания и первая строка в Гугле
https://www.google.ru/search?newwindow= ... FZ8OrmxL8I
выдала ссылку (живая)
http://eldigi.ru/site/prog/9.php
Лучше умному тупить, чем тупому умничать
Re: Програмирование pic на СИ.
Подскажите пожайлуста почему в протеусе не выполняется бесконечный цикл
?
кнопку жму долговата (сек 5) и цикл выполняется всего 2 раза
pic12f675
кнопку жму долговата (сек 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);
}}}Re: Програмирование pic на СИ.
А что, по вашему мнению, должно происходить когда GPIO.F3 не равно 1?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Програмирование pic на СИ.
Вспомнился анекдот.

Программист ставит себе на тумбочку перед сном два стакана.
Один с водой - на случай, если захочет ночью пить.
А второй пустой - на случай, если не захочет.
Re: Програмирование pic на СИ.
Обьясните тогда как мне сделать чтобы после нажатия кнопки был бы бесконечный цикл,при этом отпустив кнопку
ну сейчас то почему не пашет??
мигает 6 раз)
ведь цикл уже после условия
вот проект для avr который однако работает в бесконечном цикле дак в чем же тогда причина?,подскажите пожалуста
Код: Выделить всё
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;}
}