Light dimmer

Rasprava o AVR mikrokontrolerima, AVR projekti i drugo vezano za AVR...

Moderators: pedja089, stojke369, trax, InTheStillOfTheNight

Post Reply
Stalkermd5
Posts: 6
Joined: 03-03-2012, 16:50

Light dimmer

Post by Stalkermd5 »

Pozdravljam,

na fakultetu sam uzeo za projekat da odradim light dimmer upotrebom Atmelovog mikrokontrolera 328p.

Cijeli projekat sam radio u Proteusu, međutim, simulacija cijelog projekta mi nije proradila, dok je simulacija detekcije prolaska proradila. (radio sam odvojeno)

Evo i koda:

Code: Select all

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

volatile int brightness=39;   //Podešavanje jačine svjetlosti na 50%, brightness = jačina svjetlosti 
int main(void)
{
	
	//Setup for User Button
	DDRD&=(1<<3);   // set PD3 to input   
	PORTD|=(1<<3);	// set PD3 to high
	
	
	
	
	
	
	//Setup External interrupt for Zero-crossing detection   
	DDRD&=(1<<2);   // set PD2 to input   
	
	EIMSK |= (1<<INT0);  //External interrupt enabled (PD2) 
	EICRA |= (1<<ISC01) | (1<<ISC00); //The rising edge of INT0 (PD2) generates an interrupt request.
	
	DDRC|=(1<<0);	// set PC0 to output (TRIAC)
	
	
	//Setup Timer
	 TCCR0A |= (1<<WGM01);				 // Config TIMER0 CTC mode
	 
	 TCCR0B |= (1<<CS02) | (1<<CS01);   //Prescaler 8MHz/1024 = 7812.5Hz  period=0.128 ms   1ms = 7.8125*period
	 TIMSK0 |= (1<<OCIE0A);             // Enable Output Compare Match A Interrupt
	 
	 
	sei();
	 
	 
    while(1)
    {
		

		if(!PINC&(1<<3))  //Provjera je li tipka pritisnuta
		{
			brightness+=7.8125;
			if (brightness>=78.125)
			brightness=0;
		}

		OCROA=brightness;
		
		
		
    }
	
	
}



ISR(TIMER0_COMPA_vect)
{
	PORTC|=(1<<0);  //FIRE TRIAC
	_delay_ms(1);
	PORTC&=(1<<0);
	
}


//Zero-crossing interrupt
ISR(INT0_vect)
{

	OCROA=0;    //Ako je mrežni signal prošao kroz nulu, podesi TOP VALUE na 0 
	
}




Shema detekcije prolaska kroz nulu:
http://img255.imageshack.us/img255/1489/zcde.jpg

Shema cijelog projekta:
http://img546.imageshack.us/img546/1862/shemaz.jpg


Što se tiče sheme, dobio sam potvrdu od profesora da je dobra, međutim, nisam siguran je li mi ispravan kod.

Unaprijed zahvaljujem na odgovorima.

PS
Novi sam u svijetu MCU, ovim projektom sam TEK naučio osnovne stvari.
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: Light dimmer

Post by Kukinjos »

A je si ga zakomplicira :ohno: . Zero crossing ti je ko da upravljaš s atomskom bombom, a ne sa običnom lampom, imaš viška djelova ko u priči, a i čini mi se da ti se impulsi javljaju samo na uzlazni brid pa ti gubi jednu poluperodu. To onako brzinski i odmah se ograđujem da ne mora biti točno. A tek okidanje trijaka s dva optocouplera s trijacima u seriju, zašto? Zar jedan nije dovoljan? Osim toga nabacio si paralelno trijacima u potocoupleru otpore, koji mogu okinut trijak i bez impulsa, a nisi stavio otpor između G i A1, koji odvodi baš te piz... na masu. Soft još nisam dobro pogledao, ali valjda bi trebao bit u redu. Osim toga izlazni tranzistor optocouplera (U2) na zero crossing-u si naopako polarizirao, na kolektor si mu doveo - a na emiter +, a tranz. je NPN, ne može radit! Pa poseban trafo za napajanje kontrolera, razbacao si se opasno :lol: :lol:
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
Post Reply