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



Teraz jest 29 mar 2024, o 07:30


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 20 ] 
Autor Wiadomość
PostNapisane: 16 gru 2016, o 02:27 
Offline
Nowy

Dołączył(a): 14 wrz 2016
Posty: 19
Pomógł: 0

Pracuję nad projektem odtwarzacza WAV na zestawie ATB i ostatnią, a zarazem najważniejszą rzeczą w tym projekcie jest odtwarzanie plików WAV z karty SD. Na początku chciałem posilić się gotowcem z płyty z green booka z lekcji 14, żeby sprawdzić czy wszystko działa i okazało się, że nie. Nie udaje mi się odtworzyć dźwięku. Program normalnie wchodzi w pętle główną i wyświetla na ekranie "Insert SD CARD" i dalej po włożeniu karty wyświetla się napis PLAY oraz nazwa pliku wav z karty, ale muzyka nie gra. Po wyjęciu karty na wyświetlaczu nic się nie zmienia, a jak mniemam powinno pojawić się znowu "insert SD Card". Dodam jeszcze, że po włożeniu karty SD nie wyświetla się od razu menu z napisem PLAY itd. tylko są około 3 mignięcia na zmianę insert sd card, play, insert... po czym zostaje na PLAY i już nic nie miga.
W zestawie ATB mam ATmege 644p, więc możliwe, że powinienem w kodzie pozmieniać niektóre rejestry, ale szukałem i znalazłem tylko jedno miejsce:
Kod:
   // konfiguracja Timer0 (samplowanie)
   TCCR0A = (1<<WGM01);      // tryb CTC
   TIMSK0 = (1<<OCIE0B);      // zezwolenie na przerwanie CompareMatch

Tutaj w oryginalnym kodzie z książki tryb CTC był włączany w rejestrze TCCR0B i wtedy program nie wchodził nawet do pętli głównej. Zmieniłem na TCCR0A i działa tak jak opisałem powyżej, ale nie wiem co mam dalej z tym zrobić.
Bardzo proszę o pomoc ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 gru 2016, o 07:03 
Offline
Moderator
Avatar użytkownika

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

Kolka47 napisał(a):
Tutaj w oryginalnym kodzie z książki tryb CTC był włączany w rejestrze TCCR0B

Nigdy w życiu w książce tak nie było żeby CTC był włączany jak piszesz na rejestrze TCCR0B ... pewnie jak wielu początkujących mylisz pojęcia i wydaje ci się, zaznaczam wydaje ci się, że Timer który ma rejestry B i A to znaczy, że ustawianie bitów w jednym jest dla kanału A zaś w drugim dla B. Nie zaglądanie do noty w tym wypadku przez początkujących powoduje zatem, że męczą się niemiłosiernie przez długi czas .... i nic im nie działa

nie ma tak panie kochany żeby jakiś tam tryb CTC był włączany albo w rejestrze TCCR0B albo w TCCR0A

oba rejestry zawierają różne bity i dla przykładu preskaler dla obu kanałów A i B ustawia się tylko w rejestrze TCCR0B bo tam są bity CSXn .... jak mówię zajrzyj do noty nawet nie na opis tych rejestrów tylko obrazki na których widać te rejestry z nazwami bitów w nocie PDF

i wtedy ew zacznij przerabianie kodu pod m644p ....

a najlepiej to weź m32 i odpal bezpośrednio przykład z książki żeby zobaczyć co i jak - pamiętaj tylko o podłączeniu wszystkich sygnałów czyli nie tylko SPI ale też zdaje się jest tam używany sygnał CD

_________________
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: 16 gru 2016, o 07:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Kolka47 napisał(a):
W zestawie ATB mam ATmege 644p, więc możliwe, że powinienem w kodzie pozmieniać niektóre rejestry, ale szukałem i znalazłem tylko jedno miejsce: ...

Atmega 644 posiada dwa "ISR'y" od TIMER0 - COMPA i COMPB, Atmega16(32) pod który jest kod ma tylko ISR(TIMER0_COMP_vect) więc jest jeszcze coś.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 gru 2016, o 03:24 
Offline
Nowy

Dołączył(a): 14 wrz 2016
Posty: 19
Pomógł: 0

Program udało się uruchomić. Najpierw zmieniłem ISR na COMPB i wtedy muzyka grała, ale z efektem tak zwanego predatora, ale później jeszcze zmieniłem OCR0B na OCR0A w miejscu w kodzie gdzie obliczany jest preskaler timera0 w zależności od częstotliwości taktowania i muzyka ładnie gra.
Teraz miałbym jeszcze jedno pytanie, które jest związane z moim projektem i tym tematem, więc nie chcę zakładać nowego wątku. W projekcie chcę, aby przełączanie utworów było sterowanie z pilota na podczerwień. Ale z tego co widzę to pilot i pwm z którego idzie sygnał dźwiękowy korzystają z timera1. Domyślam się, że nie może tak być, więc czy da się przerobić kod pilota tak, aby działał na timerze2, a jeżeli nie to w jaki sposób to zrobić?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 gru 2016, o 07:06 
Offline
Moderator
Avatar użytkownika

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

Kolka47 napisał(a):
więc czy da się przerobić kod pilota tak, aby działał na timerze2,

Pewnie, że się da ... tylko trzeba wtedy nieco inaczej podejść w ogóle do dekodowania - czyli wybrać sobie jakieś wejście przerwań zewnętrznych INTx które będzie reagowało na impulsy zaś Timer2 użyć do analizy czasu ramek

_________________
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 gru 2016, o 11:52 
Offline
Nowy

Dołączył(a): 14 wrz 2016
Posty: 19
Pomógł: 0

Wydaje się dosyć skomplikowane.
Może w takim razie lepszym rozwiązaniem byłoby zamienić kod tak aby PWM działał na timerze2? Popatrzyłem do noty atmegi644p i próbowałem poustawiać odpowiednie bity według tego jak to jest ustawione w timerze1, ale niestety nie udało się. Program działa normalnie, czyta kartę wyświetla nazwę utworu i czas, tylko nie ma dźwięku, więc musiałem jeszcze coś przeoczyć. Wrzucam kod z fragmentami, w których robiłem poprawki:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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: 20 gru 2016, o 12:17 
Offline
Moderator
Avatar użytkownika

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

Kolka47 napisał(a):
Może w takim razie lepszym rozwiązaniem byłoby zamienić kod tak aby PWM działał na timerze2?

Łoooooj ;) panie strasznie chybiony pomysł - czyżbyś nie wiedział że do odtwarzania dźwięków potrzebny jest przede wszystkim 16-bitowy PWM ! ;) Pewnie na 8-bitowym też to jakoś będzie działać ale obawiam się tragicznego pogorszenia jakości - jest sens ? ;)

to już lepiej albo przerobić podczerwień na Timer2 albo dać procka który ma dwa Timery 16-bitowe w takiej samej obudowie czyli ATmega1284P ;)

_________________
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 gru 2016, o 12:28 
Offline
Nowy

Dołączył(a): 14 wrz 2016
Posty: 19
Pomógł: 0

Faktycznie nie wiedziałem, bo trochę goni mnie czas z tym projektem i jestem niestety zmuszony "skakać" po tematach, a jestem dosyć mocno początkujący :(
W takim razie chyba najlepiej będzie jak zaopatrzę się w nowego procka.
A tak z ciekawości, czy opisywał Pan gdzieś dokładnie taki sposób przerobienia podczerwieni, bo na pewno kiedyś do tego wrócę, a na forum nic nie znalazłem (albo źle szukałem)?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 gru 2016, o 15:33 
Offline
Moderator
Avatar użytkownika

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

nie - nie opisywałem przerabiania biblioteki IR na timer 8-bitowy

_________________
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: 5 sty 2017, o 13:44 
Offline
Nowy

Dołączył(a): 14 wrz 2016
Posty: 19
Pomógł: 0

Kupiłem tą ATmege1284P i program bez pilota działa, ale nie mogę skonfigurować timera3 żeby na nim działała podczerwień. Podkreśla mi błąd pod rejestrami TCCR3B i TIMSK3 ( Symbol 'TCCR3B' could not be resolved ) i pod każdym z bitów tego rejestru ( ICES3, ICIE3). Wszedłem w plik iom1284p.h w folderze avr, żeby zobaczyć czy definicje się zgadzają i wszystko jest ok, eclipse też mi pokazuje tego procka gdy klikam load from MCU, więc nie wiem o co chodzi.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sty 2017, o 13:52 
Offline
Moderator
Avatar użytkownika

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

To coś musisz źle robić .... bo mi normalnie w Eclipsie się kompiluje gdy używam rejestrów dla Timera3 - sprawdź czy ci się workspace nie sypnął. Co za problem założyć nawet na chwilę całkiem nowy workspace, szybko utworzyć nowy projekt z tym prockiem i sprawdzić - ja właśnie tak zrobiłem - 5 sekund klikania

_________________
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: 9 sty 2017, o 21:41 
Offline
Nowy

Dołączył(a): 14 wrz 2016
Posty: 19
Pomógł: 0

Faktycznie coś było z workspacem, bo w nowym rozpoznaje już rejestry. Niestety nie udaje mi się dodać do odtwarzacza obsługi tego pilota. Poniżej zamieszczam zawartość zmienionego pliku ir_decode.c.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

w ir_decode.h zmienione jest tylko #define TIMER3_PRESCALER 8.
Na próbę, czy będzie to działać zmieniłem klawisz do zmieniania utworów na przycisk vol up na pilocie i wygląda to tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Układ nie reaguje na wciskanie klawisza na pilocie.
Ponad to jest jeszcze jeden problem, który występuje tylko na tej nowej ATmedze1284P, a mianowicie utwory przełączają się same po różnym czasie (czasem po 2 sekundach a czasem po 20, ale najczęściej w pierwszych 5 sekundach utworu), a zegar który odmierza czas utworu działa jakoś dziwnie, bo czasem jedna sekunda trwa 5, a czasem w pół sekundy przelecą 3. Dzieje się tak tylko po podłączeniu głośników. Na ATmedze644p nie było takiego problemu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sty 2017, o 16:10 
Offline
Nowy

Dołączył(a): 14 wrz 2016
Posty: 19
Pomógł: 0

Już wiem dlaczego mi to nie działa. Bibliotekę przerobiłem dobrze, ale zapomniałem o jednej rzeczy. Przecież wejście ICP dla timera1 jest pod pinem PD6, a dla timera3 jest to pin PB5 i faktycznie pragram do pilota z książki działa wtedy na timerze3. Tylko chcąc zastosować to do mojego projektu nie mogę podłączyć się do ICP3, bo ten pin jest zajęty przez kartę SD (MOSI). Czy da się to w jakiś sposób obejść?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sty 2017, o 16:22 
Offline
Moderator
Avatar użytkownika

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

Pewnie - zamień Timer1 i Timer3 miejscami w kodzie ... czyli Odbiór podczerwieni zrób na Timer1 a Timer3 użyj zamiast obednego Timera1 - to chyba najprostsze co można zrobić

_________________
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: 11 sty 2017, o 16:29 
Offline
Nowy

Dołączył(a): 14 wrz 2016
Posty: 19
Pomógł: 0

Próbowałem tak robić i wtedy dzieje się tak, że plik się otwiera przez chwilkę widać tytuł utworu i napis "PLAY", ale później od razu przeskakuje na "NEXT" i dalej nic się nie dzieje. Domyślam się, że z tego samego powodu bo piny OC3A i OC3B to wyjścia PWM timera 3, które są na pinach PB6 i PB7 czyli MISO i SCK od karty SD.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sty 2017, o 16:36 
Offline
Moderator
Avatar użytkownika

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

hmm no to problem - to może skorzystaj z drugiego SPI ;) ... pewnie zapytasz - "jak to? przecież jest tylko jeden SPI w tym procku"

Nie prawda są aż trzy ;) dzięki temu, że ma DWA USART'y ... otóż można użyć interfejsów USART w trybie SPI ...

czyli przestawisz sobie obsługę karty na SPI

_________________
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: 11 sty 2017, o 17:55 
Offline
Nowy

Dołączył(a): 14 wrz 2016
Posty: 19
Pomógł: 0

Czyli wymagałoby to przerobienia całej biblioteki PetitFs? W jaki sposób można użyć USART w trybie SPI, bo poszukałem trochę na forum i na innych stronach, ale nie znalazłem niczego konkretnego i nie wiem za bardzo jak się do tego zabrać. Może istnieje jakiś inny sposób?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sty 2017, o 18:28 
Offline
Moderator
Avatar użytkownika

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

Cytuj:
Czyli wymagałoby to przerobienia całej biblioteki PetitFs?

Żart ;) ... Ta biblioteka jest PRZEŚLICZNIE napisana .... przepięknie ma oddzieloną warstwę abstrakcyjną od sprzętowej, dzięki czemu zmian trzeba byłoby dokonać niewiele i tylko zdaje się w jednym pliku w folderze biblioteki

Kolka47 napisał(a):
W jaki sposób można użyć USART w trybie SPI

Zajrzyj do byle pierwszej noty dowolnego AVR ale z tych nowszych typu m88 ale maszt też w swojej nocie m1284 . Przecież jest CAŁKIEM ODDZIELNY rozdział w nocie PDF "USART in SPI mode" Różnica sprowadza się do tego, że innych rejestrów używa się do konfiguracji i obsługi SPI ;) tzn rejestrów od modułu USART ...

_________________
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: 11 sty 2017, o 21:25 
Offline
Nowy

Dołączył(a): 14 wrz 2016
Posty: 19
Pomógł: 0

Po wczytywaniu się w notę katalogową udało mi się wykombinować coś takiego:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Najpierw definiowałem odpowiadające SPI dla USART0. W nocie nie ma pinu CS dla USART w trybie MSPI więc pozostawiłem taki jak był.
Teraz inicjalizacja USART'u:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

W rejestrze UCSR0C inicjalizowany jest tryb MSPI, a w rejestrze UCSR0B włączany jest "odbiornik i transmiter". Nie wiem teraz, który rejestr odpowiedzialny jest ustawienie zegara SCK taki jak w SPI był SPSR.
Czy taki sposób rozumowania jest poprawny, czy wszystko co tu napisałem jest błędne, bo jak nie to chyba temu nie podołam?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sty 2017, o 21:56 
Offline
Moderator
Avatar użytkownika

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

daj sobie spokój na razie z SPI2X

_________________
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 20 ] 

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