Sari la conținut
ELFORUM - Forumul electronistilor

Programator masina spalat cu Atmega32


amudsen

Postări Recomandate

Sa recapitulez.... sunt la prima bere (aveti un pic de intelegere)..

1. Scris, rescris softul pe uC, tot cerea fisierul eep......., fusebitii nu erau setati, refacut de @nico_2010 programelul, testat din nou.

2. Refacut toate lipiturile, schimbat LM317 (fluctua voltajul), trantit pcb-ul pe jos, studiat cu lupa eventuale "fire" de cupru intre trasee, etc.

3. Curatat din nou pcb-ul si scris cu softul bun, care a mers in final.

Urmeaza sa cumpar senzorul IR (nu stiu daca au prin magazine), sa fac pcb-ul pentru afisajul "retro", si pentru partea de forta (si aici trebuie sa caut un teleruptor). O sa dureze cam o luna de zile pana o sa incep testele pe o masina de spalat, dar oricum, o sa fie interesant masina de spalat cu telecomanda. Ce te faci daca ai televizorul pe masina de spalat?

Link spre comentariu

@amudsen: Suflete, care parte nu ai inteles-o din " O sa ai o problema cu receptionarea semnalului de telecomanda (din balamucul creata de autor lipseste functia "RecvRC5()"). "

Adica telecomanda nu va functiona pentru ca uC nu o va recun oaste. Nu stiu de unde a luat autorul functia de receptie IR si nici nu prea am mult timp la dispozitie sa o caut!

Asa ca lasa senzorul si pe moment multumeste-te cu restul!

Link spre comentariu

Aici  este definita functia RecvRC5

int RecvRC5 (void) 
/* recepteur RC5 bas niveau qui scrute le port relié au capteur et décode le signal
	
	2 bits de start
	1 bit de basculement
	5 bits d'adressage (type d'appareil, TV, VCR etc...)
	6 bits de commande (touches)
*/
{
	uint32_t t;
	uint8_t niv_entree, niv1, niv2; /* booleens - niveaux des deux demi plateaux constituant un bit */
	uint8_t n; 
	uint16_t data;
	
	t=0;
	niv1=0;
	niv2=0;
	data = 0;
	
	niv_entree=1;
	/* attente pendant la durée d'une trame d'un front descendant (le signal issu du capteur est à 1 au repos)	*/
	
	const unsigned long int tmax = 14*1778; //24892us  = durée de 1 trame (environ 25ms donc)
	
	while ( (niv_entree == 1) && (t<= tmax) ) 
	{
		if ( (PINC & 0b10000000) > 0) { niv_entree=1; } else  { niv_entree=0; }
		_delay_us(1);
		t++;
	}
/* si le signal parvient trop vite (< 2 bits) on en déduit qu'on a pris le train en marche et on saute, 
	puisque lecture impossible de la trame en cours	
*/	
	if (t < (889 * 2)) return t;
	
	if (t > tmax) return 2;	/* temps maxi écoulé, pas de signal reçu */
	
	/* ici on se trouve juste un epsilon après le basculement à 0 du premier bit de start (milieu de bit)	*/
		
	_delay_us(444); /* durée de 1/4 bit */
	
	for (n=1; n<=13; n++)
	{
		_delay_us(889); // durée de 1/2 bit
		/*  ici on se trouve au milieu du niveau du plateau du demi bit */
		if ( (PINC & 0b10000000) == 0) { niv1 = 0; } else { niv1 = 1; }
		_delay_us(889); // durée de 1/2 bit
		/* ici on se trouve au milieu du second plateau du demi bit */	
		if ( (PINC & 0b10000000) == 0) { niv2 = 0; } else { niv2 = 1; }
/* ici on connait les valeurs des deux niveaux, on en déduit le sens de la transition (front montant ou descendant)*/
		if (niv1 == niv2) { return 3; } // erreur de lecture, bit non valide
		if ((niv1 == 1 ) && (niv2 == 0)) { data |= 0b00000001; }
		data = data << 1;
	}
	data = data >> 1; // on rejette le dernier décallage (sans perte de bit puisque largeur data = 16 bits > )
	
	rxCmd_IR 		=  data & 0b0000000000111111;
	rxAdr_IR 		= (data & 0b0000011111000000) >> 6;
	bit_bascul_IR 	= (data & 0b0000100000000000) >> 11;
	return 0;
}

 

Link spre comentariu

Ok, ar fi super daca ar memora in eeprom momentul spalarii (in cazul luarii curentului, ca se mai intampla) pentru ca apoi sa reia de la momentul respectiv spalarea.

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