Sari la conținut
ELFORUM - Forumul electronistilor

interfete si comunicatii


laStudiu

Postări Recomandate

Deci nu-si da nimeni parerea ce sa fac? ... sa schimb PICul sau sa incerc sa-i pun cuart si asa sa incerc USARTul?. :smt001 ... A folosit careva USART-ul pe oscilatorul intern ?

Link spre comentariu
  • Răspunsuri 98
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • laStudiu

    52

  • Abram Burel

    10

  • lucicop

    7

  • Cristiano

    5

Top autori în acest subiect

Eu propun sa faci in felul urmator :1.Programezi PIC16F871 si faci scurt in soclu la PIC16F627 la Rx/Tx si ar trebui sa primesti acelasi date2.Acelasi lucru cu PIC16F627USART merge pe orice oscilator (intern,extern)871 si 627 trebuie programate cu aceeasi baud rate(ex.9600)

Link spre comentariu

1.Programezi PIC16F871 si faci scurt in soclu la PIC16F627 la Rx/Tx si ar trebui sa primesti acelasi date

1. Am programat F871 si ~ 3s dupa pornire trimit 9 caractere. Am facut scurt in soclu la F627 (care l-am tinut oprit) si am primit aceleasi date.2. Am programat F627 si la ~ 3s trimit 9 caractere. Am facut scurt in soclu la F871 (care l-am tinut oprit) si am primit alte date si framing error -- am verificat daca trimit 9 x 0xaf primesc 9 x 0xab si framing error ; daca trimit 9 x 0x33 primesc 9 x 0x00 si framing error. :smt001 ... Am obosit deja de cand tot verific. 3. .... Si ca sa fie si mai nasol se mai intampla urmatoarea anomalie: la pornire initializez USARTul:
void InitUSART(void){	di();	SPBRG = 25;  //129;	//9600 bps  (20MHz)//	TXSTA = 0x24;	TX9 = 0;	TXEN = 1;	SYNC = 0;	BRGH = 1;		//1//	RCSTA = 0x90;	SPEN = 1;	RX9 = 0;	CREN = 1;	ADEN = 0;		TXIE = 0;	RCIE = 1;		// receive interrupt	ei();}
apoi am o variabila globala "totalcount" care ~ la fiecare s se incrementeaza si am in main codul pt F627:
// PIC16F627#include <htc.h>#include "init.h"#include "afisFunction.h"unsigned char timeid = 1;unsigned char totalcount = 0;unsigned char transmit = 0;unsigned char received = 0;unsigned char value = 0;unsigned char error = 0;voidmain(void){	unsigned char receptionat[16] = "";	unsigned char id = 0, write = 0, i;	init();       // configureaza PICul	        InitPortAB();     // InitPortACED(); pentru F871 	InitTimer0();	InitUSART();	while(1)		{ 	AfisTemperatura();   // pe 3cifre (afisaj cu 8 segmente)                                               // Afisez continutul EEPROM la adr 0, 1, 2		if((totalcount == 3) & (transmit == 0))			TXIE = 1;			if(received == 1)		{	received = 0;			receptionat[id] = value;			++id;		}				if((totalcount == 5) & (write == 0))		{	write = 1;			T0IE = 0;			for( i = 0; i < id; i++)				EEPROM_WRITE(16 + i, receptionat[i]);			if(error)				EEPROM_WRITE(40, 40);			else				EEPROM_WRITE(40, 0);			EEPROM_WRITE(41, id);			T0IE = 1;		}			}}
am acelasi cod pentru ambele PICuri. ( difera InitPort() si putin main-ul )... apoi rutina de intrerupere:
// Interrupt service routines PIC16F627#include <htc.h>extern unsigned char timeid;extern unsigned char totalcount;extern unsigned char transmit;extern unsigned char received;extern unsigned char value;extern unsigned char error;void interrupt my_isr(void){	static unsigned char count = 0;	unsigned char framingError = 0;	unsigned char overrunError = 0;			di();	if(RCIE & RCIF)	{	framingError = FERR;		overrunError = OERR;				value = RCREG;		if((framingError == 0) & (overrunError == 0))		{			received = 1;			}		else			if(framingError)				error = 1;	}		if(TXIE & TXIF)	{			if(transmit < 9)		//corect 4		{	if(transmit == 0)				TXREG = 0x33;			else			{	//				value = EEPROM_READ(transmit - 1);				TXREG = 0x33;			}		}		else			TXIE = 0;		++transmit;	}		if(T0IE & T0IF)	{		++count;		if(count > 35)		{	count = 0;			++totalcount; // variabia din 			 			if(timeid == 1)				timeid = 2; 			else timeid = 1;		}		TMR0 = 0;		T0IF = 0;	}				ei();}
si acum anomalia care i-mi apare: daca pornesc ambele PICuri in loc sa primeasca fiecare 9 caractere primesc 18 caractere, adica F871 primeste de la 627 9 caractere(gresite) si apoi 9 caractere care le trimite el (le primeste inapoi).Nu stiu ce sa ma mai fac. :smt001
Link spre comentariu

Da' minunea

iar 627 cu oscilator intern 20 MHz.

ai rezolvat-o?Ca s-ar putea sa nu mearga nimic cum trebuie, nu doar comunicatia seriala.
Link spre comentariu

Da' minunea

iar 627 cu oscilator intern 20 MHz.

ai rezolvat-o?Ca s-ar putea sa nu mearga nimic cum trebuie, nu doar comunicatia seriala.
Acum am luat un cuart de 4MHz sa vad daca cu el va merge USARTul ca restul merge bine (TIMER0 si porturile - astea le-am folosit) :smt001 .
Link spre comentariu

1. Cea mai mare greseala : am legat cele doua PICuri cu 2 fire (Rx, Tx) fara referinta, abia dupa ce am conectat cuartul si am vazut ca nu merge bine USARTul am legat si al treilea fir masa la masa si functioneaza USARTul la 627 doar la transmisie, adica receptionez cu 871 datele bune, insa la receptie nu merge 627.2. Ca urmare a obsevatiei facute m-am apucat din nou pe teste cu 3 fire pe oscilatorul intern si am transmis (71h, 72h, 73h, 74h, ... ,79h) cu 627 si am observat ca daca SPBRG = 129 (9600 bps la 20MHz) primesc ceva date aiurea, insa daca setez SPBRG = 25 (9600 bps la 4Mhz) primesc la 871 datele: 71h, 72h, 57h, ... deci primele doua caractere le primesc corect => cred ca oscilatorul intern este de 4MHz care nu merge prea bine.3. Cu XT=4MHz conectat la 627 merge bine transmisia, insa receptia nu merge. Deci pot sa schimb PICul 627.

Link spre comentariu

=> cred ca oscilatorul intern este de 4MHz care nu merge prea bine.

Daca ai fi citit atent raspunsurile care ti s-au dat pana acum, ai fi descoperit chestia de mai sus ceva mai devreme si ai fi scutit ceva timp. Ca sa nu mai zic ca in foaia de catalog a lu' 627 scrie:
14.2.6 INTERNAL 4 MHZ OSCILLATORThe internal RC oscillator provides a fixed 4 MHz(nominal) system clock at VDD = 5V and 25°C, see?Electrical Specifications? section for information onvariation over voltage and temperature.
Link spre comentariu

adica receptionez cu 871 datele bune, insa la receptie nu merge 627.

Rx la 627 e sigur facut intrare?
Era iesire, acum l-am facut intrare si merge BINE.... :smt001
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări