Steg för steg utveckla controller för relä med din bärbara dator (2 / 5 steg)
Steg 2: Utveckla koden för ATMEGA128
Detta är funktionen för att kommunicera med Laptop:
void usart_init (unsigned int ubrr)
{
/ * Ange baudvärde * /
UBRR0H = (unsigned char) (ubrr >> 8);
UBRR0L = (unsigned char) ubrr;
/ * Aktiverar mottagare och sändare * /
UCSR0B = (1 << RXEN) | (1 << TXEN);
/ * Set ram format: 8data, 2stop bit * /
UCSR0C = (1 << USBS) | (3 << UCSZ0);
}
void usart_transmit (unsigned char data)
{
/ * Vänta Tom sändnings buffert * /
medan (! () UCSR0A & (1 << UDRE)))
;
/ * Lägga data i bufferten, skickar data * /
UDR0 = data;
}
void usart_pstr (unsigned char * s) {
loopa igenom hela strängen
medan (* s) {
usart_transmit(*s);
s + +;
}
}
unsigned char usart_receive (void)
{
/ * Vänta på data ska tas emot * /
medan (! () UCSR0A & (1 << RXC)))
;
/ * Få och returnera mottagna data från buffert * /
återvända UDR0;
}
.
.
.
.
på main)
Lägg till:
göra
{
c_byte = usart_receive();
usart_transmit(c_byte);
}
medan (c_byte == "");
_delay_ms (10).
lcd_cmd (0x01); //Clear display
lcd_data(c_byte);
lcd_cmd (0xC0); //goto andra raden
lcd_string("selected");
_delay_ms(1000);
Switch(c_byte) {
fallet "a":
_delay_ms (10).
lcd_cmd (0x80); //put markören till den första raden
_delay_ms (10).
lcd_cmd (0x01); //Clear display
_delay_ms (10).
lcd_cmd (0xC0); //goto andra raden
_delay_ms (10).
lcd_cmd(0x01); Tydlig display
lcd_cmd (0x80); //put markören till den första raden
_delay_ms (10).
lcd_cmd (0x01); //Clear display
_delay_ms (10).
lcd_string ("relä A");
lcd_cmd (0xC0); //goto andra raden
lcd_string("activated..");
_delay_ms(1000);
nästa skärm
Aktivera relay1
relay1 = 1;
relay2 = 0;
bryta; / * tillval * /
fallet "b":
_delay_ms (10).
lcd_cmd (0x80); //put markören till den första raden
_delay_ms (10).
lcd_cmd (0x01); //Clear display
_delay_ms (10).
lcd_cmd (0xC0); //goto andra raden
_delay_ms (10).
lcd_cmd(0x01); Tydlig display
lcd_cmd (0x80); //put markören till den första raden
_delay_ms (10).
lcd_cmd (0x01); //Clear display
_delay_ms (10).
lcd_string ("relä B");
lcd_cmd (0xC0); //goto andra raden
lcd_string("activated");
_delay_ms(1000);
nästa skärm
Aktivera relay2
relay1 = 0;
relay2 = 1;
bryta;
fallet "c":
usart_pstr ("HALLO från ATMEGA128\n");
printf ("HALLO Tanja");
_delay_ms(50000);
_delay_ms (10).
lcd_cmd (0x80); //put markören till den första raden
_delay_ms (10).
lcd_cmd (0x01); //Clear display
_delay_ms (10).
lcd_cmd (0xC0); //goto andra raden
_delay_ms (10).
lcd_cmd(0x01); Tydlig display
lcd_cmd (0x80); //put markören till den första raden
_delay_ms (10).
lcd_cmd (0x01); //Clear display
_delay_ms (10).
lcd_string("Message");
lcd_cmd (0xC0); //goto andra raden
lcd_string("Flasher");
_delay_ms(1000);
nästa skärm
lcd_cmd (0x80); //put markören till den första raden
_delay_ms (10).
lcd_cmd (0x01); //Clear display
_delay_ms (10).
lcd_string ("med ATMEGA128");
lcd_cmd (0xC0); //goto andra raden
lcd_string ("av arick");
_delay_ms(1000);
nästa skärm
lcd_cmd (0x80); //put markören till den första raden
_delay_ms (10).
lcd_cmd (0x01); //Clear display
_delay_ms (10).
lcd_string ("publicerad på");
lcd_cmd (0xC0); //goto andra raden
lcd_string("Instructable.com");
_delay_ms(1000);
nästa skärm
lcd_cmd (0x80); //put markören till den första raden
_delay_ms (10).
lcd_cmd (0x01); //Clear display
_delay_ms (10).
lcd_string ("tillverkad i");
lcd_cmd (0xC0); //goto andra raden
lcd_string("AUSTRALIA");
_delay_ms(1000);
nästa skärm
lcd_cmd (0x80); //put markören till den första raden
_delay_ms (10).
lcd_cmd (0x01); //Clear display
_delay_ms (10).
lcd_string("DISABLE");
lcd_cmd (0xC0); //goto andra raden
lcd_string ("alla reläer");
_delay_ms(1000);
Inaktivera alla reläer
relay1 = 0;
relay2 = 0;
bryta;
} //end fall