Програмирование pic на СИ.
Re: Програмирование pic на СИ.
На месте компилятора, я бы объявил забастовку требуя улучшения условий работы и, обязательно, смены руководства. :)) Вы пишете такую несуразицу, что невозможно догадаться, что вам компилятор там может накомпилить, а бедного микроконтроллера, вы еще хотите заставить это выполнить.
во втором исходнике нет второго goto label1... но всё-равно, написано криво. Сначала попробуйте сами выполнить то, что написали.
во втором исходнике нет второго goto label1... но всё-равно, написано криво. Сначала попробуйте сами выполнить то, что написали.
Re: Програмирование pic на СИ.
я конечно понимаю что вы умный ))),я пробовал и c goto label1 и без goto label1, подскажите пожалуста как мне правильно код написать для MikroC чтобы не мучить микроконтроллер,то что написано во втором исходнике сам написал и оно работает 
вот что вышло :
вот что вышло :
- Вложения
-
- prohiv.rar
- сами прошивки
- (826 байт) 181 скачивание
-
- pic1.rar
- для avr и для pic
для avr работает для pic мигает почему то 6 раз ? - (15.67 КБ) 199 скачиваний
Последний раз редактировалось AlekseyEnergo Вс май 04, 2014 19:53:26, всего редактировалось 2 раза.
Причина: Нарушение пункта 2.7 правил форума. Подредактировал. Предупрежден!
Причина: Нарушение пункта 2.7 правил форума. Подредактировал. Предупрежден!
Re: Програмирование pic на СИ.
Для начала не используйте goto. А уж тем более не делайте переходы из цикла наружу. Там могут быть неприятные побочные эффекты. нарисуйте для начала квадратиками алгоритм и по нему уже пишите программу. И еще, помните, что программа выполняется очень быстро. А не "вот тут нажимаем кнопку и переход происходит туда". Нет! до этого микроконтроллер уже сделал миллион переходов не туда. Поэтому вам нужно продумать все варианты ветвления. (не зря Alex привёл тот анекдот. У меня он в тот момент тоже в голове крутился)
У меня тоже бывают ступоры, когда хочется бросить кусок кода в тему и спросить: что я делаю не так? Но, как правило, пока напишешь сообщение и опишешь все симптомы - сам начинаешь понимать, где допустил плюху и сообщение просто удаляется. Т.е. просто нужно навести порядок у себя в голове.
Если хотите конкретного решения - опишите точно, что хотите получить.
У меня тоже бывают ступоры, когда хочется бросить кусок кода в тему и спросить: что я делаю не так? Но, как правило, пока напишешь сообщение и опишешь все симптомы - сам начинаешь понимать, где допустил плюху и сообщение просто удаляется. Т.е. просто нужно навести порядок у себя в голове.
Если хотите конкретного решения - опишите точно, что хотите получить.
Re: Програмирование pic на СИ.
uldemir писал(а):Если хотите конкретного решения - опишите точно, что хотите получить.
помогите пожалуйста написать программу чтобы при нажатии и отпускании кнопки бесконечно мигал светодиод ,пожалуйста напишите полностью код на СИ для компилятора mikroC
Re: Програмирование pic на СИ.
Примерно так: Пока нет лог.1 на F3 программа крутится в первом цикле. Как будет нажата - будет вертеться во втором, пока не обрубите питание. На дальнейшее состояние кнопки реакции никакой не будет.
Надеюсь, вы именно это задумывали? Потому как не понял фразу "при нажатии и отпускании". Мигать начнёт сразу "при нажатии", а "отпускание" уже ни на что не влияет.
Код: Выделить всё
while (GPIO.F3 != 1);
while(1) {
GPIO.F0 = 1;
delay_ms(200);
GPIO.F0=0;
delay_ms(200);
};Надеюсь, вы именно это задумывали? Потому как не понял фразу "при нажатии и отпускании". Мигать начнёт сразу "при нажатии", а "отпускание" уже ни на что не влияет.
Re: Програмирование pic на СИ.
uldemir писал(а):Надеюсь, вы именно это задумывали? Потому как не понял фразу "при нажатии и отпускании". Мигать начнёт сразу "при нажатии", а "отпускание" уже ни на что не влияет.
я именно это задумывал)
Вы на самом деле умный человек ,очень сократили программу и пытаетесь помочь мне,но тоже самое пару раз мигает светодиод ((((,нету бесконечного цикла для pic12f675 в протеусе
не понимаю в чем проблема в компиляторе?
Re: Програмирование pic на СИ.
Насчет протеуса не знаю - в железе обязано работать. Ладно, раз уж вляпался - выложите эту последнюю прошивку.
Последний раз редактировалось uldemir Вс апр 20, 2014 14:14:54, всего редактировалось 1 раз.
Re: Програмирование pic на СИ.
uldemir писал(а):Насчет протеуса не знаю - в железе обязано работать.
а можете это откомпилировать пожалуйста, хочу в протеус пихнуть посмотреть,пришлите hex
- Вложения
-
- pic1.rar
- вот ваша откомпилированная прошивка
- (317 байт) 188 скачиваний
Последний раз редактировалось sirha Вс апр 20, 2014 14:19:08, всего редактировалось 1 раз.
Re: Програмирование pic на СИ.
что-такое DSN?
Re: Програмирование pic на СИ.
заново качните я не то выкладывал,извините
Я разобрался откомпилировал в другом компиляторе и все заработало,Спс uldemir
Я разобрался откомпилировал в другом компиляторе и все заработало,Спс uldemir
Последний раз редактировалось AlekseyEnergo Вс май 04, 2014 19:57:04, всего редактировалось 1 раз.
Причина: Нарушение пункта 2.7 правил форума. Подредактировал.
Причина: Нарушение пункта 2.7 правил форума. Подредактировал.
Re: Програмирование pic на СИ.
Если вас еще интересует, почему "срабатывало только 2 раза" - похоже, причина в том, что вы не выключали WatchDog (это где-то в конфигурации проекта надо было указать).
Re: Програмирование pic на СИ.
uldemir писал(а):Если вас еще интересует, почему "срабатывало только 2 раза" - похоже, причина в том, что вы не выключали WatchDog (это где-то в конфигурации проекта надо было указать).
Вы гений ,я отрубил, и в этом компиляторе все заработало как нужно, спасибо
Подскажите где ошибся???
Код: Выделить всё
void main(void){
CMCON=0x7;
TRISB.F3=0;
CCP1CON = 0b1100 ;
TMR2=1;
PR2=4000;
CCPR1L=0;
while(!PORTB.F4&CCPR1L<161)
{
delay_ms(1);
CCPR1L++; }
при нажатии на кнопку ноль реакции
- Kvasshtain
- Нашел транзистор. Понюхал.
- Сообщения: 170
- Зарегистрирован: Ср фев 09, 2011 13:29:01
- Откуда: г.Саратов
Re: Програмирование pic на СИ.
Здравствуйте уважаемые PIC-сты. Прошу вашей помощи
. Сам я заедлый AVR-вец, наверное по этому и проблемы. Друг попросил сбацать простое приложение именно на PIC18F2620, для управления светодиодами, но вот незатея. Для PIC16F84 я когда то подобное делал, но тут не хочет работать хоть ты тресни. Я даже зажечь светодиод на ножке не могу. Вот мой быдлокод:
У меня на машине стоит MPLAB IDE v8.92 а в ней HI-TECH PICC-18 v9.66.
Все компилится но не хочет работать. Светодиод молчит как партизан. На всех ножках порта C ноль.
Что я делаю не так?
. Сам я заедлый AVR-вец, наверное по этому и проблемы. Друг попросил сбацать простое приложение именно на PIC18F2620, для управления светодиодами, но вот незатея. Для PIC16F84 я когда то подобное делал, но тут не хочет работать хоть ты тресни. Я даже зажечь светодиод на ножке не могу. Вот мой быдлокод:Код: Выделить всё
#include <stdio.h>
#include <stdlib.h>
#include <pic18f2620.h>
#pragma config WDT = OFF //
#pragma config OSC = XT // Internal oscillator block, port function on RA6 and RA7
int main(void)
{
TRISC = 0;
PORTC = 0xff;
while(1)
{
}
}
У меня на машине стоит MPLAB IDE v8.92 а в ней HI-TECH PICC-18 v9.66.
Все компилится но не хочет работать. Светодиод молчит как партизан. На всех ножках порта C ноль.
Что я делаю не так?
Говорят, что у него нет носа и рта, и что он общается телепатией. Говорят, что у него зеленая кожа, и он питается как растение, закопав ноги в землю и подставив спину солнцу. Все что знаем мы: его зовут Вовэн.
- Kvasshtain
- Нашел транзистор. Понюхал.
- Сообщения: 170
- Зарегистрирован: Ср фев 09, 2011 13:29:01
- Откуда: г.Саратов
Re: Програмирование pic на СИ.
Вдогонку еще добавлю, что кварц у меня на 9,216МГц. Можть я не правильно сконфигурил?
Последний раз редактировалось AlekseyEnergo Вс май 04, 2014 19:57:55, всего редактировалось 1 раз.
Причина: Нарушение пункта 2.2 правил форума. Предупрежден!
Причина: Нарушение пункта 2.2 правил форума. Предупрежден!
Говорят, что у него нет носа и рта, и что он общается телепатией. Говорят, что у него зеленая кожа, и он питается как растение, закопав ноги в землю и подставив спину солнцу. Все что знаем мы: его зовут Вовэн.
Re: Програмирование pic на СИ.
Почитайте даташит на конкретный кристалл под который пишете. В разделе про input/output последнее время есть таблица где какие биты надо выставить, чтобы выводы работали как цифровые. Как правило, по умолчанию они не цифровые.
И.. вот эта строчка вызывает сомнение
- XT обычно не высокочастотный кварц.
Короче, прежде чем кидаться на мины - сначала читайте даташит.
И.. вот эта строчка вызывает сомнение
Код: Выделить всё
#pragma config OSC = XT // Internal oscillator block, port function on RA6 and RA7 - XT обычно не высокочастотный кварц.
Короче, прежде чем кидаться на мины - сначала читайте даташит.
-
Chettuser
Re: Програмирование pic на СИ.
Возможно:
вместо PORTC=0xff;
а также возможно отключить CCP (надо смотреть даташит - мне лениво).
Код: Выделить всё
LATC = 0xff;а также возможно отключить CCP (надо смотреть даташит - мне лениво).
Re: Програмирование pic на СИ.
Почитал даташит. Вроде должно работать - на порту C аналоговых входов нету. Для тактирования используйте INTIO2 - Internal Oscillator with I/O on RA6 and RA7. Писать можно и, по старому, в PORTC, и в LATC. Но лучше в LATC - поможет избежать глюки при битовых операциях с портом.
- Kvasshtain
- Нашел транзистор. Понюхал.
- Сообщения: 170
- Зарегистрирован: Ср фев 09, 2011 13:29:01
- Откуда: г.Саратов
Re: Програмирование pic на СИ.
Доброго времени суток
. Все оказалось еще более весело. Добавил из найденного проекта вот эту кракозябру:
И все завелось. Вот только я плохо понимаю как эту кракозябру правильно составлять. Нашел вот такой документ: http://www.google.ru/url?sa=t&rct=j&q=& ... EOaHbnE1Pg , но там как то смутно и мало про это написано. Как быть
не знаю. Ситуацию с PIC-ами усугубляет политика Microchip-а
, а именно упорное сопротивление попыткам многих энтузиастов сделать нормальный GCC компилятор. Тут так, там так, здесь вообще по другому. Хрен разберешь. У меня даже с STM-ками (а это как ни как ARM), и то проще было.
Код: Выделить всё
__CONFIG(1, HSPLL & FCMDIS & IESODIS);
__CONFIG(2, PWRTEN & BORDIS & BORV28 & WDTEN & WDTPS_1024); //WDTDIS
__CONFIG(3, LPT1DIS & MCLREN);
__CONFIG(4, XINSTDIS & STVRDIS & LVPDIS & DEBUGDIS);
__CONFIG(5, UNPROTECT);
__CONFIG(6, WRTEN);
И все завелось. Вот только я плохо понимаю как эту кракозябру правильно составлять. Нашел вот такой документ: http://www.google.ru/url?sa=t&rct=j&q=& ... EOaHbnE1Pg , но там как то смутно и мало про это написано. Как быть
не знаю. Ситуацию с PIC-ами усугубляет политика Microchip-а
, а именно упорное сопротивление попыткам многих энтузиастов сделать нормальный GCC компилятор. Тут так, там так, здесь вообще по другому. Хрен разберешь. У меня даже с STM-ками (а это как ни как ARM), и то проще было.Говорят, что у него нет носа и рта, и что он общается телепатией. Говорят, что у него зеленая кожа, и он питается как растение, закопав ноги в землю и подставив спину солнцу. Все что знаем мы: его зовут Вовэн.
Re: Програмирование pic на СИ.
Как у вас с STM было проще, если вы принципиально не хотите посмотреть даташит на пик-контроллер?! В папке с компилятором есть мануал + примеры. И какой программатор? Зажечь светодиоды на пике после STM, дело 20-30 минут.Вот только я плохо понимаю как эту кракозябру правильно составлять. У меня даже с STM-ками (а это как ни как ARM), и то проще было.
- Kvasshtain
- Нашел транзистор. Понюхал.
- Сообщения: 170
- Зарегистрирован: Ср фев 09, 2011 13:29:01
- Откуда: г.Саратов
Re: Програмирование pic на СИ.
Дело не в датащите на PIC. А в том, что в разных компиляторах это делается по разному. В STM-ке не зависимо от компилятора, подключаешь заголовочник скаченный с официального сайта и вперед. Тут же какой-то трындец. Даже сравнивая заголовочники для одного и того же контроллера в разных версиях одного и того же компилятора (уж не говорю о разных) поражавшийся этим дебилизмом. Вот пример: взял два компилятора от HI-TECH. Один версии 9.50, другой версии 9.66. Во-первых в версии 9.50 нет отдельного заголовочника для PIC18F2620, а есть только для PIC18F4620, в котором написано нижеследующее:
, а у 9.66 PIC18F2620 выделен отдельно.
Затем для примера смотрим в сами заголовочники. Вот как заданы дефайны для битов регистра TRISC в версии 9.50
и чуть ниже
А вот как у 9.66
это меня сначала сильно запутало. Т.к. в примерах чаще всего к отдельному пину обращаются как TRISCbits.RC1 например, а не TRISCbits. TRISC1. Не я конечно понимаю, что могу это все сам сделать, но на фиг тогда такой компилятор с такими библиотеками. Да, жалко мне тех людей которые пишут код под одним компилятором, а потом у них ни фига не работает на другом.
Код: Выделить всё
/* header file for the MICROCHIP PIC18 microcontroller
PIC18F2525
PIC18F2620
PIC18F4525
PIC18F4620
*/
, а у 9.66 PIC18F2620 выделен отдельно.
Затем для примера смотрим в сами заголовочники. Вот как заданы дефайны для битов регистра TRISC в версии 9.50
Код: Выделить всё
static volatile near unsigned char TRISC @ 0xF94;
и чуть ниже
Код: Выделить всё
/* Definitions for TRISC register */
static volatile near bit TRISC0 @ ((unsigned)&TRISC*8)+0;
static volatile near bit TRISC1 @ ((unsigned)&TRISC*8)+1;
static volatile near bit TRISC2 @ ((unsigned)&TRISC*8)+2;
static volatile near bit TRISC3 @ ((unsigned)&TRISC*8)+3;
static volatile near bit TRISC4 @ ((unsigned)&TRISC*8)+4;
static volatile near bit TRISC5 @ ((unsigned)&TRISC*8)+5;
static volatile near bit TRISC6 @ ((unsigned)&TRISC*8)+6;
static volatile near bit TRISC7 @ ((unsigned)&TRISC*8)+7;
А вот как у 9.66
Код: Выделить всё
// Register: TRISC
extern volatile unsigned char TRISC @ 0xF94;
extern volatile unsigned char DDRC @ 0xF94;
// bit and bitfield definitions
extern volatile bit TRISC0 @ ((unsigned)&TRISC*8)+0;
extern volatile bit TRISC1 @ ((unsigned)&TRISC*8)+1;
extern volatile bit TRISC2 @ ((unsigned)&TRISC*8)+2;
extern volatile bit TRISC3 @ ((unsigned)&TRISC*8)+3;
extern volatile bit TRISC4 @ ((unsigned)&TRISC*8)+4;
extern volatile bit TRISC5 @ ((unsigned)&TRISC*8)+5;
extern volatile bit TRISC6 @ ((unsigned)&TRISC*8)+6;
extern volatile bit TRISC7 @ ((unsigned)&TRISC*8)+7;
//extern volatile bit RC0 @ ((unsigned)&TRISC*8)+0;
//extern volatile bit RC1 @ ((unsigned)&TRISC*8)+1;
//extern volatile bit RC2 @ ((unsigned)&TRISC*8)+2;
//extern volatile bit RC3 @ ((unsigned)&TRISC*8)+3;
//extern volatile bit RC4 @ ((unsigned)&TRISC*8)+4;
//extern volatile bit RC5 @ ((unsigned)&TRISC*8)+5;
//extern volatile bit RC6 @ ((unsigned)&TRISC*8)+6;
//extern volatile bit RC7 @ ((unsigned)&TRISC*8)+7;
extern union {
struct {
volatile unsigned TRISC0 : 1;
volatile unsigned TRISC1 : 1;
volatile unsigned TRISC2 : 1;
volatile unsigned TRISC3 : 1;
volatile unsigned TRISC4 : 1;
volatile unsigned TRISC5 : 1;
volatile unsigned TRISC6 : 1;
volatile unsigned TRISC7 : 1;
};
struct {
volatile unsigned RC0 : 1;
volatile unsigned RC1 : 1;
volatile unsigned RC2 : 1;
volatile unsigned RC3 : 1;
volatile unsigned RC4 : 1;
volatile unsigned RC5 : 1;
volatile unsigned RC6 : 1;
volatile unsigned RC7 : 1;
};
} TRISCbits @ 0xF94;
это меня сначала сильно запутало. Т.к. в примерах чаще всего к отдельному пину обращаются как TRISCbits.RC1 например, а не TRISCbits. TRISC1. Не я конечно понимаю, что могу это все сам сделать, но на фиг тогда такой компилятор с такими библиотеками. Да, жалко мне тех людей которые пишут код под одним компилятором, а потом у них ни фига не работает на другом.
Говорят, что у него нет носа и рта, и что он общается телепатией. Говорят, что у него зеленая кожа, и он питается как растение, закопав ноги в землю и подставив спину солнцу. Все что знаем мы: его зовут Вовэн.