Доброго времени суток. Значит так, собрал платку на 48 Атмеге, работает, необходимо отправлять данные на ПК... Как топорный вариант выбрал COM-порт. Для этого была взята схемка MAX232, ну вобщем всё по книжке... Однако, не получается даже сделать простешего зеркала=/. При этом ситуация следующая:
- Атмега работает от внешнего кварца в 20 МГц;
- скорость - не важно, пробовал на многих, ни на одной не работает...
- МАХ рабочий, тупо закорачивал ноги - сигнал возвращался тут же...
- если оциллографом смотреть на ногах самой Атмеги, то приходит всегда то, что нужно, а в ответ уходит какая-то ересь... (в моём случае это 0x80)
Ну вот собственно код:
Код
#include <avr/io.h>
#include <avr/interrupt.h>
#define FOSC 20000000 // Clock Speed
#define BAUD 2400
#define MYUBRR FOSC/16/BAUD-1
void USART_Init (unsigned int);
volatile unsigned char buff;
ISR (USART_RX_vect, ISR_BLOCK)
{
buff=UDR0;
while ( !( UCSR0A & (1<<UDRE0)) );
UDR0 = buff;
}
ISR (USART_TX_vect, ISR_BLOCK)
{
buff=0;
}
void main( void )
{
sei();
USART_Init(MYUBRR);
for(;;);
}
void USART_Init(unsigned int ubrr)
{
UBRR0H = (unsigned char)(ubrr>>8);
UBRR0L = (unsigned char)ubrr;
UCSR0B |= (1<<RXCIE0);
UCSR0B |= (1<<TXCIE0);
UCSR0B |= (1<<RXEN0)|(1<<TXEN0);
UCSR0C = (1<<USBS0)|(3<<UCSZ00);
}
Может быть кварц слишком быстрый? Но по даташиту ограничения нету на его частоту никаких...
Спасибо.
Сообщение отредактировал NikitoS-86 - Dec 9 2008, 16:29