Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 9 lip 2025, o 18:28


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
    Autor Wiadomość
     Tytuł: UART problem
    PostNapisane: 19 sie 2017, o 14:26 
    Offline
    Nowy

    Dołączył(a): 19 sie 2017
    Posty: 14
    Pomógł: 0

    Witam. Nie działa mi kod z rozdziału uart przerwania bufor cykliczny. Wysyłanie działa bez zrzutów, ale gdy odbieram buforem to na wyświetlaczu nie pojawia się nic. Funkcje są takie same jak w książce.
    Kod:
    int main( void )
    {
       lcd_init();
          USART_Init(__UBRR);
          sei();

          while(1){

          znak = uart_getc();
          if(znak>0){
          lcd_char(znak);
          }
          }
    }

    Zaznaczam, że program z noty pdf atmegi 8 działa bez problemu.
    Kod:
    int main( void )
    {
       lcd_init();
          USART_Init(__UBRR);
          sei();

          while(1){

          znak = USART_Receive();
          if(znak>0){
          lcd_char(znak);
          }
          }
    }

    unsigned char USART_Receive( void )
    {
    /* Wait for data to be received */
    while ( !(UCSRA & (1<<RXC)) )
    ;
    /* Get and return received data from buffer */
    return UDR;
    }



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 sie 2017, o 16:00 
    Offline
    Użytkownik

    Dołączył(a): 27 lis 2012
    Posty: 291
    Pomógł: 6

    Rzuć okiem na animacje bufora cyklicznego
    https://scratch.mit.edu/projects/167562919/



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 sie 2017, o 17:49 
    Offline
    Nowy

    Dołączył(a): 19 sie 2017
    Posty: 14
    Pomógł: 0

    Już to widziałem,ale nie wiem jak to ma mi pomóc.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 sie 2017, o 19:09 
    Offline
    Użytkownik

    Dołączył(a): 25 lip 2013
    Posty: 2596
    Pomógł: 129

    A oryginalny kod z książki Ci działa?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 sie 2017, o 19:16 
    Offline
    Nowy

    Dołączył(a): 19 sie 2017
    Posty: 14
    Pomógł: 0

    Właśnie kod na bufor cykliczny z książki nie działa. Podstawowy z noty bez problemów. To chyba coś z przerwaniem, bo jak dodam tam np. gaszenie diody to też nie działa, w funkcji wszystko jest ok.

    Wysłane z mojego Mi-4c przy użyciu Tapatalka



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 sie 2017, o 19:27 
    Offline
    Użytkownik

    Dołączył(a): 02 gru 2015
    Posty: 63
    Pomógł: 1

    Możliwe, że nie dział Tobie poprawnie ten kod z powodu, że został on przygotowany na Atmega32 a nie na Atmega8. W tych dwóch mikroprocesorach są zapewne odmienne rejestry.

    Jako ciekawostkę dodam, że gdy użyłem procesora Atmega328p to musiałem poprawić swoją bibliotekę od USART z powodu rozbieżności w rejestrach.

    Pozdrawiam,
    Tomek.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 sie 2017, o 19:53 
    Offline
    Nowy

    Dołączył(a): 19 sie 2017
    Posty: 14
    Pomógł: 0

    W tym przypadku chyba nie ma żadnych rejestrów do zmiany. Cała reszta działa tylko nie bufor odbiorczy.

    Wysłane z mojego Mi-4c przy użyciu Tapatalka



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 sie 2017, o 20:06 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27415
    Lokalizacja: Szczecin
    Pomógł: 1043

    pokaż fragment kodu pliku *.h do konfiguracji UARTA jak to zrobiłeś? jak poustawiałeś sobie

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 sie 2017, o 08:40 
    Offline
    Nowy

    Dołączył(a): 19 sie 2017
    Posty: 14
    Pomógł: 0

    Kod:
    #ifndef UART_H_
    #define UART_H_

    #define UARRT_RX_BUF_SIZE 32
    #define UART_RX_BUF_MASK (UARRT_RX_BUF_SIZE-1)

    #define UARRT_TX_BUF_SIZE 16
    #define UART_TX_BUF_MASK (UARRT_TX_BUF_SIZE-1)

    #define BAUD 9600
    #define MYUBRR (F_CPU/16/BAUD)-1
    #define UART_BAUD 9600
    #define __UBRR ((F_CPU+UART_BAUD*8UL) / (16UL*UART_BAUD)-1)
    void USART_Init(uint16_t ubrr);
    void uart_putc(char data);
    char uart_getc(void);

    #endif /* UART_H_ */

    Kod:
    void USART_Init(uint16_t ubrr)
    {
    /*Set baud rate */
    UBRRH = (uint8_t)(ubrr>>8);
    UBRRL = (uint8_t)ubrr;
    //Enable receiver and transmitter */
    UCSRB = (1<<RXEN)|(1<<TXEN);
    /* Set frame format: 8data, 2stop bit */
    UCSRC = (1<<URSEL)|(3<<UCSZ0);
    }



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 sie 2017, o 08:48 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27415
    Lokalizacja: Szczecin
    Pomógł: 1043

    No to czemu piszesz że kod z książki ci nie działa jeśli masz skopaną inicjalizację ? tzn inną niż w książce ? eeeeeh panie panie .... tak to nigdy nie ruszysz. Ileż razy można powtarzać, a już wyżej kolega micky pytał cię czy działa ci kod z książki i też miał na myśli niezmieniony kod ....

    weź więc nośnik dołączony do książki i odpal to - zamiast pisać swoją inicjalizację w której w ogóle przerwań do UARTa nie odpalasz. No co stoi na przeszkodzie żeby sobie sprawdzić oryginalny kod z książki

    a rzeczywiście w ATmega8 są identyczne rejestry jak w ATmega32 więc nic przerabiać nie trzeba nawet - tylko skompilować pod innego procka

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 sie 2017, o 10:39 
    Offline
    Nowy

    Dołączył(a): 19 sie 2017
    Posty: 14
    Pomógł: 0

    Nie miałem ustawionego bitu RXCIE teraz już działa. Dzięki.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Google [Bot] i 4 gości


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO