Страница 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-сты. Прошу вашей помощи

. Сам я заедлый 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 ноль.
Что я делаю не так?
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
Возможно:
вместо 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 , но там как то смутно и мало про это написано. Как быть

не знаю. Ситуацию с PIC-ами усугубляет политика Microchip-а

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