logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Prosty generator PWM v2 (ATtiny24)

RomanWorkshop 11 Lut 2025 19:33 4050 13

TL;DR

  • Generator PWM na ATtiny24/44/84 z wyjściem prostokątnym, regulacją wypełnienia 0–100% i prezentacją parametrów na OLED SSD1306 I2C.
  • Program w asemblerze wykorzystuje własne procedury I2C i obsługę OLED; częstotliwość przełącza się przyciskami S1/S2, a długie naciśnięcie zmienia wartość ciągle.
  • Dostępne są trzy częstotliwości: 1.25, 10 i 80 kHz, a po starcie układ ustawia 10 kHz i 50% wypełnienia.
  • Zworka J1 (FLIP) obraca obraz OLED o 180°, a brak wykrycia wyświetlacza nie blokuje pracy generatora.
  • Układ nie ma zabezpieczenia przed odwrotną polaryzacją Vcc, a użycie wewnętrznego RC 8 MHz pogarsza dokładność częstotliwości i przebiegi I2C.
Wygenerowane przez model językowy.
REKLAMA
📢 Słuchaj (AI):
  • Prosty generator PWM z wyświetlaczem OLED na płytce.
    Prosty generator PWM (Pulse-Width Modulation) zbudowany na mikrokontrolerze ATtiny24/44/84, zasilany stabilizowanym napięciem Vcc=2.7-5.5V (2.4-5.5V jeśli użyjemy mikrokontrolera w wersji "A"/"V"). Na jego wyjściu uzyskuje się sygnał prostokątny o wybranej, stałej częstotliwości 1.25/10/80 kHz oraz wypełnieniu regulowanym w zakresie 0-100%, z krokiem co 1%. Parametry sygnału wyjściowego są prezentowane na monochromatycznym wyświetlaczu OLED (sterownik SSD1306, magistrala I2C), o rozdzielczości 128x32/128x64 pikseli i adresie $78 ($3C)/$7A ($3D). Program sterujący napisałem w asemblerze i jest on identyczny dla każdego z wymienionych mikrokontrolerów.

    Niedawno napisałem w asemblerze własne procedury do obsługi magistrali I2C i wyświetlacza OLED. Szukałem sposobu, aby je wykorzystać w jakimś praktycznym urządzeniu i tak powstał pomysł zrobienia tego generatora. Użyłem w nim mikrokontrolera ATtiny44 w obudowie SO14, bo akurat mam ich bardzo dużo z demontażu. Jest on drugą wersją zrobionego przeze mnie kilka lat temu prostego generatora PWM.

    Dwa ekrany OLED pokazujące parametry PWM: jeden normalnie, drugi obrócony o 180 stopni.
    Po włączeniu zasilania na wyjściu generatora (złącze CON2), uzyskuje się sygnał prostokątny o częstotliwości 10 kHz, wypełnieniu 50% i poziomie zależnym od wartości napięcia zasilania Vcc (rysunek 1). Jeśli podczas włączania zworka J1 (FLIP) będzie zwarta (ON), to wyświetlany obraz zostanie obrócony o 180 stopni (rysunek 2). Jeśli po włączeniu zasilania wyświetlacz OLED nie zostanie wykryty, to generator będzie działał normalnie bez niego. Wyświetlacz 128x64 jest traktowany jako 128x32, dlatego wyświetlany na nim obraz ma 1-liniowe poziome przerwy (co druga pozioma linia jest pusta, co powoduje rozciągnięcie obrazu w pionie).

    Aby zmniejszyć/zwiększyć wypełnienie sygnału o 1%, należy krótko (poniżej 250ms) nacisnąć przycisk (mikrostyk) S1 (DUTY-)/S2 (DUTY+). Naciśnięcie i dłuższe przytrzymanie wciśniętego przycisku S1/S2, spowoduje ciągłe zmniejszanie/zwiększanie wartości wypełnienia z szybkością ok. 4%/s, aż do osiągnięcia wartości granicznej, czyli odpowiednio 0%/100%. Ustawienie wypełnienia o wartości 0%/100%, wymusi ciągły niski/wysoki stan logiczny (GND/Vcc) na wyjściu generatora.

    Aby zmienić częstotliwość sygnału, należy krótko (poniżej 1s) nacisnąć jednocześnie obydwa przyciski S1 i S2. Wtedy częstotliwość zmieni wartość na następną w kolejności: 10/80/1.25 kHz i tak w kółko. Naciśnięcie i dłuższe przytrzymanie wciśniętych jednocześnie przycisków S1 i S2, spowoduje ciągłe zmienianie wartości częstotliwości z szybkością ok. 1x/s, aż do puszczenia przycisków. Po każdej zmianie częstotliwości, początkowa wartość wypełnienia sygnału wynosi zawsze 50% (niezależnie od wcześniejszego ustawienia).

    Rezonator kwarcowy X1 taktuje pracę mikrokontrolera, dzięki czemu na wyjściu uzyskuje się sygnał o dość dokładnej/stabilnej częstotliwości, a przebiegi czasowe sygnałów OSCL/OSDA są precyzyjne/symetryczne względem siebie. Istnieje też możliwość taktowania mikrokontrolera jego wewnętrznym oscylatorem RC, o nominalnej częstotliwości 8 MHz. Zaletą tego rozwiązania jest to, że nie trzeba wtedy montować rezonatora X1 i kondensatorów C3/C4, ale dużą wadą jest bardzo niedokładna/niestabilna częstotliwość sygnału wyjściowego oraz pogorszona jakość przebiegów czasowych sygnałów OSCL/OSDA. Kondensatory C1 i C2 filtrują napięcie zasilania. Rezystor R2 ogranicza prąd pobierany bezpośrednio z pinu PA7 mikrokontrolera - zapobiega jego uszkodzeniu w przypadku zwarcia wyjścia CON2.

    Przy programowaniu, należy pamiętać o odpowiednim ustawieniu fuse/lock bitów:
    1. Gdy mikrokontroler będzie taktowany rezonatorem kwarcowym X1:
    FL (Fuse Low): $FF, FH (Fuse High): $DF, FE (Fuse Extended): $FF, LB (Lock Bits): $FF.
    2. Gdy mikrokontroler będzie taktowany wewnętrznym oscylatorem RC:
    FL (Fuse Low): $E2, FH (Fuse High): $DF, FE (Fuse Extended): $FF, LB (Lock Bits): $FF.

    Generator można zasilać napięciem stałym Vcc=2.7(2.4)-5.5V z zasilacza lub z baterii/akumulatorów (np. z jednego ogniwa typu 18650). Nie jest on w żaden sposób zabezpieczony przed odwrotnym podłączeniem napięcia zasilania Vcc. Pomylenie polaryzacji tego napięcia spowoduje uszkodzenie mikrokontrolera. Pobór prądu bez wyświetlacza OLED przy napięciu Vcc=2.7/5V, wynosi maksymalnie 2.5/6.5mA (sygnał 80kHz/99%, wyjście generatora nie obciążone). Pobór prądu z wyświetlaczem OLED 128x64 pikseli przy napięciu Vcc=5V, wynosi maksymalnie 8mA. Generator zmontowałem na płytce jednostronnej o wymiarach 45x45mm, wykonanej metodą transferu chemicznego. Płytka jest przystosowana do użycia wyświetlacza o wymiarach 38x12mm (128x32) lub 28x28mm (128x64), który ma sygnały rozmieszczone w kolejności: GND, VCC, SCL, SDA. Rezystory podciągające linie OSCL/OSDA dla OLED nie zostały umieszczone na płytce generatora, bo zawiera je płytka modułu wyświetlacza. Minimalne napięcie zasilania potrzebne do działania wyświetlacza OLED, wynosi ok. Vcc=1.8V (niska jasność).

    Płytka drukowana z elementami elektronicznymi dla generatora PWM. Płytka drukowana z mikrokontrolerem ATtiny na miedzianym podkładzie Schemat prostego generatora PWM z mikrokontrolerem ATtiny.

    Dołączone archiwum zawiera: schemat w Eagle, płytkę w DipTrace, źródło, wsad oraz dokumentację w PDF. Strona projektu: Link.

    PWMtin...7z (167.6 kB)Musisz być zalogowany, aby pobrać ten załącznik.

    Fajne? Ranking DIY
    Pomogłem? Kup mi kawę.
    O autorze
    RomanWorkshop
    Poziom 14  
    Offline 
    RomanWorkshop napisał 218 postów o ocenie 416, pomógł 2 razy. Jest z nami od 2013 roku.
  • REKLAMA
  • #2 21435666
    androot
    VIP Zasłużony dla elektroda
    Posty: 1801
    Pomógł: 54
    Ocena: 635
    Do czego służy generator o 3 częstotliwościach? Do czegoś na pewno, skoro to jego druga wersja...
  • REKLAMA
  • #3 21435861
    minus3db
    Poziom 13  
    Posty: 98
    Ocena: 102
    Cytat:
    Nie jest on w żaden sposób zabezpieczony przed odwrotnym podłączeniem napięcia zasilania Vcc. Pomylenie polaryzacji tego napięcia spowoduje uszkodzenie mikrokontrolera

    To może dolutować choć "jedną nóżką na plusie" diodę Schottky'ego? Spadek napięcia niewielki, a cały układ - oszczędzony. Albo przeciąć którąś ze ścieżek zasilających i wlutować tam elegancko powierzchniowo taką diodę.
  • #4 21436079
    Karol966
    Poziom 31  
    Posty: 2038
    Pomógł: 83
    Ocena: 645
    >>21435861 Przy tak niskim zasilaniu szkoda tracić te 0.3 - 0.5V wiec lepiej dać P-MOS na zasilaniu, spadku napięcia brak. Jak nie wiadomo jak to zrobić to wystarczy wpisać w google: "reverse polarity protection mosfet" i popatrzeć w grafikę, dla tego napięcia wystarczy tylko 1 element, ważne aby był niskonapięciowy/ logic-level Do bardziej łakomych na prąd układów używam np AO3413. Hurtem kosztuje grosze, w detalu też tragedii nie robi.

    Oczywiście pochwalam własną budowę a te 3 stałe częstotliwości sugerują konkretne przeznaczenie więc da się zrozumieć budowę takiego układu bo w innym przypadku, koszt gotowca to kilkanaście złotych (no z przesyłką max 29zł)
    Generator sygnału PWM z wyświetlaczem LCD i przyciskami kontrolnymi

    Zawsze istnieje wytłumaczenie, że to w ramach treningu a to tylko się chwali :)
  • #5 21436191
    RomanWorkshop
    Poziom 14  
    Posty: 218
    Pomógł: 2
    Ocena: 416
    >>21435666
    Służy do tego samego, co generator z milionem częstotliwości - jego przydatność zależy tylko od tego, których konkretnie częstotliwości potrzebuje użytkownik. Jeśli ktoś akurat potrzebuje sygnału PWM o częstotliwości 1.25/10/80 kHz, to ten generator jest dla niego idealny ;) Sygnał wyjściowy ma całkiem dobre parametry. Oscyloskop pokazuje strome zbocza, nominalną wartość wypełnienia z dokładnością do 2 miejsc po przecinku (zmienia się trzecia cyfra) oraz równie dokładną częstotliwość, która oczywiście zależy od użytego rezonatora kwarcowego.

    >>21435861
    Jak najbardziej można by użyć diody zabezpieczającej, ale zrezygnowałem z niej, aby właśnie uniknąć spadku napięcia o wartości ponad 200mV, który może mieć znaczenie zwłaszcza przy niskich napięciach zasilania. W poprzedniej wersji, jako zabezpieczenia użyłem niskonapięciowego tranzystora MOSFET - teraz go pominąłem, aby uniknąć niepotrzebnego komplikowania układu. Założyłem, że nie wolno się pomylić - w końcu to tylko dwa przewody, co może pójść nie tak? ;)

    >>21436079
    Generator powstał głównie ze względów edukacyjnych, chęci praktycznego wykorzystania opracowanych wcześniej procedur oraz zagospodarowania zalegających w dużej ilości mikrokontrolerów. Z dołączonego kodu źródłowego można sporo "wynieść" - oczywiście zrobią to tylko programiści znający asembler.
    Pomogłem? Kup mi kawę.
  • #6 21436270
    efi222
    Poziom 22  
    Posty: 764
    Pomógł: 12
    Ocena: 1201
    Chylę czoła przed piszącymi w assemblerze...
    Oglądam Twoje projekty od jakiegoś czasu. Płytki wyglądają na robione termotransferem. I tutaj pytanie "kosmetyczne". Dlaczego nie nadrukujesz opisów na PCB od strony elementów? Wygląd urządzeń na pewno by zyskał.
  • #7 21436769
    RomanWorkshop
    Poziom 14  
    Posty: 218
    Pomógł: 2
    Ocena: 416
    >>21436270

    Cytat:
    Chylę czoła przed piszącymi w assemblerze...

    To chyba nie często się zdarza, bo takich nie ma zbyt wielu ;)

    Cytat:
    Płytki wyglądają na robione termotransferem.

    Nie używam termotransferu, który pewnie wychodziłby ładniej, choć to zależy też od jakości tonera. Stosuję transfer chemiczny (na zimno) bez użycia żelazka, które ostatnio trzymałem w rękach gdzieś w czasach podstawówki, gdy próbowałem prasować ubrania.

    Cytat:
    Dlaczego nie nadrukujesz opisów na PCB od strony elementów?

    Ponieważ robię jeden prototyp płytki dla siebie i ładne oznaczenia nie mają dla mnie żadnego znaczenia, a czas poświęcony na ich wykonanie już tak. Szybciej i łatwiej jest napisać niezbędne oznaczenia pisakiem, niż bawić się w dodatkowy transfer, który i tak nic nie zmieni w działaniu urządzenia.
    Pomogłem? Kup mi kawę.
  • REKLAMA
  • #8 21437638
    oscil1
    Poziom 24  
    Posty: 639
    Pomógł: 50
    Ocena: 176
    Dlaczego nie dałeś jakiegoś voltage followera na wyjściach?

    RomanWorkshop napisał:
    Po każdej zmianie częstotliwości, początkowa wartość wypełnienia sygnału wynosi zawsze 50% (niezależnie od wcześniejszego ustawienia).


    Czyli glitch. To cecha programów w asemblerze - autorom nie chce się po walce z programem ich poprawiać, bo wtedy jest duża szansa na nowe
    RomanWorkshop napisał:
    Nie jest on w żaden sposób zabezpieczony przed odwrotnym podłączeniem napięcia zasilania Vcc. Pomylenie polaryzacji tego napięcia spowoduje uszkodzenie mikrokontrolera.

    glitche.

    RomanWorkshop napisał:
    Nie jest on w żaden sposób zabezpieczony przed odwrotnym podłączeniem napięcia zasilania Vcc. Pomylenie polaryzacji tego napięcia spowoduje uszkodzenie mikrokontrolera.

    Po co prezentować niedorobiony projekt?
  • #9 21437830
    Konto nie istnieje
    Poziom 1  
  • #10 21438108
    RomanWorkshop
    Poziom 14  
    Posty: 218
    Pomógł: 2
    Ocena: 416
    >>21437638

    Cytat:
    Dlaczego nie dałeś jakiegoś voltage followera na wyjściach?

    Bufor wyjściowy nie jest mi potrzebny.

    Cytat:
    Czyli glitch. To cecha programów w asemblerze - autorom nie chce się po walce z programem ich poprawiać, bo wtedy jest duża szansa na nowe

    Ciekawa teoria, ale całkowicie nie trafiona. To nie żaden glitch wymagający poprawki tylko takie było moje założenie, żeby po zmianie częstotliwości znaleźć się na środku zakresu regulacji poziomu wypełnienia. Aby po zmianie częstotliwości początkowa wartość wypełnienia była inna lub pozostawała nie zmieniona, wystarczy zmodyfikować lub usunąć jedną 2-bajtową instrukcję (zachęcam do analizy bardzo krótkiego i prostego kodu programu).
    Pisanie programów w asemblerze to walka? Dla mnie to sama przyjemność - tworzenie nowych procedur, ich dopasowywanie do całości kodu, czy optymalizacja choćby o 2 bajty daje ogromną satysfakcję. W asemblerze ma się pełną kontrolę i można zmieniać wszystko, prawie jak w Matrixie ;)

    Cytat:
    glitche.

    Zabezpieczenie przed odwrotną polaryzacją również nie jest mi potrzebne.

    Cytat:
    Po co prezentować niedorobiony projekt?

    Dla mnie ten projekt jest w pełni działający i na ten moment ukończony, co nie znaczy że każdemu będą się podobać przyjęte przeze mnie rozwiązania. Dlatego projekt jest udostępniony ze źródłami i każdy, kto zobaczy w nim coś przydatnego może go zmienić pod swoje potrzeby.

    Jeszcze apropo tych ostatnio popularnych glitchy - sygnał PWM jest generowany całkowicie sprzętowo przez timer/licznik TC0, który pracuje w trybie "Fast PWM". W tym trybie jest aktywne podwójne buforowanie rejestrów OCR0x, które dopuszcza zmianę ich wartości tylko w momencie osiągnięcia przez licznik górnej/dolnej (top/bottom) wartości zliczania. Zapobiega to pojawianiu się na wyjściu niesymetrycznych impulsów PWM o nieparzystej długości, dzięki czemu sygnał wyjściowy jest wolny od zakłóceń (glitchy). Dziękuję za uwagę.

    >>21437830

    Cytat:
    A możesz pochwalić się pomiarem oscyloskopem ? Jaki jest rzeczywisty sygnał na zadane częstotliwości i pwm.

    Jak tylko będę miał czas i w dalszym ciągu będę posiadał udostępniony mi oscyloskop (Siglent SDS824X HD - fajny sprzęt, ale nie mam żadnego porównania, np. z tańszymi modelami), to jak najbardziej wykonam pomiary i zrzuty ekranu.
    Pomogłem? Kup mi kawę.
  • #11 21442678
    RomanWorkshop
    Poziom 14  
    Posty: 218
    Pomógł: 2
    Ocena: 416
    >>21437830

    Wykonałem pomiary sygnału wyjściowego z generatora zasilanego napięciem Vcc=5.0V, używając oscyloskopu Siglent SDS824X HD (sonda 1x, próbkowanie 2GSa/s). Na każdej częstotliwości wyjściowej i przy ustawieniu dowolnego poziomu wypełnienia z zakresu 1-99%, sygnał wyjściowy miał jednakowy poziom ok. 5.04V, nominalną wartość wypełnienia/częstotliwości z dokładnością do 2 miejsc po przecinku oraz zbliżone czasy narastania/opadania zboczy, wynoszące ok. 90ns.

    Wykres sygnału prostokątnego 5V na oscyloskopie Siglent SDS824X HD Ekran oscyloskopu pokazujący prostokątny sygnał z wartościami amplitudy 5,03958 V i częstotliwości 10,001214 kHz. Ekran oscyloskopu pokazujący przebieg prostokątny o amplitudzie 5.04167V, częstotliwości 80.00964 kHz, z czasami narastania i opadania zboczy około 90 ns.
    Pomogłem? Kup mi kawę.
  • REKLAMA
  • #12 21446912
    Sam Sung
    Poziom 33  
    Posty: 2014
    Pomógł: 227
    Ocena: 583
    Fajnie, że podzieliłeś się projektem.

    Czy próbowałeś zbliżyć się do maksymalnej możliwej szybkości komunikacji z wyświetlaczem OLED, czyli 400 kHz?

    Jakiego asemblera używasz? Czy tam nie da się definiować makr? Dzięki nim możnaby poprawić czytelność, eliminując wstawki kodu maszynowego (mam na myśli .dw $C000,0 zamiast rjmp + nop) i powtarzające się sekwencje z #if CLK==4. A gdzie jest zdefiniowane WaitU5m10?

    Wydaje mi się, że to, co robi kod oznaczony jako "Wysłanie warunku START/Repeated START i adresu OLED na magistralę I2C" to jest po prostu szukanie wyświetlacza na magistrali I²C raz pod adresem 78h, potem 7Ah. Może się czepiam, ale nazywanie tego "repeated START" jest naciągane (nie doszło do żadnej transmisji na adresie 78h).

    Dodano po 1 [godziny] 4 [minuty]:

    Linią SCL sterujesz podobnie jak SDA - czyli silne zero, słaba jedynka. Czy możnaby zamiast tego ustawić SCL jako wyjście i przełączać PORTA? Czy to nie poprawiłoby stromości narastającego zbocza zegara?
  • #13 21447109
    RomanWorkshop
    Poziom 14  
    Posty: 218
    Pomógł: 2
    Ocena: 416
    >>21446912

    Cytat:
    Czy próbowałeś zbliżyć się do maksymalnej możliwej szybkości komunikacji z wyświetlaczem OLED, czyli 400 kHz?

    Nie, ponieważ moje procedury działają tylko na 100 kHz. Żeby zmienić ich częstotliwość działania, trzeba by je napisać od nowa z uwzględnieniem krótszych opóźnień. Wtedy na pewno nie zadziałają przy niższych częstotliwościach pracy mikrokontrolera (4-6 MHz, 8 MHz też jest wątpliwe), ze względu na czas wykonywania instrukcji.

    Cytat:
    Jakiego asemblera używasz? Czy tam nie da się definiować makr?

    Aktualnie używam "AVR macro assembler 2.2.7". Oczywiście da się definiować makra, tylko one nic w moim kodzie już nie skrócą. Zapisu ".dw $C000,0" użyłem, aby zmieścić 2 instrukcje w jednej linii kodu. Za pomocą instrukcji #if / #else / #endif kod programu jest kompilowany warunkowo - nie da się ich umieścić w makrach i w sumie nie zmieniłoby to rozmiaru programu, a na pewno pogorszyło czytelność kodu. Etykieta "WaitU5m10" znajduje się w 415 linii kodu źródłowego.

    Cytat:
    Może się czepiam, ale nazywanie tego "repeated START" jest naciągane (nie doszło do żadnej transmisji na adresie 78h).

    Kod spod etykiety "OLEDsta" jest używany dwukrotnie w procedurze "OLEDclr" czyszczącej ekran OLED oraz "OLEDwr0" wyświetlającej ciąg ASCIIZ z pamięci. Wtedy jest wysyłany drugi warunek START, podczas już trwającej transmisji do wyświetlacza OLED (aby przełączyć go na odbiór ciągu danych graficznych). Tak więc jest wysyłany powtórzony warunek START.

    Cytat:
    Linią SCL sterujesz podobnie jak SDA - czyli silne zero, słaba jedynka. Czy możnaby zamiast tego ustawić SCL jako wyjście i przełączać PORTA? Czy to nie poprawiłoby stromości narastającego zbocza zegara?

    Nie można tak sterować liniami magistrali I2C - kiedy dana linia nie jest aktywna (nie ma niskiego stanu), to musi być w stanie wysokiej impedancji (otwarty kolektor/dren). Gdyby wyjście mikrokontrolera sterujące linią SCL/SDA miało wysoki stan, a w tym czasie inne urządzenie ustawiłoby ją w stanie niskim, to z wyjścia mikrokontrolera popłynąłby prąd - praca magistrali zostałaby zaburzona. Podobnie w sytuacji, gdy wyjście mikrokontrolera miałoby stan niski, który ciągle blokowałby magistralę. Mikrokontroler nie ma dedykowanych wyjść z otwartym kolektorem/drenem, dlatego piny sterujące liniami SCL/SDA trzeba ustawiać w stanie wysokiej impedancji.
    Pomogłem? Kup mi kawę.
📢 Słuchaj (AI):

Podsumowanie tematu

✨ Przedstawiono prosty generator PWM oparty na mikrokontrolerach ATtiny24/44/84, zasilany napięciem 2.7-5.5V (lub 2.4-5.5V dla wersji "A"/"V"). Generator generuje sygnał prostokątny o stałych częstotliwościach 1.25 kHz, 10 kHz i 80 kHz z regulowanym wypełnieniem 0-100% z krokiem 1%. Parametry sygnału są wyświetlane na monochromatycznym wyświetlaczu OLED z kontrolerem SSD1306, komunikującym się przez magistralę I2C (adresy $78/$3C lub $7A/$3D). Oprogramowanie napisano w asemblerze, z własnymi procedurami obsługi I2C i OLED, zoptymalizowanymi pod kątem mikrokontrolerów ATtiny. Dyskutowano o zabezpieczeniach przeciwzwarciowych i odwrotnej polaryzacji, gdzie autor zrezygnował z diody Schottky’ego i tranzystora MOSFET, aby uniknąć spadków napięcia przy niskim zasilaniu. Wskazano, że zastosowanie P-MOS na zasilaniu mogłoby wyeliminować spadek napięcia. Autor potwierdził stabilność i jakość sygnału PWM na oscyloskopie Siglent SDS824X HD, z czasami narastania/opadania około 90 ns i dokładnością wypełnienia do dwóch miejsc po przecinku. Dyskusja poruszyła także kwestie techniczne dotyczące implementacji magistrali I2C, szybkości komunikacji (100 kHz), użycia makr w asemblerze oraz metod wykonania płytek PCB (transfer chemiczny). Autor podkreślił, że projekt jest ukończony i spełnia założenia, a kod asemblerowy jest krótki, czytelny i zoptymalizowany.
Wygenerowane przez model językowy.
REKLAMA