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

Поклонники продукции Microchip Technology Inc тусуются тут.
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

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

Сообщение uldemir »

На месте компилятора, я бы объявил забастовку требуя улучшения условий работы и, обязательно, смены руководства. :)) Вы пишете такую несуразицу, что невозможно догадаться, что вам компилятор там может накомпилить, а бедного микроконтроллера, вы еще хотите заставить это выполнить.

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

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

Сообщение sirha »

я конечно понимаю что вы умный ))),я пробовал и 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 правил форума. Подредактировал. Предупрежден!
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

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

Сообщение uldemir »

Для начала не используйте goto. А уж тем более не делайте переходы из цикла наружу. Там могут быть неприятные побочные эффекты. нарисуйте для начала квадратиками алгоритм и по нему уже пишите программу. И еще, помните, что программа выполняется очень быстро. А не "вот тут нажимаем кнопку и переход происходит туда". Нет! до этого микроконтроллер уже сделал миллион переходов не туда. Поэтому вам нужно продумать все варианты ветвления. (не зря Alex привёл тот анекдот. У меня он в тот момент тоже в голове крутился)

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

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

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

Сообщение sirha »

uldemir писал(а):Если хотите конкретного решения - опишите точно, что хотите получить.


помогите пожалуйста написать программу чтобы при нажатии и отпускании кнопки бесконечно мигал светодиод ,пожалуйста напишите полностью код на СИ для компилятора mikroC :(,не могу найти ошибку :(
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

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

Сообщение uldemir »

Примерно так: Пока нет лог.1 на F3 программа крутится в первом цикле. Как будет нажата - будет вертеться во втором, пока не обрубите питание. На дальнейшее состояние кнопки реакции никакой не будет.

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

while (GPIO.F3 != 1);
while(1) {
  GPIO.F0 = 1;
  delay_ms(200);
  GPIO.F0=0;
  delay_ms(200);
};

Надеюсь, вы именно это задумывали? Потому как не понял фразу "при нажатии и отпускании". Мигать начнёт сразу "при нажатии", а "отпускание" уже ни на что не влияет.
Аватара пользователя
sirha
Вымогатель припоя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

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

Сообщение sirha »

uldemir писал(а):Надеюсь, вы именно это задумывали? Потому как не понял фразу "при нажатии и отпускании". Мигать начнёт сразу "при нажатии", а "отпускание" уже ни на что не влияет.


я именно это задумывал)

Вы на самом деле умный человек ,очень сократили программу и пытаетесь помочь мне,но тоже самое пару раз мигает светодиод ((((,нету бесконечного цикла для pic12f675 в протеусе :(

не понимаю в чем проблема в компиляторе?
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

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

Сообщение uldemir »

Насчет протеуса не знаю - в железе обязано работать. Ладно, раз уж вляпался - выложите эту последнюю прошивку.
Последний раз редактировалось uldemir Вс апр 20, 2014 14:14:54, всего редактировалось 1 раз.
Аватара пользователя
sirha
Вымогатель припоя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

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

Сообщение sirha »

uldemir писал(а):Насчет протеуса не знаю - в железе обязано работать.


а можете это откомпилировать пожалуйста, хочу в протеус пихнуть посмотреть,пришлите hex
Вложения
pic1.rar
вот ваша откомпилированная прошивка
(317 байт) 188 скачиваний
Последний раз редактировалось sirha Вс апр 20, 2014 14:19:08, всего редактировалось 1 раз.
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

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

Сообщение uldemir »

что-такое DSN?
Аватара пользователя
sirha
Вымогатель припоя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

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

Сообщение sirha »

заново качните я не то выкладывал,извините

Я разобрался откомпилировал в другом компиляторе и все заработало,Спс uldemir
Последний раз редактировалось AlekseyEnergo Вс май 04, 2014 19:57:04, всего редактировалось 1 раз.
Причина: Нарушение пункта 2.7 правил форума. Подредактировал.
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

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

Сообщение uldemir »

Если вас еще интересует, почему "срабатывало только 2 раза" - похоже, причина в том, что вы не выключали WatchDog (это где-то в конфигурации проекта надо было указать).
Аватара пользователя
sirha
Вымогатель припоя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

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

Сообщение sirha »

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 на СИ.

Сообщение Kvasshtain »

Здравствуйте уважаемые PIC-сты. Прошу вашей помощи :dont_know: . Сам я заедлый 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 ноль. :cry:
Что я делаю не так?
Говорят, что у него нет носа и рта, и что он общается телепатией. Говорят, что у него зеленая кожа, и он питается как растение, закопав ноги в землю и подставив спину солнцу. Все что знаем мы: его зовут Вовэн.
Аватара пользователя
Kvasshtain
Нашел транзистор. Понюхал.
Сообщения: 170
Зарегистрирован: Ср фев 09, 2011 13:29:01
Откуда: г.Саратов

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

Сообщение Kvasshtain »

Вдогонку еще добавлю, что кварц у меня на 9,216МГц. Можть я не правильно сконфигурил?
Последний раз редактировалось AlekseyEnergo Вс май 04, 2014 19:57:55, всего редактировалось 1 раз.
Причина: Нарушение пункта 2.2 правил форума. Предупрежден!
Говорят, что у него нет носа и рта, и что он общается телепатией. Говорят, что у него зеленая кожа, и он питается как растение, закопав ноги в землю и подставив спину солнцу. Все что знаем мы: его зовут Вовэн.
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

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

Сообщение uldemir »

Почитайте даташит на конкретный кристалл под который пишете. В разделе про input/output последнее время есть таблица где какие биты надо выставить, чтобы выводы работали как цифровые. Как правило, по умолчанию они не цифровые.

И.. вот эта строчка вызывает сомнение

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

#pragma config OSC = XT     // Internal oscillator block, port function on RA6 and RA7 

- XT обычно не высокочастотный кварц.

Короче, прежде чем кидаться на мины - сначала читайте даташит.
Chettuser

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

Сообщение Chettuser »

Возможно:

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

LATC = 0xff;
вместо PORTC=0xff;
а также возможно отключить CCP (надо смотреть даташит - мне лениво).
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

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

Сообщение uldemir »

Почитал даташит. Вроде должно работать - на порту C аналоговых входов нету. Для тактирования используйте INTIO2 - Internal Oscillator with I/O on RA6 and RA7. Писать можно и, по старому, в PORTC, и в LATC. Но лучше в LATC - поможет избежать глюки при битовых операциях с портом.
Аватара пользователя
Kvasshtain
Нашел транзистор. Понюхал.
Сообщения: 170
Зарегистрирован: Ср фев 09, 2011 13:29:01
Откуда: г.Саратов

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

Сообщение Kvasshtain »

Доброго времени суток :)) . Все оказалось еще более весело. Добавил из найденного проекта вот эту кракозябру:

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

__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 , но там как то смутно и мало про это написано. Как быть :dont_know: не знаю. Ситуацию с PIC-ами усугубляет политика Microchip-а :kill: , а именно упорное сопротивление попыткам многих энтузиастов сделать нормальный GCC компилятор. Тут так, там так, здесь вообще по другому. Хрен разберешь. У меня даже с STM-ками (а это как ни как ARM), и то проще было.
Говорят, что у него нет носа и рта, и что он общается телепатией. Говорят, что у него зеленая кожа, и он питается как растение, закопав ноги в землю и подставив спину солнцу. Все что знаем мы: его зовут Вовэн.
Vano79
Открыл глаза
Сообщения: 60
Зарегистрирован: Пт янв 11, 2013 10:54:43

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

Сообщение Vano79 »

Вот только я плохо понимаю как эту кракозябру правильно составлять. У меня даже с STM-ками (а это как ни как ARM), и то проще было.
Как у вас с STM было проще, если вы принципиально не хотите посмотреть даташит на пик-контроллер?! В папке с компилятором есть мануал + примеры. И какой программатор? Зажечь светодиоды на пике после STM, дело 20-30 минут.
Аватара пользователя
Kvasshtain
Нашел транзистор. Понюхал.
Сообщения: 170
Зарегистрирован: Ср фев 09, 2011 13:29:01
Откуда: г.Саратов

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

Сообщение Kvasshtain »

Дело не в датащите на PIC. А в том, что в разных компиляторах это делается по разному. В STM-ке не зависимо от компилятора, подключаешь заголовочник скаченный с официального сайта и вперед. Тут же какой-то трындец. Даже сравнивая заголовочники для одного и того же контроллера в разных версиях одного и того же компилятора (уж не говорю о разных) поражавшийся этим дебилизмом. Вот пример: взял два компилятора от HI-TECH. Один версии 9.50, другой версии 9.66. Во-первых в версии 9.50 нет отдельного заголовочника для PIC18F2620, а есть только для PIC18F4620, в котором написано нижеследующее:

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

/* 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. Не я конечно понимаю, что могу это все сам сделать, но на фиг тогда такой компилятор с такими библиотеками. Да, жалко мне тех людей которые пишут код под одним компилятором, а потом у них ни фига не работает на другом.
Говорят, что у него нет носа и рта, и что он общается телепатией. Говорят, что у него зеленая кожа, и он питается как растение, закопав ноги в землю и подставив спину солнцу. Все что знаем мы: его зовут Вовэн.
Ответить

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