Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 27.11.2006, 19:46  
moyaproba
Временная регистрация
 
Регистрация: 14.09.2006
Сообщений: 58
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 1 сообщении
moyaproba на пути к лучшему
По умолчанию Передача по PSP (Parallel Slave Port) для PIC

Проблема в том, что
если в функции SendChars паузу сделать 50 мкс, то почему-то данные переданные ведомому контроллеру
не будут успевать выводиться им по RS???
Прога для контроллера №1
Код:
#include ‹18F452.h›


#device adc=10
#device high_ints=true

void SetSpeed (char MD, int32 V);
void SendChars (char *Buf, unsigned int n);
int8 ReadDataPsp (void);
//**************************************************  ***********
#fuses HS,NOWDT,NOPROTECT,NOLVP
#opt 9
#use delay(clock=10000000)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7,bits=8,ERRO  RS)
//**************************************************  ***********

// Байты
#byte TRISE = 0xF96
#byte PORTD=0xF83
#byte PORTE=0xF84
#byte PIE1=0xF9D
// Биты
#bit RE0 = PORTE.0
#bit RE1 = PORTE.1
#bit TXIE=PIE1.4
//**************************************************  ***********
union LongByte  
{
	char b[4];
	int32 l;
};

int next_in = 0;
int next_out = 0;
short data_lost = TRUE;



void main ()

{
	set_tris_e(0b11111100);
	set_tris_d(0b00000000);
	PORTE = 0;

 while(1)
   {
	SetSpeed (0xF0, 0xF1F2F3F4);
	ReadDataPsp();
   }
	 
}

// Работа с PSP портом
void SetSpeed (char MD, int32 V)
{
	char Buf[6]; 			// Буфер для хранения команды
	union LongByte TmpV;
	TmpV.l = V;
	Buf[0] = MD;
	Buf[1] = 0x01;
	Buf[2] = TmpV.b[0];
	Buf[3] = TmpV.b[1];
	Buf[4] = TmpV.b[2];
	Buf[5] = TmpV.b[3]; 

	SendChars(Buf, 6);	
}
//**************************************************  ****
void SendChars (char *Buf, unsigned int n)

 {
 	unsigned int i;
	for (i = 0 ; i ‹ n; i++)
	 {
		RE1=1;RE0=1;
		delay_ms(50);		// Пауза на 50 мс
		PORTD = Buf[i];	
		RE1 = 0;RE0 = 1; 	
	 }
 }

int8 ReadDataPsp (void)
{
	int8 dataPsp;

	set_tris_d(0b11111111);	// Установка порта D на вход
		
	RE0=0;RE1=1;			// Установка CS=0; RD=0; WR=1 - запрос на чтение данных
	delay_us(50);			// Задержка 50 мкс
	dataPsp = PORTD;		// Считывание данных с порта D в переменную dataPsp
	RE0=1;RE1=1;			// Установка CS=0; RD=1; WR=1
	set_tris_d(0b00000000);	// Установка порта D на выход
//**************************************************  **************
// Вывод на RS
	putc(dataPsp);
	while(TXIE);			// Ожидаем освобождения передатчика
//**************************************************  **************
	return dataPsp;
}
Прога для контроллера №2

Код:
#include ‹18F452.h›


#device adc=10
#device high_ints=true

//**************************************************  ***********
#fuses HS,NOWDT,NOPROTECT,NOLVP
#opt 9
#use delay(clock=10000000)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7,bits=8,ERRO  RS)
//**************************************************  ***********
#define BUFFER_SIZE  96
// Байты
#byte TRISE = 0xF96
#byte PORTD=0xF83
#byte PORTE=0xF84
#byte PIE1=0xF9D
// Биты
#bit RE0 = PORTE.0
#bit RE1 = PORTE.1
#bit TXIE=PIE1.4
//**************************************************  ***********

int next_in = 0;
int next_out = 0;
short data_lost = FALSE;

#int_psp
void psp_isr()
{
  if(psp_overflow()) data_lost=TRUE;
 if (TRISE & 0x80)	// Если запись в PSP порт произошла
  {
		write_bank(2, next_in++, psp_data);	// пишем во второй банк
		if(next_in == BUFFER_SIZE)
        next_in = 0;
  }
else				// Если чтение из PSP порта произошло
 {
	static int8 i=0;
	output_D(i++);
 }
}

void main ()

{
	psp_data = 0;
	setup_psp(PSP_ENABLED);
	enable_interrupts(GLOBAL);
	enable_interrupts(INT_PSP);
 while(1)
  {
     if(next_in!=next_out)
      {
//**************************************************  *************************	
         putc(read_bank(2,next_out));
		 while(TXIE);					// Ожидаем освобождения передатчика
//**************************************************  *************************
         if(++next_out==BUFFER_SIZE)
            next_out=0;
         if(data_lost) 
		  {
            printf("
Data lost
");
            data_lost = FALSE;
          }
         
      }
   }
	 
}

-- Прилагается рисунок: --


Прикрепленный файл: 3677513.rar
Реклама:
moyaproba вне форума  
Непрочитано 28.11.2006, 01:22  
mike18
Прописка
 
Регистрация: 03.08.2006
Сообщений: 267
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 2 сообщении(ях)
mike18 на пути к лучшему
По умолчанию

Извиняюсь, я, собственно, не по коду, а по схеме. Может быть правильней вывод 25 U1(RE0/_RD/AN5) соединить с выводом 26 U4(RE1/_WR/AN6) и, соответственно, выв. 26 U1 с выв. 25 U4?

С уважением, Mike18.
mike18 вне форума  
Непрочитано 28.11.2006, 07:18  
moyaproba
Временная регистрация
 
Регистрация: 14.09.2006
Сообщений: 58
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 1 сообщении
moyaproba на пути к лучшему
По умолчанию

Сообщение от mike18
Извиняюсь, я, собственно, не по коду, а по схеме. Может быть правильней вывод 25 U1(RE0/_RD/AN5) соединить с выводом 26 U4(RE1/_WR/AN6) и, соответственно, выв. 26 U1 с выв. 25 U4?

С уважением, Mike18.
Ну может быть вы и правы. Но все-таки и программно можно так реализовать...
moyaproba вне форума  
Непрочитано 29.11.2006, 03:57  
mike18
Прописка
 
Регистрация: 03.08.2006
Сообщений: 267
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 2 сообщении(ях)
mike18 на пути к лучшему
По умолчанию

Сообщение от moyaproba
Ну может быть вы и правы. Но все-таки и программно можно так реализовать...
Наверно, всё таки не прав. Совершенно искренне заблуждался насчёт PSP. Нет у него аппаратного режима "мастер" (А если бы и был...?). Он, собственно, и называется параллельный ведомый. Поленился сразу референц мануал посмотреть.

С уважением, Mike18.
mike18 вне форума  
Непрочитано 29.11.2006, 20:23  
moyaproba
Временная регистрация
 
Регистрация: 14.09.2006
Сообщений: 58
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 1 сообщении
moyaproba на пути к лучшему
По умолчанию

Сообщение от mike18
Сообщение от moyaproba
Ну может быть вы и правы. Но все-таки и программно можно так реализовать...
Наверно, всё таки не прав. Совершенно искренне заблуждался насчёт PSP. Нет у него аппаратного режима "мастер" (А если бы и был...?). Он, собственно, и называется параллельный ведомый. Поленился сразу референц мануал посмотреть.

С уважением, Mike18.
Да да вы не правы были и без всяких наверно. Мастером он будет без всяких аппаратных средств, как обычный порт, т.к. иначе он будет реагировать на свои прерывания...
Меня вот сейчас интересует тот вопрос, с какой вообще с частотой может обмениваться по нему?
И насчет того что в протеусе, при увеличении скорости обмена, второй контроллер не успевает выводит по RS...
moyaproba вне форума  
Непрочитано 29.11.2006, 21:32  
mike18
Прописка
 
Регистрация: 03.08.2006
Сообщений: 267
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 2 сообщении(ях)
mike18 на пути к лучшему
По умолчанию

Сообщение от moyaproba
Да да вы не правы были и без всяких наверно. Мастером он будет без всяких аппаратных средств, как обычный порт, т.к. иначе он будет реагировать на свои прерывания...
Вот здесь я готов поспорить. В режиме аппаратного мастера параллельный порт мог бы без Вашего участия, то есть самостоятельно формировать синхросигналы записи и чтения ведомому контроллеру, а не получать их, что в том числе отразилось бы и на скорости обмена. Но, что говорить о том, чего у него нет. Бедный, бедный Слейв .
mike18 вне форума  
Непрочитано 29.11.2006, 21:54  
moyaproba
Временная регистрация
 
Регистрация: 14.09.2006
Сообщений: 58
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 1 сообщении
moyaproba на пути к лучшему
По умолчанию

Сообщение от mike18
Сообщение от moyaproba
Да да вы не правы были и без всяких наверно. Мастером он будет без всяких аппаратных средств, как обычный порт, т.к. иначе он будет реагировать на свои прерывания...
Вот здесь я готов поспорить. В режиме аппаратного мастера параллельный порт мог бы без Вашего участия, то есть самостоятельно формировать синхросигналы записи и чтения ведомому контроллеру, а не получать их, что в том числе отразилось бы и на скорости обмена. Но, что говорить о том, чего у него нет. Бедный, бедный Слейв .
На то он и Parallel Slave Port . Жалко что аналогичного мастера в нем нету, не помешал бы, с этим соглашусь...
Назывался бы тогда PMP
moyaproba вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Proteus, compim, com-port sliam Proteus 13 12.07.2012 17:07
virtual serial port kit dimonbest Микроконтроллеры, АЦП, память и т.д 7 01.04.2008 18:41
PSP PIC18F452 AlexBel Микроконтроллеры, АЦП, память и т.д 1 06.05.2007 12:03
Com port монитор dosikus Микроконтроллеры, АЦП, память и т.д 45 26.09.2006 09:41
виртуальный com port для proteus Balaganov Proteus 1 17.08.2006 00:29


Часовой пояс GMT +4, время: 04:42.


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