attiny2313 seri haberleşme

Başlatan cseb, 18 Haziran 2012, 20:27:52

cseb

Arkadaşlar attiny2313 ile atmega32 ye data göndermeye çalışıyorum. attiny2313 atmega32 ye data yı gönderiyor ama atmega32 ye bağlı LCD de gönderilen dataları doğru olarak göremiyorum. Kod aşağıda, problem ne olabilir?

#include <avr/io.h>  

  #include <avr/interrupt.h>  

  #include <util/delay.h>  
#define F_CPU 4000000
  //#define BAUDRATE 9600
//#define BAUD_CALC ((F_CPU/(BAUDRATE*16))-1) 
#define BAUD_CALC 25
 int main (void)  

 {  

   unsigned char data=0;  

                UBRRH = (unsigned char)(BAUD_CALC>>8);//Set baud rate
                UBRRL = (unsigned char)BAUD_CALC;//Set baud rate
                UCSRB = _BV(TXEN) | _BV(RXEN) | _BV(RXCIE);
                UCSRC = (0<<USBS)|(1<<UCSZ0)|(1<<UCSZ1)|(0<<UCSZ2)|(0<<UMSEL);//Set frame format

   for (;;){
	  USARTWriteChar(0x01);
	  _delay_ms(1000);
	    USARTWriteChar(0x02);
	  _delay_ms(1000);
	   USARTWriteChar(0x03);
	  _delay_ms(1000);
   }  

   

 }  
 
 void USARTWriteChar(char data)
{
   //Wait until the transmitter is ready
   while(!(UCSRA & (1<<UDRE)))
   {
      //Do nothing
   }
   //Now write the data to USART buffer
   UDR=data;
}

Kabil ATICI

Deneme imkanın varsa herbir bölümü ayrı ayrı  bilgisayar üzerinden dene.
önce attiny2313 ile  bilgisayara veri gönder ve o veriyi doğru biçimde  bilgisayardan al.
sonra bilgisayardan veri gönder ve bu veriyi atmega32 üzerinden al ve bir ledi yakıp söndürmeye çalış. Ondan sonra lcd üzerinde göstermeye geç.

C konusunda çalışmadım ama lcd üzerinde veri göstermeye çalışırken dikkatli olmak gerekiyor. Gelen iki veri arasındaki süre işlem yapmak için yeterli olmayabiliyor. O yüzden lcd için gelen verileri önce işlemcinin ram bölümünde tutup sonra son veri geldikten sonra yazmak gecikme sorunlarına engel olabilir. Son veri olarak yazı karakteri olmayan ve kullanılmayan bir sayı olabilir.
ambar7

arm-beginner

ambar7'nin dediklerine 1:1 katılıyorum. En doğru yöntem o.
Onun dışında RXCIE ile "Receive Complete Interrupt Enable" devreye almışın, ama kodunda interrupt ile ilgili birşey göremiyorum. Ayrıca sadece gönderme yapıyorsun, ona hiç gerek yok.
UCSRC: atama yaptığın değerler zaten default değerler, hiç gerek yok.