Cześć,
Razu pewnego, mając zlecenie w terenie gdzie długie dnie spędzałem w ciszy kupiłem głośnik BT z wbudowanym radiem na alledrogo za ok 200zł. Od początku wnerwiało mnie to, że włączając go głównym włącznikiem zasialnia zawsze uruchamiał się w trybie BT na 2/3 głośności (czytaj, bardzo głośno) a do tego jeszcze takim wrednym, krzykliwym "titu titu" witał całe otoczenie na dzień dobry. Teraz patrząc na te głośnik, widzę również identyczne pod inną nazwą ale z dokładnie takim samym problemem:
Już raz się do tego przymierzałem ale nie specjalnie wpadłem na pomysł jak go zmodyfikować (wyciszyć chociażby cały start (dźwięk powitania + informację o "bluetooth mode"). Popatrzyłem na końcówki mocy (małe cyfrowe wzmacniacze MIX2018a)
Bałem się uszkodzić główny procesor, który ma w sobie zintegrowane wszelkie układy/ systemy (odbiornik BT, radio FM, obsługę USB/ kart pamięci, interface...) wiec wnikliwie analizowałem malutką chińską płyteczkę zrobioną przez jeszcze mniejsze malutkie chińskie rączki. Okazało się, że linia SD jest podciągana do VCC rezystorem 100k a aktywacja końcówek obywa się poprzez ściągniecie tej linii do GND tranzystorem. Baza tego tranzystora była połączona z głównym CPU rezystorem 10k oraz ściągnięta do GND również 100k. Rozwiązanie polegało na wymuszeniu stanu niskiego na bazie tranzystora na wymagany czas rozruchu urządzenia - podłączyłem jeden z pinów mojego małego procka do bazy tego tranzystora poprzez pierwszy lepszy rezystor (330 w zasadzie nie potrzebnie ale akurat leżał na biurku) a program ustawia ten pin jako wyjście z domyślną wartością PORTx=0 (ściągam do masy a główny CPU próbując włączyć końcówki ma za obciążenie rezystor 10k więc nic mu się nie powinno stać bo płynie tam jedynie 330uA).
OK, udało się wyciszyć cholernie głośne i tandetne powitanie, zostało wolnych pinów wiec czas zmniejszyć głośność z domyślnych 20/30 na 2 (wystarczy by w warsztacie spokojnie słuchać muzyki - na zewnątrz to za cicho ale praca w terenie się skończyła a głośnik używam na co dzień do radia). No to kolejne 2 piny i na tej samej zasadzie, manipulując jedynie rejestrem kierunku DDRx wygenerowałem interesującą mnie ilość impulsów. Trochę dziwne przebiegi obserwowałem (również na fabrycznym enkoderze - były 3 poziomy napięć: GND, 1/2VCC, VCC). No ale działa.
Kolejna modyfikacja to przełączenie trybu BT na radio FM - znów prosta sprawa - zwieram na krótką chwilę linię podłączoną do przycisku MODE kolejnym pinem procesora.
Robiąc to na ATtiny10 i chcąc wykorzystać wszystkie w/w funkcje trzeba pozbyć się pinu RESET (zmienić fusebit wyłączający tą funkcję) wiec bez adaptera HV blokujemy procesor przed dalszą modyfikacją. Program krótki napisałem, wgrałem, przetestowałem jeszcze z normalnym resetem (ale bez podłączonego fizycznie enkodera - panel był odpięty) no i wszystko działało OK. Złożyłem całość a tu zonk. Nie działa. W sumie nie jestem pewien dlaczego ale skoro miałem pod ręką również wersję na ATtiny13 to znudzony na szybko przełożyłem płyteczki:
I ponownie - test bez panelu OK, skręciłem całość, posprzątałem i znów zonk - Ostatecznie mam wrażenie, że enkoder musi w losowych pozycjach wymuszać zwarcie kanału A/B do masy choć usilnie chciałem zobaczyć to na oscyloskopie bez skutku. Sprawdziłem kolejne 10 razy było zawsze OK więc zostało na pająku. Nieco większy procesor ma jeszcze jedną zaletę - można dopisać obsługę pilota IR i wyciszać również durne komunikaty przy jego obsłudze.
Może komuś się przyda pomysł lub całość
PS. Zastanawiam się czy można by to zrobić lepiej, zapewne tak. Np wykorzystać wyłącznie 2 piny procesora (ew 3). Wyciszenie oraz wpiąć się do odbiornika podczerwieni (nie wiem jaki typ wyjścia posiada, jeśli nie jest to otwarty dren to trzeba by wykorzystać kolejny pin procka by z robić z niego most). Sprzętowe wyciszenie jest konieczne ponieważ przez czas startu sprzęt nie reaguje na żadne przyciski/ na pilota. Możliwe, że wyszło by to elegancko i lepiej ale zdecydowanie więcej pracy wymaga - trzeba sprawdzić jaki jest protokół (ok, to może być chwila, na arduino są gotowce IR decode) no ale obsługa w C nadajnika sama się nie napisze
Razu pewnego, mając zlecenie w terenie gdzie długie dnie spędzałem w ciszy kupiłem głośnik BT z wbudowanym radiem na alledrogo za ok 200zł. Od początku wnerwiało mnie to, że włączając go głównym włącznikiem zasialnia zawsze uruchamiał się w trybie BT na 2/3 głośności (czytaj, bardzo głośno) a do tego jeszcze takim wrednym, krzykliwym "titu titu" witał całe otoczenie na dzień dobry. Teraz patrząc na te głośnik, widzę również identyczne pod inną nazwą ale z dokładnie takim samym problemem:
Już raz się do tego przymierzałem ale nie specjalnie wpadłem na pomysł jak go zmodyfikować (wyciszyć chociażby cały start (dźwięk powitania + informację o "bluetooth mode"). Popatrzyłem na końcówki mocy (małe cyfrowe wzmacniacze MIX2018a)
Bałem się uszkodzić główny procesor, który ma w sobie zintegrowane wszelkie układy/ systemy (odbiornik BT, radio FM, obsługę USB/ kart pamięci, interface...) wiec wnikliwie analizowałem malutką chińską płyteczkę zrobioną przez jeszcze mniejsze malutkie chińskie rączki. Okazało się, że linia SD jest podciągana do VCC rezystorem 100k a aktywacja końcówek obywa się poprzez ściągniecie tej linii do GND tranzystorem. Baza tego tranzystora była połączona z głównym CPU rezystorem 10k oraz ściągnięta do GND również 100k. Rozwiązanie polegało na wymuszeniu stanu niskiego na bazie tranzystora na wymagany czas rozruchu urządzenia - podłączyłem jeden z pinów mojego małego procka do bazy tego tranzystora poprzez pierwszy lepszy rezystor (330 w zasadzie nie potrzebnie ale akurat leżał na biurku) a program ustawia ten pin jako wyjście z domyślną wartością PORTx=0 (ściągam do masy a główny CPU próbując włączyć końcówki ma za obciążenie rezystor 10k więc nic mu się nie powinno stać bo płynie tam jedynie 330uA).
OK, udało się wyciszyć cholernie głośne i tandetne powitanie, zostało wolnych pinów wiec czas zmniejszyć głośność z domyślnych 20/30 na 2 (wystarczy by w warsztacie spokojnie słuchać muzyki - na zewnątrz to za cicho ale praca w terenie się skończyła a głośnik używam na co dzień do radia). No to kolejne 2 piny i na tej samej zasadzie, manipulując jedynie rejestrem kierunku DDRx wygenerowałem interesującą mnie ilość impulsów. Trochę dziwne przebiegi obserwowałem (również na fabrycznym enkoderze - były 3 poziomy napięć: GND, 1/2VCC, VCC). No ale działa.
Kolejna modyfikacja to przełączenie trybu BT na radio FM - znów prosta sprawa - zwieram na krótką chwilę linię podłączoną do przycisku MODE kolejnym pinem procesora.
Robiąc to na ATtiny10 i chcąc wykorzystać wszystkie w/w funkcje trzeba pozbyć się pinu RESET (zmienić fusebit wyłączający tą funkcję) wiec bez adaptera HV blokujemy procesor przed dalszą modyfikacją. Program krótki napisałem, wgrałem, przetestowałem jeszcze z normalnym resetem (ale bez podłączonego fizycznie enkodera - panel był odpięty) no i wszystko działało OK. Złożyłem całość a tu zonk. Nie działa. W sumie nie jestem pewien dlaczego ale skoro miałem pod ręką również wersję na ATtiny13 to znudzony na szybko przełożyłem płyteczki:
I ponownie - test bez panelu OK, skręciłem całość, posprzątałem i znów zonk - Ostatecznie mam wrażenie, że enkoder musi w losowych pozycjach wymuszać zwarcie kanału A/B do masy choć usilnie chciałem zobaczyć to na oscyloskopie bez skutku. Sprawdziłem kolejne 10 razy było zawsze OK więc zostało na pająku. Nieco większy procesor ma jeszcze jedną zaletę - można dopisać obsługę pilota IR i wyciszać również durne komunikaty przy jego obsłudze.
Kod: C / C++
Może komuś się przyda pomysł lub całość
PS. Zastanawiam się czy można by to zrobić lepiej, zapewne tak. Np wykorzystać wyłącznie 2 piny procesora (ew 3). Wyciszenie oraz wpiąć się do odbiornika podczerwieni (nie wiem jaki typ wyjścia posiada, jeśli nie jest to otwarty dren to trzeba by wykorzystać kolejny pin procka by z robić z niego most). Sprzętowe wyciszenie jest konieczne ponieważ przez czas startu sprzęt nie reaguje na żadne przyciski/ na pilota. Możliwe, że wyszło by to elegancko i lepiej ale zdecydowanie więcej pracy wymaga - trzeba sprawdzić jaki jest protokół (ok, to może być chwila, na arduino są gotowce IR decode) no ale obsługa w C nadajnika sama się nie napisze
Fajne? Ranking DIY