Ahojte,
Stale nemozem rozchodit SPI komunikaciu medzi 2 x Atmega16
Mam nasledujucu shcemu:
image-share.com/image.php?img=150/25.png
Zdrojovy kod 1. MCU (MASTER - vysiela)
#include <mega16.h>
#include <delay.h>
#include <spi.h>
void main(void)
{
PORTB=0x00;
DDRB=0xB0;
ACSR=0x80;
SFIOR=0x00;
SPCR=0x54;
SPSR=0x00;
delay_ms(100);
spi('A');
delay_us(50);
spi('h');
delay_us(50);
spi('o');
delay_us(50);
spi('j');
delay_us(50);
spi('k');
delay_us(50);
spi('y');
delay_us(50);
while (1);
}
Zdrojovy kod 2. MCU (SLAVE - prijma data)
#include <mega16.h>
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
interrupt [SPI_STC] void spi_isr(void)
{
unsigned char data;
data=SPDR;
lcd_putchar(data);
}
void main(void)
{
PORTB=0x00;
DDRB=0x40;
ACSR=0x80;
SFIOR=0x00;
SPCR=0xC4;
SPSR=0x00;
// Clear the SPI interrupt flag
#asm
in r30,spsr
in r30,spdr
#endasm
// LCD module initialization
lcd_init(16);
lcd_putsf("Prijem z SPI");
// Global enable interrupts
#asm("sei")
lcd_gotoxy(0,1);
while (1);
}
Preblem je v tom, ze prvy znak mi prijme ale potom uz to vyhadzuje error vid schemu. Neviete v com moze byt problem, alebo co som zle nastavil?
administrator: přejmenováno z “SPI CodevisionAVR ATmega16”
administrator: přiloženy externí soubory