logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Atmega16][C] USART - Przekłamania w przesyle danych

saturnim 23 Paź 2008 19:48 2040 3
REKLAMA
  • #1 5661621
    saturnim
    Poziom 10  
    Witam!
    próbuje przesłać dane z komputera, na atmege i wyświetlić je binarne na LCD. Problem tkwi w tym że wyświetlane dane nie zgadzają się z tym co wysłałem z PC. Używam Atmegi 16 na kwarcu 16 Mhz.Oto kody programów od strony PC i Atmegi:

    PC [C#] :
    
    using ...
    
    namespace RS232
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                serialPort1.StopBits = System.IO.Ports.StopBits.One;
                serialPort1.DataBits = 8;
                serialPort1.Parity   = System.IO.Ports.Parity.None;
                serialPort1.BaudRate = 9600;
                serialPort1.Open();   
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                serialPort1.Write("U");
            }
        }
    }
    
    


    ATMEGA C:

    
    #include <avr/io.h>
    #include <LCD.h>
    
    void USART_INIT()
    {
    UCSRB = (1<<RXEN)|(1<<TXEN); // RXEN , TXEN włączony
    UCSRC = 0b00000110; // 8 bit, NP, 1 bit stopu
    UBRRL =  0b01100111; // 9600 [b/s]
    UBRRH = 0b00000000; 
    }
    
    unsigned char USART_RECEIVE()
    {
    	while(!(UCSRA & (1<<RXC)))
    		;
    	return UDR;
    }
    
    int main()
    {
    DDRA=0b11111111;
    USART_INIT();
    LCD_INIT();
    
    		unsigned short BYTE = USART_RECEIVE();
    	
    				for(unsigned short i = 128 ; i>=1 ; i=i/2)
    				{
    				if((BYTE & i) == i)
    					WRITE_CHAR('1');
    				else 
    					WRITE_CHAR('0');
    
    				}	 
    
    }
    


    Jak widać programy są maksymalnie uproszczone pod kątem problemu.

    Po naciśnięciu buttona w programie od strony PC, na LCD wyskakują jakieś niechciane dane....

    Jeśli widzi ktoś jakieś błędy, przeoczenia, proszę o pomoc
  • REKLAMA
  • #2 5663491
    polimorf
    Poziom 13  
    A gdzie zapodziałeś główną pętle programu?
  • REKLAMA
  • #3 5664815
    saturnim
    Poziom 10  
    nie ma pętli bo odczytuje tylko jeden bajt
  • #4 5664921
    BoskiDialer
    Poziom 34  
    Nie wpisujesz niczego do rejestru UCSRC. Brzmi to dziwnie, ale rejestr UCSRC i UBRRH są pod tym samym adresem, więc żeby wpisać coś do UCSRC trzeba wpisywać liczbę z ustawionym najwyższym bitem:
    UCSRC = 0b10000110; // 8 bit, NP, 1 bit stopu
REKLAMA