To mój pierwszy post także witam wszystkich.
Od niedawna zacząłem się trochę interesować mikrokontrolerami oraz elektroniką. Ostatnio zmontowałem mały układzik RS-232 <-> MAX232 <-> ATtiny2313 + dioda podłączona do portu D (pin 5).
Połączyłem się z układem poprzez HiperTerminal a następnie próbowałem przesłać pojedyncze znaki. Po naciśnięciu klawisza dioda miała za zadanie zgasnąć, po kolejnym zaświecić i tak na przemian. Jednak nie wiem czemu program nie działa poprawnie. Efekt jego działania jest następujący: po naciśnięciu klawisza dioda gaśnie i od razu się zapala (może to być spowodowane wysyłaniem 2bajtów na raz?).
Poniżej przedstawiam kod programu - transmisja 2400, w UBRR wartość 25 (dla 1MHz)
Byłbym wdzięczny za jakąkolwiek pomoc w znalezieniu błędu.
Od niedawna zacząłem się trochę interesować mikrokontrolerami oraz elektroniką. Ostatnio zmontowałem mały układzik RS-232 <-> MAX232 <-> ATtiny2313 + dioda podłączona do portu D (pin 5).
Połączyłem się z układem poprzez HiperTerminal a następnie próbowałem przesłać pojedyncze znaki. Po naciśnięciu klawisza dioda miała za zadanie zgasnąć, po kolejnym zaświecić i tak na przemian. Jednak nie wiem czemu program nie działa poprawnie. Efekt jego działania jest następujący: po naciśnięciu klawisza dioda gaśnie i od razu się zapala (może to być spowodowane wysyłaniem 2bajtów na raz?).
Poniżej przedstawiam kod programu - transmisja 2400, w UBRR wartość 25 (dla 1MHz)
#include <avr/io.h>
#include <avr/interrupt.h>
#define FCPU 1000000
#define VTRANS 2400
ISR(USART_RX_vect)
{
char znak;
znak = UDR;
if (PORTD == 0x7F)
PORTD = 0x00;
else
PORTD = 0x7F;
}
int main(void)
{
DDRB = 0xFF; // Cały portB wyjściem
DDRD = 0x7E; // Port D wyjściem poza RXD (bit 0)
PORTB = 0x0;
PORTD = 0x7F; // Dioda swieci (bit 5)
UCSRB = 1 << RXCIE | 1 << RXEN;
UBRRL = 25; // przy 1MHz transmisja 2400bps
sei();
while (1)
{
}
return 0;
}Byłbym wdzięczny za jakąkolwiek pomoc w znalezieniu błędu.
