Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Atmel => Konuyu başlatan: satilla - 10 Temmuz 2012, 16:27:40

Başlık: atmega16 usart sorunu?
Gönderen: satilla - 10 Temmuz 2012, 16:27:40
isis'te herhangi bir sorun yok ama devre üzernde herhangi bir çıkış alamıyorum

#include <avr/io.h>
#include <inttypes.h>
#include <stdio.h>
#include <util/delay.h>

#define gsm_power PORTB.2


char dizi[20]=" ";
unsigned char i;

//This function is used to initialize the USART
//at a given UBRR value
void USARTInit(uint16_t ubrr_value)
{

   //Set Baud rate

   UBRRL = ubrr_value;
   UBRRH = (ubrr_value>>8);

   /*Set Frame Format


   >> Asynchronous mode
   >> No Parity
   >> 1 StopBit

   >> char size 8

   */

   UCSRC=(1<<URSEL)|(3<<UCSZ0);


   //Enable The receiver and transmitter

   UCSRB=(1<<RXEN)|(1<<TXEN);


}


//This function is used to read the available data
//from USART. This function will wait untill data is
//available.
char USARTReadChar()
{
   //Wait untill a data is available

   while(!(UCSRA & (1<<RXC)))
   {
      //Do nothing
   }

   //Now USART has got data from host
   //and is available is buffer

   return UDR;
}


void transmit( unsigned char data )
{
//buffer bosalana kadar bekle
while ( !( UCSRA & (1<<UDRE)))
;
/* Copy 9th bit to TXB8 */
UCSRB &= ~(1<<TXB8);
if ( data & 0x0100 )
UCSRB |= (1<<TXB8);

UDR = data;
}


void send_string(char *str)
{
   while(*str!=0)
   {
   transmit(*str++);
   }                   

}


int main()
{

PORTA  =0x00;
PORTB  =0x00;
PORTC  =0x00;
PORTD  =0x00;

DDRB=0xFD;
PORTB=0x02;


USARTInit(51);    //UBRR = 51


while(1)
   {


/* 
//gsm modülü acma
for(i=0;i<20;i++)
_delay_ms(200);
PORTB|=_BV(2);
for(i=0;i<20;i++)
_delay_ms(200);
PORTB&=~_BV(2);
for(i=0;i<30;i++)
_delay_ms(200);
*/




_delay_ms(200);

za:


_delay_ms(300);



sprintf(dizi,"Test Mesaji");
send_string(dizi);
sprintf(dizi,"26");
send_string(dizi);





goto za;




  for(;;);

   }
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                 



dahili 8 mhz osc kullanıyorum
veriler hatası gitse bil razıyım ama skop ile bakıyorum usart pinlerinden hiç çıkış yok
Başlık: Ynt: atmega16 usart sorunu?
Gönderen: zakbay - 10 Temmuz 2012, 21:10:02
Sorunun fuse ayarlarından olup olmadığını anlamak için gönderme yaptığınız ana döngüde çıkış olarak ayarladığınız bir pinin durumunu değiştirip dışarıdan gözlemleyebilirsiniz.

ilgili pinde hiç hareket yoksa fuse ayarlarınızı kontrol edin. Pin normal toggle yapıyorsa usart ayarlarını gözden geçirmek gerekebilir.
Başlık: Ynt: atmega16 usart sorunu?
Gönderen: satilla - 10 Temmuz 2012, 21:55:17
hocam zaten pinde toogle yaptım herhangi bir sorun yok ama
usart'ın tx pininden çıkış alamıyorum

sizde denediğiniz bir kod var mı
sadece hex'de işimi görür
Başlık: Ynt: atmega16 usart sorunu?
Gönderen: bocek - 11 Temmuz 2012, 10:02:53
UCSRC=(1<<URSEL)|(3<<UCSZ0);

burada 3<<UCSZ0 işleminde hata var.
char size 8 bit yapmak için UCSZ'ye 3 (binary 011) yazman gerekli bu doğru ama bu şekilde yazamazsın.
doğrusu:

UCSRC=(1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);

bunu bir dene bakalım olmazsa örnek bir kod yollayayım.
Başlık: Ynt: atmega16 usart sorunu?
Gönderen: satilla - 12 Temmuz 2012, 13:50:14
hocam o şekilde bir sorun olacağını sanmıyorum çünkü c kitabındada aynı şekilde bilgi yazıryor ve nitekim aynı kodla çalıştıabildim devreyi

sorun data pinleirni farklı yerden kontrol etmemöiş  :-X

ancak pc tarafından gönderdigim verileri inceliyorum karma karışık birşeyler görünüyor, fakat isiste herşey normal
Başlık: Ynt: atmega16 usart sorunu?
Gönderen: zakbay - 13 Temmuz 2012, 09:40:27
aşağıdaki kodları geçen yıl kullandım çalışıyordu
faydası olur belki bir deneyin

#include <avr/io.h>
#include <avr/pgmspace.h>
#include "UART_routines.h"

//**************************************************
//Function initialize UART0
//desired baud rate: 19200
//actual: baud rate:19231 (0.2%)
//char size: 8 bit
//parity: Disabled
//**************************************************
void USART_init(void)
{
//seri haberleşme değerlerini burayı açarak girebilirsin
/* UBRRH = (unsigned char)(ubrr>>8); // Set baud rate
UBRRL = (unsigned char)ubrr;
UCSRB = (1<<RXEN)|(1<<TXEN);  // Enable receiver and transmitter
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); // Set frame format: 8data, 2stop bit
*/

/*UCSR0B = 0x00; //disable while setting baud rate
UCSR0A = 0x00;
UCSR0C = 0x06;
UBRR0L = 0x33; //set baud rate lo
UBRR0H = 0x00; //set baud rate hi
UCSR0B = 0x98;*/
}
//**************************************************
//Function to receive a single byte
//*************************************************
unsigned char receiveByte( void )
{
//unsigned char USART_Receive( void )

/* Wait for data to be received */
while ( !(UCSRA & (1<<RXC)) ); // Wait for incomming data
/* Get and return received data from buffer */
return UDR;
}

//***************************************************
//Function to transmit a single byte
//***************************************************
void transmitByte( unsigned char data )
{
while ( !( UCSRA & (1<<UDRE)) ); /* Wait for empty transmit buffer */
UDR = data; /* Put data into buffer, sends the data */
}

//***************************************************
//Function to transmit a string in Flash
//***************************************************
void transmitString_F(char* string)
{
  while (pgm_read_byte(&(*string)))
   transmitByte(pgm_read_byte(&(*string++)));
}

//***************************************************
//Function to transmit a string in RAM
//***************************************************
void transmitString(char* string)
{
    while (*string)
transmitByte(*string++);
}



// **************************************************************
// ***  UART_ROUTINES HEADER FILE ********
// **************************************************************

#define TX_NEWLINE {transmitByte(0x0d); transmitByte(0x0a);}

void USART_init(void);
unsigned char receiveByte(void);
void transmitByte(unsigned char);
void transmitString_F(char*);
void transmitString(char*);
Başlık: Ynt: atmega16 usart sorunu?
Gönderen: satilla - 13 Temmuz 2012, 13:12:55
kaç mhz osc için hocam register ayarları
hiç bir değişiklik yapmadan o donanımlarla kurmak istiyorum devreyi
Başlık: Ynt: atmega16 usart sorunu?
Gönderen: zakbay - 13 Temmuz 2012, 15:06:29
4 mhz de kurup denemişim sadece gönderme kısmı ile çalıştım tek taraflı olarak