Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 18.03.2007, 19:38   #1
michipic
Senior Member
 
Аватар для michipic
 
Регистрация: 26.02.2007
Адрес: Москва
Сообщений: 182
Вес репутации: 151/45
michipic has a spectacular aura aboutmichipic has a spectacular aura about
По умолчанию Делаете ли вы в МК закладки для отладки?

Часто бывает, новая разработка, или даже отработанная схема, код - но никак не идёт. Тут выручает закладка для отладки. У меня это так - если есть свободный вывод, ввожу включение режима отладки с него. Для вывода состояния регистров, флагов и управления отладкой использую имеющиеся в девайсе кнопки и индикаторы, выводы МК для наблюдения осциллографом.
Плюс этого способа в том, что наладка производится в составе рабочего модуля, а не "тепличных" условиях тестовых плат.
Минус - некоторая потеря времени на опрос кнопки "Отладка".

Код:
; п/п разрядки конденсатора
dischar bcf   PORTB,3     ; откл СД оптотиристора зарядки
        call  time50      ; вызов п/п задержки на 50 мс
        bsf   PORTB,4     ; вкл СД оптотиристора разрядки
        call  time05      ; вызов п/п задержки на 0,5 мс
        call  otladka4    ; наладка окончания разрядки
        nop
*************************************
; п\п наладки окончания зарядки
otladka4 
        btfss  PORTA,4    ; тест флага отладки
        goto   tes4       ; флаг=0, нет отладки
        btfss PORTB,0     ; тест RB0 (Кн ПУСК)
        goto  $-1         ; "0" -  зацикливаем да нажатия кнопки ПУСК
        call  time500     ; вызов п/п задержки на 50 мс
        btfsc PORTB,0     ; тест RB0 (Кн ПУСК)
        goto  $-1         ; "1" -  зацикливаем да отпускания кнопки ПУСК
tes4    nop               ;
        return            ;
Миниатюры
otl.JPG  
__________________
ну и что?
michipic вне форума   Ответить с цитированием
Старый 18.03.2007, 19:50   #2
DL36
Senior Member
 
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/98
DL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant future
По умолчанию Re: Делаете ли вы в МК закладки для отладки?

Можно и по другому. На любой вывод я подключаю двухцветный светодиод. В процессе работы можно просто индицировать 7 состояний.
Миниатюры
Индикатор.JPG  
DL36 вне форума   Ответить с цитированием
Старый 18.03.2007, 21:39   #3
VXDRV
Senior Member
 
Аватар для VXDRV
 
Регистрация: 25.02.2007
Адрес: Karagandy
Возраст: 35
Сообщений: 372
Вес репутации: 135/47
VXDRV will become famous soon enoughVXDRV will become famous soon enough
Отправить сообщение для VXDRV с помощью ICQ
По умолчанию Re: Делаете ли вы в МК закладки для отладки?

А я всегда USART использую для вывода регистров и контроля поэтапного прохождения кусков программы.
VXDRV вне форума   Ответить с цитированием
Старый 19.03.2007, 01:51   #4
pic_unga
Banned
 
Регистрация: 10.03.2007
Сообщений: 31
Вес репутации: 100/0
pic_unga will become famous soon enoughpic_unga will become famous soon enough
По умолчанию Re: Делаете ли вы в МК закладки для отладки?

Я как прочитал о "закладках" на pid.by.ru/z4.htm так и использую их. Вначале пишу код вывода отладочной инфы и отлаживаю его в реале, а затем начинаю добавлять собственно алгоритм.

Т.е. я отлаживаю не всю программу, а по кускам по мере ее увеличения.
pic_unga вне форума   Ответить с цитированием
Старый 19.03.2007, 06:06   #5
IgorV
Senior Member
 
Аватар для IgorV
 
Регистрация: 25.02.2007
Адрес: всем пока
Возраст: 48
Сообщений: 4,100
Вес репутации: 1883/102
IgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant future
Отправить сообщение для IgorV с помощью Skype™
По умолчанию +1

Цитата:
Сообщение от VXDRV Посмотреть сообщение
А я всегда USART использую для вывода регистров и контроля поэтапного прохождения кусков программы.
Только не так немного. Небольшая терминальная прога в ПИКе, с которой можно общаться через гипертерминал. По мере роста проги добавляются новые функции в терминале. Типа так:
Код:
typedef  void  (* FUNC)(void);

typedef struct _command {
    char const  *   cmd;
    char const	*   descr;
    FUNC    func;
} COMMAND;




const COMMAND	cmds[] = 
    {
    {	"?", 	    "тоже что и help",                  cmd_help	},
    {	"help",     "показать все команды",             cmd_help	},
    {   "fill",     "все поле одним цветом",            cmd_fill        },
    {   "gcb",      "построить цветные полосы",         cmd_gcb         },
    {   "attr",     "установить цвет фона и чернил",    cmd_setAttr     },
    {   "time",     "показать время",                   cmd_putTime     },
    {   "font",     "просмотр таблицы символов",        cmd_font        }, 
    {   "ruler",    "просмотр линейки",                 cmd_ruler       }, 
    {   "channel",  "просмотр каналов",                 cmd_channel     }, 
    {   "xmodem",   "тест xmodem",                      cmd_xmodem      },
    {   "reboot",   "перезагрузка",                     cmd_reboot      } 
};
IgorV вне форума   Ответить с цитированием
Старый 19.03.2007, 08:49   #6
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,789
Вес репутации: 5397/163
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию хороший ембеддер выйдет :)

Цитата:
Сообщение от pic_unga Посмотреть сообщение
Вначале пишу код вывода отладочной инфы и отлаживаю его в реале, а затем начинаю добавлять собственно алгоритм.

Т.е. я отлаживаю не всю программу, а по кускам по мере ее увеличения.
это очень правильный подход - рассматривать конечную функцию устройства лишь как малую часть большой "отладочной системы".

можно лишь добавить, что при отсутствии "железного" уарта можно запросто замутить и программный. (из плюсов - не нужен "макс" )

тут коллега Хуторный разбирает нюансы создания высокоскоростных программных уартов (до 230400 на обычном 4 МГц пике)
http://hutorny.in.ua/projects/high-speed-rs232-for-pic
Greg вне форума   Ответить с цитированием
Старый 19.03.2007, 09:39   #7
pic_unga
Banned
 
Регистрация: 10.03.2007
Сообщений: 31
Вес репутации: 100/0
pic_unga will become famous soon enoughpic_unga will become famous soon enough
По умолчанию Re: хороший ембеддер выйдет :)

Цитата:
Сообщение от Greg Посмотреть сообщение
это очень правильный подход - рассматривать конечную функцию устройства лишь как малую часть большой "отладочной системы".
Главное очень удобно. Еще на этапе написания сразу выявляется проблема и они не превращаются в "растущий снежный ком".

Цитата:
Сообщение от Greg Посмотреть сообщение
коллега Хуторный разбирает нюансы создания высокоскоростных программных уартов (до 230400 на обычном 4 МГц пике)
http://hutorny.in.ua/projects/high-speed-rs232-for-pic
Спасибо. Читаю ...
pic_unga вне форума   Ответить с цитированием
Старый 19.03.2007, 09:54   #8
pic_unga
Banned
 
Регистрация: 10.03.2007
Сообщений: 31
Вес репутации: 100/0
pic_unga will become famous soon enoughpic_unga will become famous soon enough
По умолчанию Re: +1

Цитата:
Сообщение от IgorV Посмотреть сообщение
Только не так немного. Небольшая терминальная прога в ПИКе, с которой можно общаться через гипертерминал. По мере роста проги добавляются новые функции в терминале.
Очень интересно - идея ясна. Но я начинающий и не понятен механизм до конца. Как беруться команды из приемника USART ?

Поясни чуток подробней. Или пример проги выложи пожалуйста.
pic_unga вне форума   Ответить с цитированием
Старый 19.03.2007, 10:12   #9
LeoN
Senior Member
 
Аватар для LeoN
 
Регистрация: 12.03.2007
Адрес: Оренбургская обл.
Сообщений: 162
Вес репутации: 116/45
LeoN will become famous soon enoughLeoN will become famous soon enough
По умолчанию Re: Делаете ли вы в МК закладки для отладки?

Цитата:
Сообщение от DL36 Посмотреть сообщение
Можно и по другому. На любой вывод я подключаю двухцветный светодиод. В процессе работы можно просто индицировать 7 состояний.
7??? Растолкуйте, пожалуйста.
LeoN вне форума   Ответить с цитированием
Старый 19.03.2007, 10:32   #10
DL36
Senior Member
 
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/98
DL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant future
По умолчанию Re: Делаете ли вы в МК закладки для отладки?

Цитата:
Сообщение от LeoN Посмотреть сообщение
7??? Растолкуйте, пожалуйста.
Код:
//тип светодиода Зелёный                  Красный         
//                       Потушен                 Постоянно горит     
//                       Потушен                 Мигает *      
//                       Мигает *                Мигает **   
//                       Мигает *                Мигает *      
//                       Мигает **              Мигает *    
//                       Мигает *                Потушен      
//                       Постоянно горит     Потушен 

#pragma interrupt_level 1
void syscont(char c){
     switch (c)    {
        case 0:    // Мигаем зелёным
            BITCLR(PORTN,BITN);
            BITINV(TRISN,BITN);
            BITSET(syst,SYST0); //поднять флаг обработки
            return;
        case 1:    //Поочередно зеленый красный
            BITINV(PORTN,BITN);
            BITCLR(TRISN,BITN);
            BITSET(syst,SYST0);
            return;
        case 2:    // Мигаем красным
            BITSET(PORTN,BITN);
            BITINV(TRISN,BITN);
            BITSET(syst,SYST0);
            return;
...
....
DL36 вне форума   Ответить с цитированием
Старый 19.03.2007, 11:06   #11
IgorV
Senior Member
 
Аватар для IgorV
 
Регистрация: 25.02.2007
Адрес: всем пока
Возраст: 48
Сообщений: 4,100
Вес репутации: 1883/102
IgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant future
Отправить сообщение для IgorV с помощью Skype™
По умолчанию Re: Делаете ли вы в МК закладки для отладки?

Код:
void BreakDel(void){
	while (*pInput==' '){
		if(*pInput) pInput++;// если не конец, то перейти на следующий
	}

}

	
char cmpDelimeter(char dlmtr){
	BreakDel();
	if(*pInput++==dlmtr) return 1; // совпало
	puts232("\r\nнужно '");
	put232(dlmtr);
	puts232("'\r\n");
	return 0;//несовпало

}

unsigned inputVal(char h){
unsigned int sum=0;
unsigned char temp;
	BreakDel();
	while(*pInput){
		temp=*pInput;
		temp-=0x30; // сместить значение символа до цифры
		if(temp>9 ) {
            if(!h)  return sum;// если десятичные только -выход
        
                    //для hex-ов 
        
            temp+=0x30; // вернуть к буквам
            if(temp>='A' && temp<='F') temp-='A'-0x0A;
            else if(temp>='a' && temp<='f') temp-='a'-0x0A;
            else return sum;
        }    
        
		sum<<=4;
	    sum+=temp;
		pInput++;
        
	}
	return sum;
}



void cmd_translate(void){

static bit found;
char temp;
char * ptmpBI;
char i,token;
char maxtoken=NUMCOLLAPS;

    if(extCmdsEnable) maxtoken=MAXTOKEN; // сколько команд доступно

	BreakDel(); // убрать лишние пробелы
	ptmpBI=pInput; //первая буква

    if(!*pInput) return; // если просто нажат ентер - ничего не выдавать

	for(token=0; token<maxtoken; token++){
		found=1;
		pInput=	ptmpBI; //восстановить указатель на первую букву
        
		for(i=0;i<LEN_CMD;i++,pInput++){
			if(i==num_input) {found=0;break;}
			temp=cmds[token].cmd[i];
			if(!temp) break;
			

			if(temp!=*pInput){found=0;break;}
		}
		if(found) break;
	}
	if(found) {
        numLastToken=token;
        cmds[token].func();// вызвать найденную функцию
	}
    else {
		puts232("неверно. наберите help");
		enter232();
	}
}



void input(void){
static bit firstSpin;
char c;
unsigned int temp;

char maxtoken=NUMCOLLAPS;

    if(extCmdsEnable) maxtoken=MAXTOKEN; // сколько команд доступно

	temp=get232();
	if(temp==0) return;
	c=temp & 0xFF;
	if(c==ENTER){
		firstSpin=1;
		buffInput[num_input++]=0;// завершение строки нулём
		enter232();

		pInput=buffInput;// начало строки

		cmd_translate(); //опознать и запустить команду
		num_input=0; // очистить буфер
		return;
	}else 
	if(c==UP){
		if(firstSpin) firstSpin=0;
		else
		if(--numLastToken<1)numLastToken=maxtoken-1;

		num_input=strlen(cmds[numLastToken].cmd);
		memcpy(buffInput,cmds[numLastToken].cmd,8);
		puts232("\r          \r");
		puts232(buffInput);


	}else 
	if(c==DOWN){
		if(firstSpin) firstSpin=0;
		else
		if(++numLastToken >= maxtoken ) numLastToken=1;
		num_input=strlen(cmds[numLastToken].cmd);
		memcpy(buffInput,cmds[numLastToken].cmd,8);
		puts232("\r          \r");
		puts232(buffInput);

	}
	else if(c==LEFT && num_input){
			num_input--;
			put232(LEFT);put232(' ');put232(LEFT);
	}else 
	if(num_input<(LENINPUT-1)){
		if( c>=0x20 && c <0x7F) {
			buffInput[num_input++]=c;
			put232(c);
		}
	}
}

unsigned int get232(void){
static ix=0;
char temp;
	if(indx232inbeg==indx232inend) {
		return 0;
	}
	
	

	temp=buff232in[indx232inend++];
	if(indx232inend>=LenBuffIn) indx232inend=0;


	if(!RC232IF)RC232IF--; // есть кнопка убавить
	
	if(ix==0){
		if(temp==0x1b){
			ix++;
			return 0;
		}
	}else if(ix==1){
		if(temp==0x5b){
			ix++;
			return 0;
		} else ix=0;
	}else if(ix==2){
			ix=0;
		if(temp==0x41){
			return UP   | 0x8000;

		}else if(temp==0x42){
			return DOWN | 0x8000;

		}else if(temp==0x43){
			return RIGHT| 0x8000;

		}else if(temp==0x44){
			return LEFT | 0x8000;
		}

	}
	if(!temp) return 0;
	return (unsigned int)temp|0x8000;

}
Байты берутся из кольцевого буфера в который они попали в прерывании от приемника USART.

Синтаксис команд для терминала может быть разнообразной, команды без параметров, с параметрами и т.п.
Вот так например вводится новое время:
сlock 23:34:56
ниже под это
Код:
char setTime(void){
char tempHH,tempMM,tempSS=0, tempDATE, tempMONTH, tempYEAR;

	
	tempHH=(char)inputVal(0);

	if(!cmpDelimeter(':')) return 1;
	
	if(tempHH>0x23) return 1;

	tempMM=(char)inputVal(0);
	if(tempMM>0x59) return 1;

	if((*pInput)==':'){//для секунд
        pInput++;
		tempSS=(char)inputVal(0);
		if(tempSS>0x59) return 1;
	}
	ds[HH]=tempHH;
	ds[MM]=tempMM;
	ds[SS]=tempSS;

	if((*pInput)==' '){//если продолжить то будет дата
		tempDATE=(char)inputVal(0);
		if(tempDATE>0x31 || !tempDATE) return 1;
	

		if(!cmpDelimeter('.')) return 1;
		tempMONTH=(char)inputVal(0);
		if(tempMONTH>0x12 || !tempMONTH) return 1;

		if(!cmpDelimeter('.')) return 1;
		tempYEAR=(char)inputVal(0);
		if(tempYEAR>0x99) return 1;
		ds[DATE]=tempDATE;
		ds[MONTH]=tempMONTH;
		ds[YEAR]=tempYEAR;
	
	}
	SET_1307();
	prn_time(1);// сначала прочитает что записано
	puts232("\t");
	prn_date(0);
	enter232();
//	numLastToken=time;
	return 0;
}
IgorV вне форума   Ответить с цитированием
Старый 19.03.2007, 11:39   #12
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,789
Вес репутации: 5397/163
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию ты не пугайся только того, что Игорь написал :)

такие вещи делаются один раз и кочуют из проекта в проект, в виде задач ОС или на что ещё хватит фантазии и ресурсов.
Главное - подход, когда вся настройка и диагностика девайса строится от такого вот меню.
У меня такие менюшки (настройки, диагностика, просмотр статистики) встречаются и в проектах на восьминогих камнях с 1к памяти (12F675). Команды все однобуквенные. А под тексты строк можно дополнительно задействовать и eeprom, благо у того же 675 она 128 байт, а у 683 - все 256. При софтовом уарте для согласования уровней с RS-232 надо всего 3 резистора (два на вход, один на выход). При этом ногу передатчика в рабочем (в свободное от обмена по уарт время) режиме можно использовать, например, для индикации светодиодом.
прикольно...
Greg вне форума   Ответить с цитированием
Старый 19.03.2007, 11:58   #13
IgorV
Senior Member
 
Аватар для IgorV
 
Регистрация: 25.02.2007
Адрес: всем пока
Возраст: 48
Сообщений: 4,100
Вес репутации: 1883/102
IgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant future
Отправить сообщение для IgorV с помощью Skype™
По умолчанию

Ага. Один раз и кочуют. Эт точна! А что так страшно?
IgorV вне форума   Ответить с цитированием
Старый 19.03.2007, 12:08   #14
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,789
Вес репутации: 5397/163
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию да "юнга" всё повторяет, что он, дескать, начинающий :)

основательно всё так, красиво...
а "завязать" хотел
Greg вне форума   Ответить с цитированием
Старый 19.03.2007, 17:09   #15
IgorV
Senior Member
 
Аватар для IgorV
 
Регистрация: 25.02.2007
Адрес: всем пока
Возраст: 48
Сообщений: 4,100
Вес репутации: 1883/102
IgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant future
Отправить сообщение для IgorV с помощью Skype™
По умолчанию off

Цитата:
Сообщение от Greg Посмотреть сообщение
основательно всё так, красиво...
а "завязать" хотел
Так посмотришь на людей, знаний вроде меньше намного, а бабло с этого имеют, а тут блин причешешь как можешь, а всё одно- любительство.
Вывод: не туда усилия направляю.
Приложить усилия некуда. Вот почему говорил что завязал. Да так и есть, вернее нет заказов. Пописываю для своей работы, за так, чтобы не отвыкнуть уж совсем. Без практики всё быстро забывается.
IgorV вне форума   Ответить с цитированием
Старый 19.03.2007, 20:28   #16
michipic
Senior Member
 
Аватар для michipic
 
Регистрация: 26.02.2007
Адрес: Москва
Сообщений: 182
Вес репутации: 151/45
michipic has a spectacular aura aboutmichipic has a spectacular aura about
По умолчанию Re: Делаете ли вы в МК закладки для отладки?

Цитата:
Сообщение от pic_unga Посмотреть сообщение
Я как прочитал о "закладках" на pid.by.ru/z4.htm так и использую их. Вначале пишу код вывода отладочной инфы и отлаживаю его в реале, а затем начинаю добавлять собственно алгоритм.
Т.е. я отлаживаю не всю программу, а по кускам по мере ее увеличения.
Действительно необычный "обратный" процесс проектирования
Такой подход приемлим для отладочного варианта проекта. В реальной прошивке такой объём отладочной инфы не нужен.
По сабжу имел в виду уже в готовом проекте небольшие закладки для авторского надзора... Почти никаких внещних эелементов, кроме пары контактных площадок, или ДИП-переключателя. Вся индикация и управление заведены на штатные элементы.
Просто, красиво, и впечатляет потребителя.
__________________
ну и что?
michipic вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Имитатор DS18B20 Filya44 Вопросы начинающих 14 12.03.2012 17:39
MPLAB не находит c018i.o qwerty1 Продукция MICROCHIP 45 22.04.2011 12:14
PIC24F Starter Kit - можно ли прошивать МК не из комплекта? zladm Продукция MICROCHIP 4 02.12.2010 19:33
Тестовая прошивка для мк Tenchi Вопросы начинающих 10 11.03.2009 21:49
PCI шина для МК SobakaWWW Общетехнические вопросы 8 26.02.2008 10:37


Часовой пояс GMT +3, время: 01:45.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot