Cześć,
składam projekt na uczelnię, który ma w wymaganiach użyciu kilku "rzeczy" - RTC, diody itp. Jednym z wymagań było sterowanie natężeniem power leda. Znalazłem moduł nazywający się FemtoBuck, który ułatwia sterowanie takimi ledami, dlatego stwierdziłem - czemu nie, wygląda w porządku, upraszcza cały układ, chętnie zobaczę coś nowego. Na stykówce powoli doprowadzałem do działania kolejne rzeczy, najpierw zwykłe diody, potem termometr, potem przyciski, potem wziąłem się za tego power leda - trochę posiedziałem, zadziałał, zabrałem się dalej za wyświetlacz, więcej przycisków oraz RTC, ale power leda odłączyłem - przecież działa, po co ma mi świecić. Być może to był błąd, bo gdy myślałem, że już mam wszystko i pozostało się tylko upewnić, to okazało się że power led zaczął mrugać (nie mogę powiedzieć, że nieregularnie, ale chociażby świeci w 4 fazach, a nie w 2 - słabo, średnio, słabiej, mocno, żadna z nich nie trwa tyle samo - mam nadzieję że w miarę rozumiecie). I od tego momentu nie udało mi się nic z tym zrobić.
Datasheet mówi, że do sterowania natężeniem oświetlenia mogę korzystać z fali o częstotliwości najlepiej nieprzekraczającej 500Hz. W swojej Atmedze odblokowałem to wewnętrzne dzielenie przez 8, czyli jak rozumiem jest taktowana zegarem 8MHz. Dodatkowo, FemtoBuck domyślnie daje maksymalny prąd 330mA, chyba że się zlutuje zworkę, to może dawać 660mA - nie robiłem tego, więc z datasheeta wnioskuję, że maksymalne natężenie oświetlenia otrzymam przy wypełnieniu 50% i będę mógł to natężenie zmniejszać, odpowiednio regulując wypełnienie. Cały sterownik musi być zasilany napięciem przynajmniej 7V.
Niestety za nic nie mogę namówić tego modułu do współpracy. Co jest dla mnie najdziwniejsze to fakt, że wcześniej było ok, a teraz już nie. Oczywiście od momentu, gdy na początku mi się udało, nieco się zmieniło. Doszedł wyświetlacz na sterowniku SSD1306, z którym komunikuję się przez SPI oraz moduł RTC DS1307 z komunikacją przez I2C oraz 3 przyciski. Zmieniłem zegar z 1MHz na 8MHz (poprzez ustawienie odpowiedniego fuse bitu) oraz grzebałem nieco w ustawieniach kompilatora i linkera, żeby możliwie zmniejszyć plik .hex.
Próbowałem już: ustawiania różnych częstotliwości z zakresu ~5Hz-1MHz, wypięcia wszystkiego z płytki i włożenia na nowo, zbudowania .hexa z wcześniejszymi ustawieniami linkera i kompilatora, wywalenia z kodu programu obsługi wyświetlacza, RTC, potem również wywalenie z kodu wszystkiego oprócz generowania fali, także fizyczne wypięcie wszystkiego niezwiązanego z tym sterownikiem, sprawdzanie na timerze0 i timerze1.
W tym momencie, przy moim stanie wiedzy już chyba nie wymyślę, co może być nie tak. Zamieszczam wycinki kodu odpowiedzialne za sterowanie LEDem:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
W razie czego dorzucam też cały kod programu:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Zamieszczam też schemat według którego wszystko składam:

Z taką uwagą, że na stykówce już sobie darowałem mostek prostowniczy oraz linię SDA podciągnąłem z zewnątrz rezystorem 10k, bo o ile faktycznie producent zadbał o to, że na module RTC są rezystory podciągające, to żeby z nich skorzystać trzeba polutować zworki - a komuś mało wprawionemu w lutowaniu udało się zlutować tylko jedną. W każdym razie, akurat to działa.
Niestety nie posiadam oscyloskopu, natomiast pisząc tego posta stwierdziłem, że może chociaż miernikiem sprawdzę co się dzieje na wyjściu timera. Miernik pokazuje wahania pomiędzy 2,1V a 3,1V. Nie wiem jak wyglądają wskazania gdy mamy do czynienia z falą, czy jest to jakoś uśredniane, czy jest to maksimum, ale jeśli dobrze zrozumiałem, to dla tego sterownika (FemtoBuck) minimalne napięcie, które jest uważane za "1" to 2,5V - czyli może tu jest pies pogrzebany. Pytanie jednak jak to w takim naprawić, chyba że widzicie błąd gdzie indziej.