Elektroda.pl
Elektroda.pl
X
Arrow Multisolution Day
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Atmega328P - USART czemu to się nie kompiluje ?

m72 02 Kwi 2015 07:27 1035 11
  • #1 02 Kwi 2015 07:27
    m72
    Poziom 12  

    Pierwsze podejście w życiu do USART-u w C.
    Żywcem zerżnięte z noty katalogowej i posklejane do kupy.
    Dodałem jedynie pętlę while.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Korzystam z arduino nano - ATMEGA328P.
    Czego to się nie kompiluje ?

    Atmel Studio podpowiada że np zamiast UBRR0H spasuje UBRRH itp a także
    w funkcji USART_Transmit w miejsce małych "n" próbowałem wpisywać 0 i 1 ale cały czas są błędy. Nie kumam jeszcze tego wszystkiego, pomóżcie coś.
    Atmega328P - USART czemu to się nie kompiluje ?

    0 11
  • Arrow Multisolution Day
  • #2 02 Kwi 2015 09:04
    Zaquadnik
    Poziom 27  

    Wygląda jakby brakowało Ci definicji SFRów ATmegi. Sprawdź czy masz dołączony odpowiedni plik nagłówkowy z definicjami SFRów do ATmegi 328 lub czy w projekcie dobrze skonfigurowałeś MCU.

    0
  • #3 02 Kwi 2015 15:49
    m72
    Poziom 12  

    Ok, dodałem

    Kod: c
    Zaloguj się, aby zobaczyć kod
    i się kompiluje bez błędów ani ostrzeżeń ale na portach jest cisza.
    W arduino nano na RX i TX są diody i widać czy w ogóle coś się wysyła, niestety nic nie mryga :D
    Co jeszcze jest w tym kodzie źle ?
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #4 02 Kwi 2015 15:59
    Zaquadnik
    Poziom 27  

    Mam wrażenie, że obszedłeś problem. Upewnij się, że masz dobry CPU ustawiony w projekcie. I pamiętaj, jeśli chcesz używać UART, ustaw pin Tx jako wyjście, a Rx jako wejście.

    0
  • Arrow Multisolution Day
  • #5 02 Kwi 2015 16:22
    m72
    Poziom 12  

    Atmega328P - USART czemu to się nie kompiluje ?

    Jak widać na obrazku, wszystko gra.

    Log po kompilacji.

    Kod: text
    Zaloguj się, aby zobaczyć kod

    0
  • #6 02 Kwi 2015 16:41
    dondu
    Moderator Mikrokontrolery Projektowanie

    Zaquadnik napisał:
    I pamiętaj, jeśli chcesz używać UART, ustaw pin Tx jako wyjście, a Rx jako wejście.

    Nie ma to znaczenia ponieważ:

    Cytat:
    When the Transmitter is enabled, the normal port operation of the TxDn pin is overridden by the USART and given the function as the Transmitter’s serial output.

    When the Receiver is enabled, the normal pin operation of the RxDn pin is overridden by the USART and given the function as the Receiver’s serial input.


    Program wygląda na poprawny - przyczyna wydaje się być w innym miejscu.
    Czy na pewno programowanie przebiega prawidłowo?

    Definicje sfr są zbędne. Do czego miały by być wymagane?
    Jeżeli więc bez nich program się nie kompiluje należy ustalić dlaczego.

    Cytat:
    The <avr/sfr_defs.h> file is included by all of the <avr/ioXXXX.h> files, which use macros defined here to make the special function register definitions look like C variables or simple constants, depending on the _SFR_ASM_COMPAT define.

    0
  • #7 02 Kwi 2015 16:54
    m72
    Poziom 12  

    Żeby wykluczyć błędy sprzętowe podpiąłem starą poczciwą Atmegę8 + Bascom i zapodałem Print "a" (jakie to jest proste w Bacomie :) ) - DZIAŁA.

    Na tym samym sprzęcie zapodałem w Atmel Studio taki kod.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    I coś ruszyło z miejsca ale nie tak do końca gdyż...
    Gdy cokolwiek w kodzie ruszę to wyskakują takie uwagi
    Atmega328P - USART czemu to się nie kompiluje ?
    ale wystarczy ponownie skompilować i uwagi znikają 8-O
    Coś się jednak wysyła jednak nie "a" tylko
    Atmega328P - USART czemu to się nie kompiluje ?
    lub w HEX(+ spacja)
    Atmega328P - USART czemu to się nie kompiluje ?
    O co tu chodzi ?

    0
  • #9 02 Kwi 2015 17:08
    tmf
    Moderator Mikrokontrolery Projektowanie

    m72 napisał:

    I coś ruszyło z miejsca ale nie tak do końca gdyż...
    Gdy cokolwiek w kodzie ruszę to wyskakują takie uwagi
    Atmega328P - USART czemu to się nie kompiluje ?
    ale wystarczy ponownie skompilować i uwagi znikają 8-O
    Coś się jednak wysyła jednak nie "a" tylko
    Atmega328P - USART czemu to się nie kompiluje ?
    lub w HEX(+ spacja)
    Atmega328P - USART czemu to się nie kompiluje ?
    O co tu chodzi ?


    Zauważ, że w swoim kodzie wywołujesz funkcje, które nie zostały jeszcze zdefiniowane - są zdefiniowane w dalszej części kodu. W efekcie kompilator używa domyślnego prototypu, który jest inny niż właściwy prototyp funkcji. Dodaj deklarację użytych funkcji przed main i problem zniknie. Przy drugiej kompilacji kompilator nic nie kompiluje, bo widzi, że plik wynikowy odpowiada źródłowemu, bo nic nie zmieniałeś w kodzie. Więc i błędów nie ma...

    0
  • #10 02 Kwi 2015 18:32
    m72
    Poziom 12  

    Dondu, Twój skrypt ze strony http://mikrokontrolery.blogspot.com/2011/03/rs-232-atmega8-komputer-terminal.html działa.
    Na jego podstawie poprawiłem ten mój nieszczęsny i też zaczął działać :)
    Zmieniłem

    Kod: c
    Zaloguj się, aby zobaczyć kod

    na
    Kod: c
    Zaloguj się, aby zobaczyć kod

    oraz
    Kod: c
    Zaloguj się, aby zobaczyć kod

    na
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Na razie jeszcze nie wiem za bardzo co to zmieniło ale ruszyło !
    (No chyba że ktoś to jakimś przystępnym językiem wytłumaczy :)
    ps. nie były to złe ustawienia terminala

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #11 02 Kwi 2015 19:07
    dondu
    Moderator Mikrokontrolery Projektowanie

    m72 napisał:

    Wiem :)

    m72 napisał:
    Na jego podstawie poprawiłem ten mój nieszczęsny i też zaczął działać :)
    Zmieniłem ...

    Masz na myśli, że działa na ATmega8?
    Bo jeśli na ATmega328 to przypadek, bo bity te nie występują w ATmega328.
    Jak więc się to ma do komunikatów kompilacji i wybranego w opcjach projektu mikrokontrolera?

    m72 napisał:
    ps. nie były to złe ustawienia terminala

    Wklejając post podałeś kod z ustawieniami dwóch bitów stopu (patrząc na komentarz), a terminal był ustawiony tylko na jeden - takie nieścisłości mogą doprowadzać do błędów transmisji.

    0
  • #12 02 Kwi 2015 19:38
    m72
    Poziom 12  

    Cytat:
    Masz na myśli, że działa na ATmega8?
    Bo jeśli na ATmega328 to przypadek, bo bity te nie występują w ATmega328.
    Jak więc się to ma do komunikatów kompilacji i wybranego w opcjach projektu mikrokontrolera?

    Tak, Atmega8.
    Może 328 nie będę na razie podpinał bo zdrowie stracę. :)
    No nic, męczę ten skrypt dalej, póki cokolwiek działa ;)

    0