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

UART -> USB na atmega16

witek512 14 Paź 2010 20:47 1631 1
REKLAMA
  • #1 8620216
    witek512
    Poziom 11  
    Witam.

    Mam problem z połączeniem UART w atmedze16 z USB w komputerze.

    Jako przejściówki używam przeprogramowanego JTAGa. Po zwarciu odpowiednich pinów i połączeniu przez putty wprowadzone znaki pojawiają się w terminalu, więc wydaje się sprawna.
    Komunikacja między dwoma atmegami po zwarciu nóżek Rx i Tx również działa. Sprawdzałem wysyłając co jakiś czas znak w jednym procesorze, drugi programując tak, aby zapalał na moment diodę po otrzymaniu tego znaku.

    Kiedy natomiast odłączę przejściówkę z JTAGa do atmegi i komputera, oraz łączę się przez putty na terminalu nic się nie pojawia.

    Do atmegi podłączony jest kwarc 14,7456 MHz, w ustawieniach projektu AVR Studio ustawiłem więc Frequency na 14745600 hz.

    Kod źródłowy programu:
    #include <avr/io.h>
    #include <stdint.h>
    
    void uart_init(uint16_t baud) {
    	UBRRH= (F_CPU/16/baud-1) >> 8;
    	UBRRL= F_CPU/16/baud-1; 
    	UCSRC=(_BV(URSEL)|_BV(UCSZ1)|_BV(UCSZ0));
    	UCSRB=(_BV(RXEN)|_BV(TXEN));
    }
    
    void uart_put_char(const uint8_t data) {
    	while(!(UCSRA & _BV(UDRE)));
    	UDR=data;
    }
    
    uint8_t uart_get_char(void) {
    	while(!(UCSRA & _BV(RXC)));
    	return UDR;
    }
    
    int main() {
    	uart_init(9600);
    	while(1) {
    		uint8_t data=uart_get_char();
    		uart_put_char(data);
    	}
    }


    Ustawienia putty:
    Serial line to connect to: COM4 (sprawdzone w menadżerze urządzeń)
    Speed (baud): 9600
    Data bits: 8
    Stop bits: 1
    Parity: None
    Flow control: None

    Fuse bity:
    High: 0x19
    Low: 0xFF

    Nie mam już nawet pomysłu gdzie szukać przyczyny problemu:(
  • REKLAMA
  • #2 8626503
    kubus_puchatek
    Poziom 18  
    A jaką masz prędkość od strony PC-ta?
    najprościej napisz prosty programik na PC który wysyła ciągiem znaki 0XAA.
    mierzysz częstotliwość i powinieneś mieć F=1/2 prędkości w bodach.
    może źle ustawiłeś coś w kontrolerze. zrób to samo wysyłaj znaki 0XAA i mierz F na serialu.
REKLAMA