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

ATMEGA328 Za Chiny Ludowe nie chce nic wysłać po UART...

lukaszSZ999 05 Gru 2015 21:42 1344 6
REKLAMA
  • #1 15214101
    lukaszSZ999
    Poziom 11  
    Witajcie

    Tak jak w temacie. Walczę z komunikacją z komputerem przez RS-232. Port COM sprawny, jak zewrę TX i RX dostaję na wejście to co wysyłam.

    Bezsilny zacząłem ładować przykładowe, niby działające kody w C z UARTem ale nic z tego... Atmega nie odpowiada. Czasem coś wyrzuci ale to niezgodne z tym co powinno.
    Dodam że wysyłając komendy by np zapalił LED wszystko ok, odbiera, ale niestety nie wysyła nic po UART.
    Próbowałem też na innych kostkach ATMEGA328. Fusybity odpowiadające za dzielenie zegara przez 8 wyłączone.

    Oto kod. Schematu nie mam bo łączyłem od ręki lutownicą

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Pomóżcie proszę. Ja już wysiadam.

    Dziękuję i pozdrawiam
  • REKLAMA
  • #2 15214130
    strikexp
    Poziom 27  
    Ja jak zaczynałem swoją przygodę z ATmega8 to winne były błędy w programie, oraz brak rezystorów podciągających.
    Zwróć uwagę czy program który wgrywasz jest napewno dla ATmega328, bo taki na ATmega8 nie będzie Ci działał prawidłowo.
  • REKLAMA
  • REKLAMA
  • #5 15214565
    kamyczek
    Poziom 38  
    Przy takich zabawach warto podpiąć oscyloskop lub analizator ttl jest sporo "podejrzanych" w twojej sprawie. Potrzebny jest kod żeby móc go zweryfikować Poza tym przydał by się schemat podłączeń twojej płytki i troszkę informacji nie ma sensu spekulować jaka jest przyczyna nieprawidłowego działania bez weryfikacji schematu i kodu .
  • #6 15216058
    jony15
    Poziom 24  
    Spróbuj z tym kodem, aha włączone jest przerwanie od odbiornika.
    [syntax]
    plik.h
    #define UART_BAUD_RATE 57600
    #define UART_BAUD_CALC(UART_BAUD_RATE,F_CPU) ((F_CPU)/((UART_BAUD_RATE)*16l)-1)

    Plik.c

    void rs_232_init(void){
    //atmega328
    UBRR0H = (uint8_t)(UART_BAUD_CALC(UART_BAUD_RATE,F_CPU)>>8);
    UBRR0L = (uint8_t)UART_BAUD_CALC(UART_BAUD_RATE,F_CPU);
    UCSR0B = (1<<TXEN0) |(1<<RXEN0)|(1<<RXCIE0);
    }//void rs_232

    void rs_write(uint8_t c)
    {
    while(!(UCSR0A & (1 << UDRE0)));
    UDR0 = c;
    }
    [/syntax]
  • REKLAMA
  • #7 15246765
    lukaszSZ999
    Poziom 11  
    Temat rozwiązany. Problem z portem COM
REKLAMA