Страница 24 из 103

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

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

во втором исходнике нет второго goto label1... но всё-равно, написано криво. Сначала попробуйте сами выполнить то, что написали.

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

Добавлено: Вс апр 20, 2014 13:37:23
sirha
я конечно понимаю что вы умный ))),я пробовал и c goto label1 и без goto label1, подскажите пожалуста как мне правильно код написать для MikroC чтобы не мучить микроконтроллер,то что написано во втором исходнике сам написал и оно работает :)))

вот что вышло :

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

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

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

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

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

Добавлено: Вс апр 20, 2014 13:57:10
sirha
uldemir писал(а): Если хотите конкретного решения - опишите точно, что хотите получить.
помогите пожалуйста написать программу чтобы при нажатии и отпускании кнопки бесконечно мигал светодиод ,пожалуйста напишите полностью код на СИ для компилятора mikroC :(,не могу найти ошибку :(

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

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

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

while (GPIO.F3 != 1);
while(1) {
  GPIO.F0 = 1;
  delay_ms(200);
  GPIO.F0=0;
  delay_ms(200);
};
Надеюсь, вы именно это задумывали? Потому как не понял фразу "при нажатии и отпускании". Мигать начнёт сразу "при нажатии", а "отпускание" уже ни на что не влияет.

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

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

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

не понимаю в чем проблема в компиляторе?

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

Добавлено: Вс апр 20, 2014 14:12:18
uldemir
Насчет протеуса не знаю - в железе обязано работать. Ладно, раз уж вляпался - выложите эту последнюю прошивку.

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

Добавлено: Вс апр 20, 2014 14:14:51
sirha
uldemir писал(а):Насчет протеуса не знаю - в железе обязано работать.
а можете это откомпилировать пожалуйста, хочу в протеус пихнуть посмотреть,пришлите hex

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

Добавлено: Вс апр 20, 2014 14:18:42
uldemir
что-такое DSN?

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

Добавлено: Вс апр 20, 2014 14:19:46
sirha
заново качните я не то выкладывал,извините

Я разобрался откомпилировал в другом компиляторе и все заработало,Спс uldemir

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

Добавлено: Вс апр 20, 2014 15:48:18
uldemir
Если вас еще интересует, почему "срабатывало только 2 раза" - похоже, причина в том, что вы не выключали WatchDog (это где-то в конфигурации проекта надо было указать).

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

Добавлено: Вс апр 20, 2014 16:48:55
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++; }
при нажатии на кнопку ноль реакции

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

Добавлено: Ср апр 23, 2014 15:56:31
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:
Что я делаю не так?

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

Добавлено: Ср апр 23, 2014 16:18:08
Kvasshtain
Вдогонку еще добавлю, что кварц у меня на 9,216МГц. Можть я не правильно сконфигурил?

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

Добавлено: Ср апр 23, 2014 19:28:27
uldemir
Почитайте даташит на конкретный кристалл под который пишете. В разделе про input/output последнее время есть таблица где какие биты надо выставить, чтобы выводы работали как цифровые. Как правило, по умолчанию они не цифровые.

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

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

#pragma config OSC = XT     // Internal oscillator block, port function on RA6 and RA7 
- XT обычно не высокочастотный кварц.

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

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

Добавлено: Ср апр 23, 2014 19:29:46
Chettuser
Возможно:

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

LATC = 0xff;
вместо PORTC=0xff;
а также возможно отключить CCP (надо смотреть даташит - мне лениво).

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

Добавлено: Ср апр 23, 2014 20:32:33
uldemir
Почитал даташит. Вроде должно работать - на порту C аналоговых входов нету. Для тактирования используйте INTIO2 - Internal Oscillator with I/O on RA6 and RA7. Писать можно и, по старому, в PORTC, и в LATC. Но лучше в LATC - поможет избежать глюки при битовых операциях с портом.

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

Добавлено: Чт апр 24, 2014 09:41:34
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), и то проще было.

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

Добавлено: Чт апр 24, 2014 10:09:58
Vano79
Вот только я плохо понимаю как эту кракозябру правильно составлять. У меня даже с STM-ками (а это как ни как ARM), и то проще было.
Как у вас с STM было проще, если вы принципиально не хотите посмотреть даташит на пик-контроллер?! В папке с компилятором есть мануал + примеры. И какой программатор? Зажечь светодиоды на пике после STM, дело 20-30 минут.

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

Добавлено: Чт апр 24, 2014 11:11:13
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. Не я конечно понимаю, что могу это все сам сделать, но на фиг тогда такой компилятор с такими библиотеками. Да, жалко мне тех людей которые пишут код под одним компилятором, а потом у них ни фига не работает на другом.