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



Teraz jest 15 sty 2025, o 21:47


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 26 cze 2014, o 20:33 
Offline
Użytkownik

Dołączył(a): 12 lut 2014
Posty: 27
Lokalizacja: Warszawa
Pomógł: 0

Witam.
Chciałem przeprowadzić transmisję danych między dwoma uP atmega. Chciałem aby atmega32 wysyłał zmienną i atmega8 wyświetlał ją na lcd. Lcd mam zaprogramowane, problem tkwi w odbiorze/przesyle danych. Nie wyskakują niby żadne błędy ale kod nie działa. W nadajniku jest zmienna która po komendzie KEY_DOWN2 miała zwiększać się o 1. Co robię nie tak ? Z góry dziękuję za pomoc.

Oto kod nadajnika i odbiornika:

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



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

_________________
Dopiero zaczynam przygodę z mikrokontrolerami.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 cze 2014, o 20:51 
Offline
Użytkownik
Avatar użytkownika

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

W nadajniku masz praktycznie jeden wielki błąd
i nie zrozum mnie źle bo na początku zrobiłem podobnie
zdefiniowałem funkcję ale jej nie wywołałem :)
(ale pamiętam to do dziś :))

1.
Zdefiniowałeś funkcje w ciele funkcji main (zły styl programowania)
przenieś deklaracje tych funkcji (USART_Init , USART_Transmit)
przed main a definicje poniżej main

2.
Brak nieskończonej pętli głównej (np. while(1) )

3.
Brak wywołanie w.w. funkcji w programie a właściwie w
nieskończonej pętli głównej

Chyba że źle wkleiłeś kod :D


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 cze 2014, o 21:16 
Offline
Użytkownik

Dołączył(a): 12 lut 2014
Posty: 27
Lokalizacja: Warszawa
Pomógł: 0

Nie wiem czy dobrze zrozumiałem uwagi, ale poprawiłem jak umiałem i nadal nie działa. Oto "poprawiony" kod:

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


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

_________________
Dopiero zaczynam przygodę z mikrokontrolerami.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 cze 2014, o 21:43 
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

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

A znak możesz wysyłać w postaci '0' przykładowo:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

a wtedy w odbiorniku wystarczy użyć funkcji LCD_WriteChar (o ile taką posiadasz). Oczywiście możesz zostawić tak jak masz teraz, ale łańcuch gg który pomieści jeden znak powinien mieć rozmiar 2, a nie 1. I powinien być to typ znakowy char.
Masz również błąd w odbieraniu wyniku z funkcji. Powinno być:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Ogólnie mówiąc:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
nic nie zwraca i pobiera jeden argument i w kodzie używa się to:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

natomiast:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
zwraca wartość i nic nie pobiera i w kodzie używa się to:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 cze 2014, o 21:49 
Offline
Użytkownik
Avatar użytkownika

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

Masz niebieską książkę Mirka ?

Teraz zainicjalizowałęś transmisję na 0
Wiesz do czego jest funkcja USART_Init
w niej między innymi ustawiasz prędkość transmisji
przekazując obliczony wcześniej MYUBRR jako parametr.

Poszukaj tu na forum jest parę przykładów jak zainicjować transmisję
z PC i od tego trzeba zacząć żeby potrenować.
Masz jeszcze na blogu Mirka super poradnik o ADC gdzie jest
wykorzystywana transmisja do PC .

Tak samo ten poradnik z tego samego bloga
http://mirekk36.blogspot.com/2013/05/terminal-jako-kolorowy-wyswietlacz-lcd.html


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 cze 2014, o 08:02 
Offline
Użytkownik

Dołączył(a): 12 lut 2014
Posty: 27
Lokalizacja: Warszawa
Pomógł: 0

Zastosowałem się do uwag Krausera i jest lepiej. Teraz coś jest przesyłane. Nie wiem dlaczego ale na wyświetlaczu wyświetlane są po kolei liczby od 0 do 255 (bez dotykania switch'a). Po dotknięciu switch'a liczba na wyświetlaczu zatrzymuje się. Co jest tym razem nie tak ? Wrzucam poprawiony kod:

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


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

_________________
Dopiero zaczynam przygodę z mikrokontrolerami.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 cze 2014, o 16:38 
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

Brakuje podciągania pinu przycisku do plusa wewnętrznym rezystorem. Robi się to tak, że dodajesz dodatkowe makro:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i w funkcji main przykładowo przed LCD_INIT; dodajesz:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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

nie umieszcza się w innych funkcjach.

_________________
Dragonus Cracovus: Biomagia



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


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