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



Teraz jest 25 kwi 2026, o 21:09


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 16 ] 
Autor Wiadomość
PostNapisane: 13 lut 2015, o 17:56 
Offline
Użytkownik

Dołączył(a): 07 mar 2014
Posty: 39
Pomógł: 0

Dzień dobry, próbuje obsłużyć komunikacje UART, znalazłem taki programik ale nie mogę go skompilować:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Błąd z kompilatora:
Kod:
**** Build of configuration Release for project Testowy ****

make all
Building file: ../main.c
Invoking: AVR Compiler
avr-gcc -Wall -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=attiny2313 -DF_CPU=8000000UL -MMD -MP -MF"main.d" -MT"main.d" -c -o "main.o" "../main.c"
../main.c: In function 'USART_Init':
../main.c:18: error: 'URSEL' undeclared (first use in this function)
../main.c:18: error: (Each undeclared identifier is reported only once
../main.c:18: error: for each function it appears in.)
make: *** [main.o] Error 1

**** Build Finished ****


Eclipse Indigo
Windows XP

Wie ktoś co może być nie tak? Brakuje mi jakiejś biblioteki?
Pozdrawiam!



Ostatnio edytowano 13 lut 2015, o 19:15 przez Maniecki106, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lut 2015, o 18:44 
Offline
Nowy

Dołączył(a): 23 mar 2014
Posty: 7
Pomógł: 1

Witam. Szukałem w nocie bitu URSEL , a znalazłem jedynie UMSEL. Sprawdź czy nie zrobiłeś literówki. Pozdrawiam ska_and.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lut 2015, o 19:23 
Offline
Użytkownik

Dołączył(a): 07 mar 2014
Posty: 39
Pomógł: 0

Teraz kompiluje się poprawnie, ale nie ma łączności. Tzn nie wysyła znaku. Sprawdzałem, echo działa.
Fusy:
Obrazek



Ostatnio edytowano 13 lut 2015, o 19:55 przez Maniecki106, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lut 2015, o 19:54 
Offline
Nowy

Dołączył(a): 23 mar 2014
Posty: 7
Pomógł: 1

Witam ponownie. Sprawdź funkcję USART_Transmit, deklarujesz uint8_t a próbujesz wysłać char 'A'.
Wg pdf
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lut 2015, o 20:01 
Offline
Użytkownik

Dołączył(a): 07 mar 2014
Posty: 39
Pomógł: 0

Zmieniłem:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

na
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Bez rezultatu. Ma ktoś jakieś pomysły jeszcze?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lut 2015, o 20:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Powodem złej komunikacji może być prędkość taktowania,
widzę że masz zaznaczony bit CKDIV8
co daje 1MHz dla ustawionych 8MHz.

W takiej konfiguracji przy prędkości 9600 masz -7% błędu
jeśli odznaczysz SKDIV8 to przy 8MHz będzie 0,2 % błędu

Co jeszcze :
Na wewnętrznym generatorze mogą jeszcze występować błędy transmisji
zainteresuj się rejestrem OSCAL a lepiej przejść na zewnętrzny kwarc
i według tabeli z DataSheed-u ustawić baudrate na zawierające najmniejszy błąd
tabela jest na ostatniej stronie dotyczącej USART.
Według tej tabeli możesz też zastosować kwarc najbardziej "przyjazny" przy transmisji RS

------------------------ [ Dodano po: 1 minucie ]

A i jeszcze jedno pytanie
Tobie nie dochodzi żadna informacja do terminala czy odbierasz śmieci ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lut 2015, o 21:17 
Offline
Użytkownik

Dołączył(a): 07 mar 2014
Posty: 39
Pomógł: 0

Odznaczyłem opcje: "CKDIV8 - wewnętrzny podział zegara przez 8" i nic z tego

Tak wygląda echo:
Obrazek

Jest to możliwe, że układ nie działa przez kwarc? Jedyny jaki w domu mam to 11.0592.

Dodam, że korzystam z Modułu Bluetooth HC-06. Podłączenie wygląda tak:

Attiny2313/HC-06
PD0->TXD
PD1->RXD



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lut 2015, o 21:20 
Offline
Moderator
Avatar użytkownika

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

tak patrzę na te zmagania i pytania i myślę, że śmiało można polecić ci abyś zaczął spokojnie od podstaw
http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

warto się z tym zapoznać ... i nie robić wszystkiego na zasadzie jakichś tam podmian przypadkowych, lecz zrozumieć jak to robić, jak dobrać kwarc, co to są typy danych itp itd

_________________
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: 13 lut 2015, o 21:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Zanim będziesz miał BB przeczytaj ten artykół http://mirekk36.blogspot.com/2013/01/rs232-ubrr-jak-prawidowo-obliczac-trick.html
Jak i inne tam masz dużo przydatnych informacji
tak samo na kanale YT Mirka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lut 2015, o 00:32 
Offline
Użytkownik

Dołączył(a): 07 mar 2014
Posty: 39
Pomógł: 0

Czyli to jednak kwarc. Jak to ogarnę to się odezwę, tymczasem dziękuje za pomoc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lut 2015, o 21:21 
Offline
Użytkownik

Dołączył(a): 07 mar 2014
Posty: 39
Pomógł: 0

Mam kilka pytań...

Według wzoru podanego na blogu Pana Mirka:
UBRR = 11.0592 / 16 / 9600 - 1 = 0.99
Więc chyba ok?

Żeby używać kwarcu zewnętrznego wystarczy ustawić w mkAVR Calculator:
Fusy uproszczone > Zewnętrzny kwarc > Opcja: >8MHz ?

Czy dwa kondensatory 27 pikofarada będą odpowiednie, do kwarcu 11.0592 ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lut 2015, o 21:57 
Offline
Moderator
Avatar użytkownika

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

Maniecki106 napisał(a):
Czy dwa kondensatory 27


15pF - max 22pF

jak już nic nie masz na stanie to w ostateczności daj te 27 pF a jak nie ruszy to zmienisz na mniejsze

_________________
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: 25 lut 2015, o 20:38 
Offline
Użytkownik

Dołączył(a): 07 mar 2014
Posty: 39
Pomógł: 0

Ustawiłem na kwarc zewnętrzny, użyłem kondensatorów 22 pF. Prosty program migający diodą działa, ale ten niestety nie chce - nawet nie miga diodą.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 lut 2015, o 21:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Aby dioda migała to raczej powinno być tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 lut 2015, o 21:10 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Ta linia jest niepoprawna
Maniecki106 napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Zmień na:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

UMSEL ustawia pracę synchroniczną dlatego USART nie może wysłać znaku i czeka w pętli while.

Masz błędnie podstawianą wartość do funkcji USART_Init. Nie możesz podstawić wprost 9600 tylko liczbę UBRR, która jest zależna od tego parametru i częstotliwości taktowania mikrokontrolera. Znajdziesz to na końcu rozdziału o USART w specyfikacji mikrokontrolera.
Dla 11,0592 MHz i szybkości transmisji 9600 bodów UBRR = 71
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2015, o 00:46 
Offline
Użytkownik

Dołączył(a): 07 mar 2014
Posty: 39
Pomógł: 0

Już chodzi. Błędem było to, że dla Attiny2313 nie ma bitu URSEL, jest on na przykład w ATmega8.

Poniższy program działa:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



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: 16 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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