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

rs-232 i Atmega8535, Jak coś wysyłać z PC do Atmegi?

amnesiac 17 Paź 2008 22:08 1383 2
REKLAMA
  • #1 5642231
    amnesiac
    Poziom 10  
    Posty: 6
    witam, jestem początkujący w mikrokontrolerach i zacząłem dziś kombinować z USART. Moja atmega8535 wysyła rzeczy które odbieram za pomocą Tera Terma i wszystko jest ok. Chciałem natomiast zapytać jak wykonać przeciwną operację - tzn jak wysłać coś z komputera do atmegi?

    Jeśli ktoś mógłby podać jakim programem tego dokonać i łopatologicznie wyjaśnił po kolei w jaki sposób to byłbym bardzo wdzięczny :)
    Dzięki z góry, pozdrawiam
  • REKLAMA
  • #2 5642345
    rfhzcx
    Poziom 14  
    Posty: 93
    Pomógł: 6
    Ocena: 20
    Najpierw pytanie - czy przed wysłaniem kolejnego znaku do RS-a sprawdzasz czy bufor nadajnika jest w stanie przyjąć nowy znak ? Jeśli tak to z odczytem jest bardzo podobnie - jeśli bit wskazuje na pełny bufor odbiornika to znaczy, że możesz go odebrać
    P
    AK
  • #3 5642387
    amnesiac
    Poziom 10  
    Posty: 6
    w tej chwili to programuje troszke po omacku, na podstawie znalezionego w necie kodu. korzystam z ponizszego:

    
    
    #include <avr/io.h> 
    #define CPU_Hz 8000000 // częstotliwość zegara w Hz 
    #define OSC 8 // częstotliwość zegara w MHz 
    
    #define BAUD 9600 // prędkość transmisji po RS232 
    #define MYUBRR CPU_Hz/8/BAUD-1 
    
    
    /// **** fukcje dla RS232 **** 
    void UART_init(unsigned int ubrr) // inicjalizacja 
    { 
    UBRRH = (unsigned char) (ubrr>>8); // ustawienie prędkości 
    UBRRL = (unsigned char) ubrr; 
    UCSRB = (1<<RXEN)|(1<<TXEN); // transmisja dwukierunkowa, odbieranie/nadawanie 
    UCSRC = (1<<URSEL)|(3<<UCSZ0); // ustawienie 8 bitów danych i 1 bity stopu 
    } 
    
    
    void USART_out (unsigned char data) // wysłanie znaku 
    { 
    while ( !( UCSRA & (1<<UDRE)) );
    /* Put data into buffer, sends the data */
    UDR = data;
    } 
    
    
    unsigned char USART_in (void) // odebranie znaku 
    { 
    // Wait until a byte has been received
    
    while((UCSRA&(1<<RXC)) == 0);
    
    // Return received data
    
    return UDR; 
    } 
    
    void Inicjalizacja(void) 
    {    
      // DDRD=0xFF; // Ustawiam port D jako wyjścia 
    } 
    
    int main(void) 
    {
    PORTB = (1<<PB7)|(1<<PB6);
    DDRB = (1<<DDB5)|(1<<DDB4)|(1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0);
    UART_init(11); 
    unsigned char Zm = 82; 
    USART_out(Zm);
    int i;
    while(1){
    	i =PINB;
    	if(i == 0xC1){ //S1
    		USART_out(83);
    		} 
    	}
    	
    }
    


    po wcisnieciu przycisku na tera termie widze co atmega wyslala, wiec wydaje mi sie ze po jej stronie wszystko ok. nie wiem jak sprawdzic teraz czy atmega bedzie poprawnie odbierac to co wysylam bo nie wiem jak nawiazac komunikacje z atmego za pomoca mojego PC
REKLAMA