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



Teraz jest 8 kwi 2026, o 03:10


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
Autor Wiadomość
PostNapisane: 1 gru 2015, o 11:43 
Offline
Nowy

Dołączył(a): 01 gru 2015
Posty: 6
Pomógł: 0

Dzień dobry wszystkim. Borykam się z problemem przesyłania wartości pomiędzy mikrokonrolerami równolegle ( jeśli tak to mogę nazwać). Ogólnie: komunikują się ze sobą atmega 16 oraz atmega 2560 ( w arduino ). Atmega 16 odczytuje wartości z portu A przy każdym przerwaniu INT0 , które generuje atmega 2560. Oba mikrokontrolery taktowane są 16 Mhz. Jako, że potrzebuję aby atmega 16 pobrała 5 liczb to przy każdym przerwaniu wartość z portu A zapisywana jest do globalnie zdefiniowanej tablicy, a poźniej z niej odczytywana, przez funkcję. Założeniem projektu który robię jest wyświetlacz matrycowy posiadający własny mikrokontroler(atmega 16), komunikujący się ze światem zewnętrznym przez odczyt wartości z portu A przy przerwaniu INT0. Wyświetlacz pokazuje 5 znaków alfanumercznych. Problem jest taki, że znaki za każdym ładowaniem przesuwają się o jedną pozycję. W sensie ładuję ABCDE a otrzymuję EABCD, jeśli załaduję jeszcze raz to samo otrzymam DEABC i tak w kółko.

Robiłem testy, i jesli nadam znaki na stałe to wyświetlają się dobrze. Dodam jeszcze, że porty obu mikrokontrolerów połączone są bezpośrednio, odpowiadającymi sobie pinami.

Oto mój kod dla odbiornika:

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


Oraz kod dla nadajnika:

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


Z góry dziękuję za pomoc oraz cenne uwagi, proszę o wyrozumiałoś z racji mojego małego doświadczenia z mikrokontrolerami.
on i off to makra, funkcje w odbiorniku działają w z nadanie statycznym, więc nie wklejałem ich kodu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 gru 2015, o 15:07 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

Spróbuj zmienną:
external_buffor zadeklarować jako volatile
a interrupt_counter jako static w samym przerwaniu

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 gru 2015, o 15:25 
Offline
Nowy

Dołączył(a): 01 gru 2015
Posty: 6
Pomógł: 0

Zmieniłem erternal_buffor na volatile, a interrupt_counter na static int, deklarując ją w przerwaniu. Efektem tego jest poprawne pierwsze ładowanie, natomiast przy kolejnych dalej jest efekt przesuwania.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 gru 2015, o 15:30 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

to pokaż może ten zmieniony kod

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 gru 2015, o 15:35 
Offline
Nowy

Dołączył(a): 01 gru 2015
Posty: 6
Pomógł: 0

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: 1 gru 2015, o 15:44 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

A Twój kod w nadajniku wykonuje się tylko raz.
Tak ma być?

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 gru 2015, o 15:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 wrz 2013
Posty: 74
Lokalizacja: Sierakowice/Gdańsk
Pomógł: 9

W jaki sposób wysyłasz z nadajnika? Przez resetowanie go???
Jeżeli tak - to może podczas resetowania generuje się dodatkowe przerwanie które wysyła ostatnio ustawiony bajt na porcie K.


Autor postu otrzymał pochwałę


Ostatnio edytowano 1 gru 2015, o 15:52 przez wojtekr51, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 gru 2015, o 15:52 
Offline
Nowy

Dołączył(a): 01 gru 2015
Posty: 6
Pomógł: 0

Tak właśnie chciałem, żeby się raz wykonał i wysłał 5 liczb. Później pewnie rozbuduję kod nadajnika o odczyt flagi zajętości itd. Hmmm, a to może generować jakieś zakłócenia?

Tak resetuję nadajnik.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 gru 2015, o 16:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 wrz 2013
Posty: 74
Lokalizacja: Sierakowice/Gdańsk
Pomógł: 9

Jakim zboczem: narastającym czy opadającym wywołujesz przerwanie int0?
Dla testu w nadajniku za pętlą for() która wysyła dane wpisz np.
Kod:
PORTK = 100;

i zobacz czy teraz przypadkiem po resecie nie jest wysyłana jako pierwsza właśnie ta wartość.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 gru 2015, o 16:07 
Offline
Nowy

Dołączył(a): 01 gru 2015
Posty: 6
Pomógł: 0

Ok zaraz to sprawdzę, tylko zmienię trochę kod nadajnika, żeby wysyłał liczby po naciśnięciu przycisku innego niż reset.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 gru 2015, o 16:13 
Offline
Użytkownik

Dołączył(a): 29 lip 2014
Posty: 195
Pomógł: 44

Witam,

Hmm..., a jak masz skonfigurowane rejestry od przerwania? I rozumiem, że te makra on(A,0) i off(A,0) właśnie ustalają stan linii w ATMEGA2560, która to linia jest połączona z INT0 ATMEGA16, tak? Jeśli tak, to pokaż te makra.

Dopisane: Kolega wojtekr51 był szybszy :-).

Pozdrawiam, QuadMan.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 gru 2015, o 16:24 
Offline
Nowy

Dołączył(a): 01 gru 2015
Posty: 6
Pomógł: 0

Ok Wygląda na to, że problemem był reset nadajnika. Problem mogę uznać za rozwiązany, choć nie wiem czy mnie jeszcze coś powiązanego z tym nie zaskoczy, więc wolał bym go jeszcze nie zamykać.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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