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



Teraz jest 20 kwi 2024, o 09:43


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 18 kwi 2014, o 00:37 
Offline
Nowy

Dołączył(a): 29 sty 2012
Posty: 18
Pomógł: 0

Witam
Chciałbym prosić o pomoc w ogarnięciu komunikacji dwóch procesorów Atmega8 przez moduły RFM73. Wygląda to tak: ADC -> RFM73 -> RFM73 -> PWM.
Przesyłać mam próbkowany dźwięk drogą radiową i odtworzenie, puszczając go przez PWM. Teoretycznie wszystko działa. Ale nie mogę poradzić sobie z optymalizacją i dostrojenie tych modułów by działały jak najlepiej. Wiem że temat był poruszany w zielonej książce.
Problem polega na tym że jak sobie zrobię na jednym procesorze próbkowanie dźwięku i puszczę go od razu na PWM. To dźwięk wychodzi całkiem super mimo 8-bitowej rozdzielczości :) A jak chcę to przesłać przez moduły to występuje metaliczny dźwięk, no słychać że jest gorsza jakość. Najpierw przedstawię konfiguracje rejestrów modułów:

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


Bawiłem się nimi godzinami, googlowałem w poszukiwaniu działającej konfiguracji aż wreszcie zadziałało, ale czy to dobra konfiguracja? Chciałbym z tego wycisnąć maksimum.

W części nadawczej opierałem się na rozdziale o ADC pana Mirka. Inicjacja modułu oraz kod odpowiedzialny za wysyłanie wygląda tak:

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


Miałem problemy z wysyłaniem wartości liczbowej, dlatego wysyłanie przez moduł rozwiązałem w ten sposób że konwertuje zmienną typu int na łańcuch znaków.

Strona odbiorcza to:

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


Tutaj konwersja odwrotna. Do rejestru OCR1A przypisuje odebraną wartość liczbową i wysyłam na PWM.
Taktowanie procesorów mam aktualnie ustawione na 20MHz, ale próbowałem też z 24MHz by osiągnąć jak najlepszą jakość dźwięku.
Obsługa modułów jest bez używania przerwań.

Czy da radę coś więcej z tego wycisnąć? Będę wdzięczny w naprowadzeniu co można było by zmienić.
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2014, o 18:13 
Offline
Użytkownik
Avatar użytkownika

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

Witam
Zauważyłem że do konwersji używasz tablic
ASCII[3] czyli o trzech elementach
a po konwersji (o ile się nie mylę) funkcja "itoa" jeśli liczba będzie większa niż 99
odda łańcuch o długości czterech znaków
trzy skonwertowana liczba plus znak końca stringa



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2014, o 22:46 
Offline
Nowy

Dołączył(a): 29 sty 2012
Posty: 18
Pomógł: 0

Powiem Ci że mimo to, kod działa. Specjalnie sprawdzałem co było odbierane przez moduł wysyłając to na UART. Tutaj też z tym kombinowałem aż się udało. Otrzymuje wartości z zakresu 0-255. I sterowanie diodą LED również działa. Zauważyłem jeszcze, a nie było z tym wcześniej problemu, że jak ustawie przy wysyłaniu pauze z jakimś czasem to komunikacja wygląda super. A jak ją zakomentuje. To po włączeniu zasilania komunikacja trwa przez 2-3 sekundy, następnie się urywa i wraca po jakiś 30-40 sekundach. Wcześniej tego nie było. Być może rejestry mam coś nie tak ustawione.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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