Програмирование pic на СИ.
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Програмирование pic на СИ.
Есть проект на PIC16F1825. Программа почти написана, но загвоздка в средствах компиляции.
Используются IDE - MPLABX (тот, что переделанный МикроЧипом Эклипс) и компилятор HI-TECH PICC 9.71.
Истек срок пробной версии и компилятор стал генерить ужасные неоптимизированные бинарники.
Искал альтернативу, но так и не нашел. (С PICами дела особо не имел)
Внимание вопрос: Есть ли нормальный бесплатный компилятор Си для PICов?
Используются IDE - MPLABX (тот, что переделанный МикроЧипом Эклипс) и компилятор HI-TECH PICC 9.71.
Истек срок пробной версии и компилятор стал генерить ужасные неоптимизированные бинарники.
Искал альтернативу, но так и не нашел. (С PICами дела особо не имел)
Внимание вопрос: Есть ли нормальный бесплатный компилятор Си для PICов?
I am DX168B and this is my favourite forum on internet!
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: Програмирование pic на СИ.
XC8
За 60 дней успеете?
MPLAB® XC Free Edition:
Supports all the devices and commands of the Standard and PRO Editions
No time or memory restrictions
Limited code optimizations
Unrestricted use—ideal for a low-cost academic or commercial solution
Allows for all the code optimization and commands of the PRO Edition for 60 days – you decide when to turn it on.
An option to activate the use of the PRO Edition features and optimizations is included. After 60 days, the compiler will revert back to the levels of the Free Edition
http://www.microchip.com/pagehandler/en ... s/mplabxc/
Не успеете - пурген для сабжа можно найти.
За 60 дней успеете?
MPLAB® XC Free Edition:
Supports all the devices and commands of the Standard and PRO Editions
No time or memory restrictions
Limited code optimizations
Unrestricted use—ideal for a low-cost academic or commercial solution
Allows for all the code optimization and commands of the PRO Edition for 60 days – you decide when to turn it on.
An option to activate the use of the PRO Edition features and optimizations is included. After 60 days, the compiler will revert back to the levels of the Free Edition
http://www.microchip.com/pagehandler/en ... s/mplabxc/
Не успеете - пурген для сабжа можно найти.
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Програмирование pic на СИ.
Думаю, что успею. Пока сделал по другому. Поставил на VMware WinXP и поставил все это добро туда. Появились лишние 45 дней.
Интересно, почему в коллекции GCC нет компилятора под ПИКи?
ЗЫ: Надеюсь, больше с ПИКами не столкнусь.
Интересно, почему в коллекции GCC нет компилятора под ПИКи?
ЗЫ: Надеюсь, больше с ПИКами не столкнусь.
I am DX168B and this is my favourite forum on internet!
-
misterkuk
- Мучитель микросхем
- Сообщения: 400
- Зарегистрирован: Сб апр 17, 2010 10:30:13
- Контактная информация:
Re: Програмирование pic на СИ.
Chettuser писал(а):PORTB=1; - пишет в RB0 единицу.
А RB0 у Вас на вход оформлен.
Всегда писал и имел в виду что PORTB=1; равносильно PORTB=0b11111111; Все биты в регистре PORTB устанавливаются в 1.
Даже если TRISB = 0b11111111; и в теле прописать PORTB=1; то ничего не происходит и состояние ног не меняется, мало того они в протеусе висят в 3м состоянии.
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: Програмирование pic на СИ.
DX168B писал(а):Интересно, почему в коллекции GCC нет компилятора под ПИКи?
Есть SDCC http://sdcc.sourceforge.net/
-
Chettuser
Re: Програмирование pic на СИ.
misterkuk писал(а):Даже если TRISB = 0b11111111; и в теле прописать PORTB=1;
Ну дык тем более и не будет ничего меняться
Код: Выделить всё
PORTB=1Код: Выделить всё
PORTB=0b00000001Понятное дело, что в порт, настроенный на вход, ничего вывести не получится.

-
misterkuk
- Мучитель микросхем
- Сообщения: 400
- Зарегистрирован: Сб апр 17, 2010 10:30:13
- Контактная информация:
Re: Програмирование pic на СИ.
Я ж за что... но у меня и в порт настроен на выход командой PORTB=1; тоже не записывается. Хотя раньше я часто так делал и всё работало.Понятное дело, что в порт, настроенный на вход, ничего вывести не получится.
-
Chettuser
Re: Програмирование pic на СИ.
Порт на выход настраивается не командой PORTB, а командой TRISB = 0
А PORTB = 1 - это всего лишь установление уровня лог. "1" на ножке RB0 порта, настроенного как выход.
По TRISx, символично:
1 - это равносильно I (Input - вход)
0 - это равносильно O (Output - выход)
А PORTB = 1 - это всего лишь установление уровня лог. "1" на ножке RB0 порта, настроенного как выход.
По TRISx, символично:
1 - это равносильно I (Input - вход)
0 - это равносильно O (Output - выход)
-
misterkuk
- Мучитель микросхем
- Сообщения: 400
- Зарегистрирован: Сб апр 17, 2010 10:30:13
- Контактная информация:
Re: Програмирование pic на СИ.
Собрал тахометр. сигнал потаю на INT. Всё показывает, но при частоте входящей меньше 31Гц на выходе каша и вообще не работает. 31Гц и выше- всё пучком. Посмотрите, будьте добры, что не так? и как можно повысить стабильность, при смене значений заметно мерцание цифр. и цыфры при постоянной частоте немного скачут .
Спойлер
Код: Выделить всё
#include <pic.h>
#include <delay.h>
__CONFIG (0x3F10);
#ifndef XTAL_FREQ
#define XTAL_FREQ 4MHZ /* Crystal frequency in MHz */
#endif
#define led1 RA0
#define led2 RA4
#define led3 RA3
#define led4 RA1
#define led5 RA2
int tmr1temp;
int tmr1temp2;
int tmppodc;
int tmppr;
long tmp;
int num1;
int num10;
int num100;
int num1000;
int num10000;
int hello;
void podgot (void)
{
CMCON = 0x07; // отключение компараторов.
TRISA = 0b00000000; // направление работы ножек порта А.
TRISB = 0b00000001; // направление работы ножек порта В.
RBPU = 1;
PORTA = 0; // очищаем порт А
PORTB = 0; // очищаем порт Б.
led1=1;
led2=1;
led3=1;
led4=1;
led5=1;
// OPTION BIT
T0CS=0; // внутренний сигнал clockout для tmr0
PSA=0; //Предделилель включён перед TMR0
PS2=1;
PS1=1;
PS0=1;
T0IE=0; // Прерывание от TMR0 запрещено
RBPU = 1; // подтягивающие R (0-вкл, 1-выкл).
INTEDG = 0; //Прерывания INT по пер. фронту.
T0SE = 1; // per фронт преращения сигнала.
//T1CON BIT
T1CKPS1 = 0;
T1CKPS0 = 0; //предделитель 1:1
T1OSCEN = 0; // внутренний тактовый генератор выкл.
T1SYNC = 1; // не синхронизировать внешний сигнал
TMR1CS = 0; // Внутреннй источник тактового сигнала.
TMR1ON = 1; // таймер включен.
INTE=1;
///////////////////////////////////////////////////
TMR2ON = 1; // таймер включен.
T2CKPS1=1;
T2CKPS0=1;
/////////
RBIE=0; // разрешение прерывания от RB4:RB7
TMR1IE = 1; // прерывание от 1 таймера on.
tmp=0;
tmppodc=0;
hello=0;
GIE = 1; //разрешить глобальные прерывания .
PEIE = 1;// Разрешить прерывание от перефирийных модулей.
}
////////////////////////////
unsigned int arr_seg2[4]=
{
0b10111010, // H
0b11010110, // E
0b10010100, // L
0b11111100, // O
};
//////////////////////////////////////////
unsigned int arr_seg1[12]=
{
//0bHGFEDCBA
0b11111100, // 0й элемент, символ «0»
0b00101000, // 1й элемент, символ «1»
0b11100110, // 2й элемент, символ «2»
0b01101110, // 3й элемент, символ «3»
0b00111010, // 4й элемент, символ «4»
0b01011110, // 5й элемент, символ «5»
0b11011110, // 6й элемент, символ «6»
0b01101000, // 7й элемент, символ «7»
0b11111110, // 8й элемент, символ «8»
0b01111110, // 9й элемент, символ «9»
};
///////////////////////////////////////////////////
interrupt prerivanie()
{
if (INTF==1)
{
hello=1;
INTF=0;
tmppr = TMR1H<<8;
tmppr +=TMR1L;
TMR1H=0;
TMR1L=0;
tmr1temp2=tmr1temp;
tmr1temp=0;
}
if (TMR1IF==1)
{
TMR1IF=0;
tmr1temp=tmr1temp+1;
}
if(TMR2IF==1)
{
TMR2IF=0;
tmppodc++;
}
}
////////////////////////////////////////////////////
void main (void)
{
podgot ();
//////////////////////////////////////////
do
{
DelayUs(20);
PORTB=arr_seg2[3];
led1=0;
DelayUs(20);
led1=1;
PORTB=arr_seg2[2];
led2=0;
DelayUs(30);
led2=1;
PORTB=arr_seg2[2];
led3=0;
DelayUs(20);
led3=1;
PORTB=arr_seg2[1];
led4=0;
DelayUs(20);
led4=1;
PORTB=arr_seg2[0];
led5=0;
DelayUs(20);
led5=1;
}
while (hello==0); // проверяем условие
/////////////////////////////////////////////
while (1)
{
PORTB=arr_seg1[num1];
led1=0;
DelayUs(20);
led1=1;
PORTB=arr_seg1[num10];
led2=0;
DelayUs(30);
led2=1;
PORTB=arr_seg1[num100];
led3=0;
DelayUs(20);
led3=1;
if(num10000>=1 )
{
PORTB=arr_seg1[num1000];
led4=0;
DelayUs(20);
led4=1;
}
else
{
if(num1000>=1 )
{
PORTB=arr_seg1[num1000];
led4=0;
DelayUs(20);
led4=1;
}
}
if(num10000!=0)
{
PORTB=arr_seg1[num10000];
led5=0;
DelayUs(20);
led5=1;
}
if(tmppodc>=60)
{
tmppodc=0;
if(tmr1temp2>=1)
{
tmp=65535*tmr1temp2; //количество кругов таймера1
}
tmp=tmp+tmppr; // пребовляем то что осталось в таймере до обнуления
tmp=240000000/tmp; // делим число (20000000*60) на t
tmp=tmp/4;
num10000=tmp/10000;
tmp %=10000;
num1000=tmp/1000; // количество тысяч
tmp %=1000; // остаток от деления на 1000
num100=tmp/100; // количество сотен
tmp %=100; // остаток от деления на 100
num10=tmp/10; // кол-во десятков
num1=tmp%10; // остаток - единицы
}
}
}
Re: Програмирование pic на СИ.
misterkuk, вы действительно хотите знать чужое мнение ?
Переписывайте все , это не код ...
Воистину -" если в исходниках присутствует podgot() , не заслуживает даже внимания..."
Переписывайте все , это не код ...
Воистину -" если в исходниках присутствует podgot() , не заслуживает даже внимания..."
-
misterkuk
- Мучитель микросхем
- Сообщения: 400
- Зарегистрирован: Сб апр 17, 2010 10:30:13
- Контактная информация:
Re: Програмирование pic на СИ.
dosikus писал(а):misterkuk, вы действительно хотите знать чужое мнение ?
Переписывайте все , это не код ...
"
Я учусь по самоучителям в интернете. Так я представляю код, как по мне я делаю логично всё. Как обойтись без функции подготовки- не представляю. и всё таки, взгляните , почему при частоте меньше 31Гц расчёт не работает?
П.С. знаю что код примитивный у меня, но я развиваюсь, учусь и надеюсь вы поможете.
Re: Програмирование pic на СИ.
Скорее всего происходит неконтролируемое переполнение таймера..
-
Chettuser
Re: Програмирование pic на СИ.
misterkuk писал(а): на выходе каша и вообще не работает. 31Гц и выше- всё пучком.
А каша какая? Иногда, ковыряясь в каше, можно много интересного выловить.
-
misterkuk
- Мучитель микросхем
- Сообщения: 400
- Зарегистрирован: Сб апр 17, 2010 10:30:13
- Контактная информация:
Re: Програмирование pic на СИ.
Chettuser писал(а):misterkuk писал(а): на выходе каша и вообще не работает. 31Гц и выше- всё пучком.
А каша какая? Иногда, ковыряясь в каше, можно много интересного выловить.
Не отображаются цифры, пять регистров горят как попало, хаотично. В TMR1L и TMR1H начинают прыгать значения и появляется "минус" ( -32 к примеру). и это ниже 31 Гц. Ставлю 31 Гц- всё нормально. Прикрепил архив с исходником и проекте в протеусе версии 7.10.
- Вложения
-
- Новая папка.rar
- (98.46 КБ) 171 скачивание
-
misterkuk
- Мучитель микросхем
- Сообщения: 400
- Зарегистрирован: Сб апр 17, 2010 10:30:13
- Контактная информация:
Re: Програмирование pic на СИ.
HI-TECH Software 9.7
в папке include нет файла для pic12f629 и в других файлах он не прописан. Что делать?
в папке include нет файла для pic12f629 и в других файлах он не прописан. Что делать?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Програмирование pic на СИ.
Поставить другую версию, в которой есть поддержка этого чипа.
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Програмирование pic на СИ.
I am DX168B and this is my favourite forum on internet!
-
Chettuser
Re: Програмирование pic на СИ.
Народ - а откуда брать конфиг для PIC10-PIC16?
Для PIC18 есть файлик помощи - описано там, а тут?
Для PIC18 есть файлик помощи - описано там, а тут?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Програмирование pic на СИ.
В хидерах смотреть.
А файлик есть не в PICC18, а в MCC18. Вы перепутали немного. У хайтека таких мануалов няма
А файлик есть не в PICC18, а в MCC18. Вы перепутали немного. У хайтека таких мануалов няма