Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

DDS AVR 100kHz, zmiana częstotliwości w czasie pracy, równoległa praca gen. HF

R-MIK 08 Paź 2017 17:41 3216 19
  • DDS AVR 100kHz, zmiana częstotliwości w czasie pracy, równoległa praca gen. HF DDS AVR 100kHz, zmiana częstotliwości w czasie pracy, równoległa praca gen. HF DDS AVR 100kHz, zmiana częstotliwości w czasie pracy, równoległa praca gen. HF


    Odgrzebałem stary projekt (25 tydzień 2015 roku). Nie ma on szans na wygraną w konkursie ale taki generator może się przydać bo jest tani, a oferuje dużo więcej niż podobne rozwiązania z Internetu czy dostępne na Allegro. Przedstawiam efekt dwu dni pracy nad programem (PCB były zmontowane prawie w całości). Program oparty o popularny "silnik". Wszystkie ślady prowadziły na stronę Scienceprog.com.
    Co mi się nie podobało w konstrukcjach (oprogramowaniu) z Internetu?
    - niewygodna zmiana częstotliwości (menu wyboru kroku przestrajania)
    - brak przestrajania w czasie pracy (generator trzeba zatrzymać, zmienić częstotliwość, ponownie wystartować)
    - brak możliwości "ładowania" własnych przebiegów.

    Zmiany w stosunku do rozwiązań dostępnych w Internecie i sprzedawanych na Allego:
    - Fmax 500kHz przy czym dobrą jakość sygnału uzyskamy do ok 90kHz. Przy większych częstotliwościach pojawiają się duże zniekształcenia (oscylogramy niżej).
    - HSfreq podzielnik od 1 do 256 (częstotliwości 39kHz...10MHz). Wyjście to jest aktywne cały czas, także podczas generowania innych przebiegów na wyjściu LF.
    - Ustawianie napięcia wyjścia TTL/CMOS i zapis tegoż napięcia w eeprom
    - Zapis delty (kroku zmian częstotliwości) w eeprom
    - Obsługa enkodera
    * zmiana częstotliwości podczas pracy generatora - "płynne" przestrajanie




    * wybór parametru (częstotliwości, napięcia Vttl)
    * szybka zmiana kroku (delty) częstotliwości (przycisk enkodera) - nie działa podczas pracy generatora
    - Podczas zmiany częstotliwości, kursor (podkreślenie) pokazuje modyfikowaną cyfrę
    - Sygnalizacja pracy generatora (migający kursor)
    - Regulacja Amplitudy (max +/-5V) i ofsetu (+/-5V)
    - Wyjście 50R
    - Przetwornik DAC-08 (na rezystorach 1% można uzyskać CA rzędu 5..6bit, dla 8-bit potrzeba dokładniejszych niż 0,5%, 0,1% kosztują po ok 50gr sztuka, przetwornik jest tańszy). Czym różni się przetwornik na rezystorach (liniowość), zwłaszcza 5%, pokażę przy okazji oscyloskopu, który będzie miał także charakterograf i możliwość pomiaru liniowości przetworników).
    - Wyjście TTL/CMOS z napięciem ustawianym z menu w zakresie 0..15V
    - Częstotliwość w kHz (kropka w roli separatora)
    - Duży wyświetlacz 2x20 znaków
    - Zmieniona biblioteka obsługująca LCD. Ta która była, źle współpracowała z nowym wyświetlaczem (pojawiały się "krzaki")
    - Polskie menu
    - Panel czołowy z PCB przystosowany do wymiarów obudowy aparaturowej CP-15-33


    Do zrobienia:
    - przerwanie PCIN od wszystkich przycisków co da możliwość zmiany wszystkich parametrów podczas pracy generatora
    - sterowanie po USB
    - ładowanie kilku własnych przebiegów do FLASH.


    W prototypie użyłem transformatora 2x8V w związku z czym maksymalna amplituda przebiegu na wyjściu to ok +/-7V. To samo ograniczenie dotyczy napięcia na wyjściu TTL/CMOS. Aby uzyskać wyższą amplitudę należy wymienić transformator na 2x10 czy 2x12V. Wtedy jednak stabilizator +5V zasilający część cyfrową należy wyposażyć w radiator.
    W płycie czołowej, otwór na LCD jest za duży (zbyt wysoki), rysunki PCB już poprawiłem.


    Ale to jak wymienię procesora na Mega324. Aktualnie zamontowany mam Mega16, który został "przetaktowany" i zaczyna brakować pamięci FLASH. Brakuje też układu 74LS06, w związku z tym, przebiegi sygnału na wyjściu TTL/CMOS są nie najlepsze.
    Kilka oscylogramów:

    DDS AVR 100kHz, zmiana częstotliwości w czasie pracy, równoległa praca gen. HFDDS AVR 100kHz, zmiana częstotliwości w czasie pracy, równoległa praca gen. HFDDS AVR 100kHz, zmiana częstotliwości w czasie pracy, równoległa praca gen. HFDDS AVR 100kHz, zmiana częstotliwości w czasie pracy, równoległa praca gen. HFDDS AVR 100kHz, zmiana częstotliwości w czasie pracy, równoległa praca gen. HFDDS AVR 100kHz, zmiana częstotliwości w czasie pracy, równoległa praca gen. HFDDS AVR 100kHz, zmiana częstotliwości w czasie pracy, równoległa praca gen. HF

    Regulacja amplitudy i ofsetu:

    Zmiana częstotliwości w czasie pracy generatora:

    Zmiana amplitudy na wyjściu TTL/C-MOS:

    Zmiana częstotliwości na wyjściu HF:


    Teraz czas na generator na CPLD.


    Edit 10-10-2017
    Wprowadziłem małe zmiany w bloku analogowym związane z regulacja ofsetu (Anlog2.pdf). Spowoduje to odwrócenie generowanych przebiegów. W przypadku sinusa, trójkąta, prostokąta i innych symetrycznych nie ma to znaczenia, natomiast piłę trzeba zanegować w deklaracjach w pamięci FLASCH.


    Fajne!
  • #2 08 Paź 2017 18:44
    komatssu
    Poziom 28  

    Z odpowiednim filtrem sinusoida >100kHz też wyglądałaby dobrze.
    Zanikanie przebiegu podczas przestrajania to zamierzony efekt, czy "bug"?

  • #3 08 Paź 2017 19:27
    R-MIK
    Poziom 37  

    komatssu napisał:
    Z odpowiednim filtrem sinusoida >100kHz też wyglądałaby dobrze.

    Ale Prostokąt czy piła już nie :-)

    komatssu napisał:

    Zanikanie przebiegu podczas przestrajania to zamierzony efekt, czy "bug"?

    Nie zamierzony, nie bug. W czasie generowania przebiegu wykonywany jest program:
    Kod: avrasm
    Zaloguj się, aby zobaczyć kod


    Przycisk stop, enkoder, wywołuje przerwanie, które ustawia bit w rejestrze układu SPI. Wynika to z tego, że Mega16 nie ma GPIO adresowanego bitowo. Użycie rejestru/komórki pamięci, spowodowało by dłuższe działanie kodu, przez co Fmax zmniejszyła by się. W przerwaniu od enkodera, następuje zmiana częstotliwości i wyświetlenie jej na LCD. W tym czasie generator nie pracuje, dlatego te zaniki sygnału. Po zmianie częstotliwości, przeliczeniu parametrów, ponownie uruchamiana jest procedura generująca przebieg.
    Przy takim sposobie generowania DDS nie da się płynnie przestrajać częstotliwości. To będzie możliwe w generatorze na CPLD, gdzie procek tylko ładuje przebieg do RAM, ustawia parametry a resztę załatwia CPLD.

    Przy komunikacji USB też tak będzie. Podczas zmiany parametrów lub ładowania przebiegu, generowanie sygnału będzie wyłączane.

    Do 500kHz częstotliwość sygnału jest dokładnie taka jak wprowadzona (kształt to inna sprawa, bo do CA trafiają np tylko 4 próbki), ponad juz nie. W generatorze dałem możliwość ustawienia do 999.999kHz.

    W rozwiązaniach z netu denerwował mnie sposób zmiany częstotliwości, był dość niewygodny. Dlatego zmianę kroku zrobiłem także na przycisku enkodera.

  • #4 08 Paź 2017 21:00
    lukashb
    Poziom 38  

    No i super! bardzo fajna konstrukcja, tego typu sprzęt tylko jeszcze wyższa częstotliwość przydała by mi się do zbudowania generatora do radio odbiornika na 80m, z tym, że wymagałbym częstotliwości bliskich 10MHz. Mam nawet już pomysł i chciałbym go przetestować, mianowicie zrobić taki analogowy DDS, czyli pomiar częstotliwości, i korekcja napięciowa generatora w stosunku do zadanej częstotliwości. Obawiam się, że mogę się porywać z motyką na słońce, ale spróbować muszę. Tak czy inaczej, daję +. Pozdrawiam

  • #5 08 Paź 2017 21:10
    R-MIK
    Poziom 37  

    lukashb napisał:
    No i super! bardzo fajna konstrukcja, tego typu sprzęt tylko jeszcze wyższa częstotliwość przydała by mi się do zbudowania generatora do radio odbiornika na 80m, z tym, że wymagałbym częstotliwości bliskich 10MHz.

    Są tanie moduły DDS na układach Analoga. 10MHz jest ok, 50MHz (jak piszą) juz nie za bardzo. Z AVR wiele więcej nie wyciągniesz. Na Xmega osiągniesz jakieś 150kHz. Na ARM pewnie 1MHz. Mam generator na DsPIC, wyciąga 1MHz..

    lukashb napisał:

    Mam nawet już pomysł i chciałbym go przetestować, mianowicie zrobić taki analogowy DDS, czyli pomiar częstotliwości, i korekcja napięciowa

    Zrób to na PLL i VCO. Są układy PLL sterowane po IIC. Zakres przestrajania 1:10 uzyskasz, z większym (na jednym zakresie) będzie problem (to oczywiście zależy od generatora VCO, a nie PLL).


    W sumie przy tym programie trzeba jeszcze trochę popracować. W wersji którą modyfikowałem, w przerwaniu od timera0 (w oryginale timera2 ale ja go używam do ustawienia napięcia na TTL/CMOS) sprawdzania jest klawiatura, obsługiwany LCD. Często pojawia się tam
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Pewnie przeniosę to wszytko do pętli głównej. Czekanie na zwolnienie przycisku, zastąpię sprawdzaniem zmiany stanu, coS w tym styku:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Pozwoli to użyć WDG (poza samym generowaniem sygnału) i bezproblemowej "równoległej" pracy innych podprogramów (np obsługi USART). Pozostanie problem szybkiej zmiany wartości po dłuższym przytrzymaniu przycisku, teraz robione jest to tak
    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    Na razie nie mam pomysłu jak rozwiązać problem (nie chce mi się wszystkiego pisac od nowa po swojemu).
    Po tych zabiegach zabiorę się za obsługę USART (USB). Wtedy będzie można załadować kilka swoich przebiegów do FLASH i sterować generatorem. Na tą chwilę roboty stoją, mam Mega164 a zaczyna brakować mi FLASH. Mam co prawda Mega324 ale przeznaczoną do innego projektu, mam 664 ale mi jej szkoda o 1284 nie wspomnę.
    Ten projekt szybko trafi do AVT i pewnie szybko będzie opublikowany, jak Czytelnicy będą naciskać to szybko wprowadzę funkcjonalność USB.

  • #6 09 Paź 2017 00:18
    lukashb
    Poziom 38  

    Takie sterowanie via USB było by bardzo dobre i funkcjonalne. Można nad tym pomyśleć, ogólnie zrobić sobie takie stanowisko pomiarowe sterowane komputerowo, Pan chyba wspominał gdzieś o hubie który będzie zbierał pomiary, i ogólnie sterował tym. Do tego aplikacja (tu bardziej w tą stronę niż, terminal z racji sterowania) wykonana w taki sposób, że ma w sobie podaplikacje, czyli wybieramy czym chcemy sterować, czy to oscyloskop, czy zasilacz, czy właśnie generator, a może miernik częstotliwości. Nie wiem, tak myślę, pewnie trochę wymyślam ale pomysł ciekawy.

  • #7 09 Paź 2017 00:35
    R-MIK
    Poziom 37  

    lukashb napisał:
    Takie sterowanie via USB było by bardzo dobre i funkcjonalne.

    Teraz, przeważnie do komunikacji via USB używam FT220/221/201. Mają duży bufor dla nadawania i odbioru (po 512 bajtów), interfejs SPI/IIC dzięki czemu nie zajmuję cennego USARTA (i inne korzyści) a co ważne, mam dostęp do pamięci MTP i w prezencie prawie 1kB EEPROM.

    lukashb napisał:

    Można nad tym pomyśleć, ogólnie zrobić sobie takie stanowisko pomiarowe sterowane komputerowo,

    Raczej nie bedę tego robił.

    lukashb napisał:

    Pan chyba wspominał gdzieś o hubie który będzie zbierał pomiary,

    To tylko do mierników panelowych.

    lukashb napisał:

    i ogólnie sterował tym. Do tego aplikacja (tu bardziej w tą stronę niż, terminal z racji sterowania) wykonana w taki sposób, że ma w sobie podaplikacje, czyli wybieramy czym chcemy sterować, czy to oscyloskop, czy zasilacz, czy właśnie generator, a może miernik częstotliwości. Nie wiem, tak myślę, pewnie trochę wymyślam ale pomysł ciekawy.

    Protokoły komunikacyjne będą otwarte, kody źródłowe do większości projektów też, może komuś się bedzie chciał zrobić taki program.

    Zrobiłem juz nieblokującą obsługę klawiatury i obsługę WDG. Mam małą babułę jak przycisk trzymany jest długo, czasem jest to interpretowane jako kilka naciśnięć. Poprawię to, przeniosę obsługe klawiatury do pętli głównej i na razie koniec prac nad tym projektem.

  • #8 09 Paź 2017 10:58
    Pong.Chu
    Poziom 7  

    Zrobiłem jakiś czas temu bardzo podobą konstrukcję tyle że u mnie było wszystko w FPGA (Cyclone V) i do tego DAC 250 MHz. Krok ustawienia częstości był 50MHz / 2^32 = 0.0117 Hz ale nic nie stoi na przeszkodzie aby uzyskać 1uHz przy większym akumulatorze. Oczywiście modulacja amplitudy, fazy, częstości z bardzo wysokim pasmem - bo faza u/lub amplituda mogą być modulowane co każdy cykl zegara. IP core DDSa wzięte z opencores: https://opencores.org/project,dds_synthesizer a komunikacja z PC po FT232.
    Udało się nawet zrobić w pełni cyfrowy nadajnik FM -- podłączyłem układ audio po I2S i modulowałem fazę sygnałem audio - 3-cia harmoniczna była słyszalna w radioodbiorniku FM. Prawdę mówiąc wg. mnie robienie tego na AVR to tylko w ramach ćwiczeń bo sens użytkowy tego jest mały.

  • #9 09 Paź 2017 11:16
    R-MIK
    Poziom 37  

    Pong.Chu napisał:
    Prawdę mówiąc wg. mnie robienie tego na AVR to tylko w ramach ćwiczeń bo sens użytkowy tego jest mały.

    Do audio wystarczy. W necie pojawiło się tego sporo, na Allegro można tez kupić, tyle, że są to w zasadzie dwa projekty (jeden C, drugi BASCOM) powielane z istotnym błędem w postaci drabinki R-2R i to o zgrozo z rezystorów 5%.

    Swego czasu miałem taki pomysł, aby zrobić proste urządzenia warsztatowe współpracujące/sterowane z komputera. Coś jak kiedyś było publikowane w nieistniejącym już PE tyle, że w nowszej technologii. Generator na AVR miał być jednym z nich. Bardziej zaawansowana wersja będzie na EPM3064 + szybki RAM + DAC.
    Nie zawsze potrzebne sa super precyzyjne przyrządy. Proste, własne konstrukcje, w razie uszkodzenia, łatwo naprawić. Do większości projektów dostępne są kody źródłowe, można wprowadzić swoje modyfikacje.
    Tak naprawdę to idę tą, po kilkuletniej przerwie, zacząłem kontynuować pod koniec zeszłego roku. Na tą chwilę (poza generatorem) zrobione są:
    - Multimetr 4.5 cyfry "UIRftCLT", USB izolowane, terminal znakowy kolor
    - Licznik częstotliwości czasu 0,14(0.28)ppm, 8ns, ext. sync.GPS
    - Multizasilacz
    - Dwukolorowy miernik panelowy 4,5 cyfry, U/I AC/DC, Hold, REL, izolowany USART
    - 1-Wire Emulator & Skaner. Tryb Host, obsługa Overdrive
    - Pirometr "tęczowy" z WS2812 + 7 x DS18B20, Wi-Fi, UsbHost, pilot IR
    Wszystko współpracuje z komputerem. Większość ma izolację galwaniczną. W najbliższym czasie będę realizował:
    - Generator DDS na CPLD
    - Oscyloskop 4-ch 240Ms/s (dla jednego kanału, po 120 dla dwóch, po 60Ms/s przy 4 kanałach)
    - Zasilacz hybrydowy 4-zaciskowy
    - Obciążenie aktywne, dwa kanały, komunikacja IIC izolowana galwanicznie. Główne przeznaczenie: współpraca z zasilaczem, ale może pracować samodzielnie (nastawy potencjometrami, pomiary na wskaźnikach sterowanych PWM-em)

    Zastanawiam się nad analizatorem IIC. Tak jak 1-Wire Emulator & Scaner może konkurować z rejestratorami (np SaleAE) ze względu na możliwość filtrowania po oadresach, komendach, to nie wiem czy jest sens robić to dla IIC.

  • #10 10 Paź 2017 14:24
    Urgon
    Poziom 36  

    AVE...

    Pytania mam trzy:
    1. O ile jest Atmega przetaktowana? Jak to wpływa na jej pracę?
    2. Dlaczego nie użył kolega na przykład AD9833 lub podobnego układu "DDS w kostce"? Co prawda ceny ich w Polsce są absurdalne, ale na ebay AD9833 idzie kupić za około 8-9 złotych, a gotowy moduł kosztuje ~14PLN, tylko się czeka dwa tygodnie do dwóch miesięcy.
    3. Dlaczego kolega nie użył jednak DACu na SPI, na przykład MCP4821 lub MCP4921? Albo obu połączonych ze sobą tak, by pierwszy generował napięcie referencyjne dla drugiego.

  • #11 10 Paź 2017 14:48
    R-MIK
    Poziom 37  

    Urgon napisał:
    1. O ile jest Atmega przetaktowana? Jak to wpływa na jej pracę?

    Taktuje 20MHz, a powinna byc 16. Negatywnego wpływu nie zauważyłem ale docelowo ma być Mega324, której Fmax 20MHz. Powodem zastosowania M324 jest także to, ze każde wyprowadzenie może generować przerwanie. Dzięki temu klawiatura będzie obsługiwana bez przerywania generowanego sygnału. W praktyce opcja START/STOP zniknie.

    Co do przetaktowania, to w Uzebox Mega644 jest przetaktowana z 20 do 28MHz.

    Urgon napisał:

    2. Dlaczego nie użył kolega na przykład AD9833 lub podobnego układu "DDS w kostce"? Co prawda ceny ich w Polsce są absurdalne, ale na ebay AD9833 idzie kupić za około 8-9 złotych, a gotowy moduł kosztuje ~14PLN, tylko się czeka dwa tygodnie do dwóch miesięcy.

    Chiński moduł AD9833 kosztuje tyle co AVRMega a trzeba nim także sterować. Idea była taka aby trochę podrasować rozwiązanie powielane przez wiele osób, praktycznie bez zmian.

    Urgon napisał:

    3. Dlaczego kolega nie użył jednak DACu na SPI, na przykład MCP4821 lub MCP4921? Albo obu połączonych ze sobą tak, by pierwszy generował napięcie referencyjne dla drugiego.

    SPI w Mega może pracować z CLK F_CPU/2, w tym przypadku 10MHz. To oznacza, że w czasie przesyłania bajtu (pomijam to też trzeba dodać dwa rozkazy oby sterować strobem) AVR wykona 16 cykli. Proszę obejrzeć fragment generujący przebieg i odpowiedzieć sobie na pytania:
    - ile rozkazów wykonuje się od pomiędzy OUT PORTx?
    - jaki będzie skutek dodania operacji ustawiających i kasujących strob CS i pewnie jeszcze dwa rozkazy dla strobu LDAC (nie wiem czy te przetworniki mogą pracować bez tego)?

  • #12 10 Paź 2017 15:02
    Piotrus_999
    Poziom 39  

    @Urgon
    Mógłby nawet dostać sample od AD albo innych firm. Ja do prototypów praktycznie nie kupuje części - w końcu to producent jest zainteresowny abym zastosowa ich :)

    DAC na SPI to trochę za słabo IMO dla generatora. 100MSPS to wg mnie minimum.

    R-MIK napisał:
    - ile rozkazów wykonuje się od pomiędzy OUT PORTx?
    - jaki będzie skutek dodania operacji ustawiających i kasujących strob CS i pewnie jeszcze dwa rozkazy dla strobu LDAC (nie wiem czy te przetworniki mogą pracować bez tego)?
    Niewłaściwy sprzęt do zadania. Trzeba wyjść dalej niż tylko AVR-y (nawet przetaktowane)

  • #13 10 Paź 2017 15:59
    R-MIK
    Poziom 37  

    Piotrus_999 napisał:
    Niewłaściwy sprzęt do zadania. Trzeba wyjść dalej niż tylko AVR-y (nawet przetaktowane)

    Właściwy. Założone zadanie zostało spełnione.

  • #14 10 Paź 2017 16:32
    md5crypt
    Poziom 8  

    R-MIK napisał:
    - ile rozkazów wykonuje się od pomiędzy OUT PORTx?
    - jaki będzie skutek dodania operacji ustawiających i kasujących strob CS i pewnie jeszcze dwa rozkazy dla strobu LDAC (nie wiem czy te przetworniki mogą pracować bez tego)?

    Eeee tam, bufforowany USART w trybie SPI + dwa pwm'y do strobowania :P. Horror by wszystko zsynchronizowac, ale da sie.

  • #15 10 Paź 2017 16:59
    R-MIK
    Poziom 37  

    md5crypt napisał:
    R-MIK napisał:
    - ile rozkazów wykonuje się od pomiędzy OUT PORTx?
    - jaki będzie skutek dodania operacji ustawiających i kasujących strob CS i pewnie jeszcze dwa rozkazy dla strobu LDAC (nie wiem czy te przetworniki mogą pracować bez tego)?

    Eeee tam, bufforowany USART w trybie SPI + dwa pwm'y do strobowania :P. Horror by wszystko zsynchronizowac, ale da sie.

    A zysk 4 pinów mikrokontrolera.

  • #16 10 Paź 2017 17:20
    Urgon
    Poziom 36  

    AVE...

    Tak od siebie dodam, że w cenie ATMegi 324 (22-30 złotych netto w TME) występują na przykład PIC32MX230F256B oferujący aż 83DMIPS przy 50MHz, albo dsPIC33EP64GP504 oferujący 70MIPS przy 140MHz, funkcje DSP i dwa moduły SPI do 15Mbps. Pewną wadą może być konieczność zakupu troszkę kosztownego programatora, ale to jednorazowa inwestycja, która się potem zwróci. To tylko przykłady z mojego poletka. Na Alledrogo są moduły z STM32 po kilkanaście złotych, które też są warte grzechu...

    Moderowany przez tmf:

    Proszę nie kontynuować dyskusji nie na temat. Autor zrobił projekt wg swoich potrzeb. Sens dyskusji, że "a można użyć XXX" jest żaden.

  • #17 10 Paź 2017 17:31
    Pong.Chu
    Poziom 7  

    Urgon napisał:
    AVE...
    Pewną wadą może być konieczność zakupu troszkę kosztownego programatora, ale to jednorazowa inwestycja, która się potem zwróci. To tylko przykłady z mojego poletka. Na Alledrogo są moduły z STM32 po kilkanaście złotych, które też są warte grzechu...


    Kolega R-MIK wcześniej napisał, że to nie chodzi o dobieranie odpowiednich podzespołów nadających się do zastosowania tylko o upłynnienie zapasów magazynowych i zrobienie czegoś jak najmniejszym kosztem. Oczywiście takiego DDSa można zrobić na wielu fajnych układach z super parametrami ale to nie jest tutaj kryterium.

  • #18 10 Paź 2017 17:53
    md5crypt
    Poziom 8  

    Piotrus_999 napisał:
    Tylko po co jak wystarczy zastosować odpowiednio mocny i do tego często tańszy uC.
    Dziwna ta cała dyskusja. Jak to po co? To chyba oczywiste. Dla sztuki.

  • #19 10 Paź 2017 21:09
    acctr
    Poziom 12  

    R-MIK napisał:
    }while(bit_is_clear(UP_PIN, UP_KEY));//wait for button release

    Na razie nie mam pomysłu jak rozwiązać problem (nie chce mi się wszystkiego pisac od nowa po swojemu).


    Rozwiązenim jest tutaj użycie maszyny stanów dla przycisku i zamiast tego naiwnego czekania aż przycisk się zwolni robić inne rzeczy.
    Pisałeś gdzieś że używasz maszyny stanów i zdarzeń więc nie powinienieś mieć problemów z przerobieniem tego.

  • #20 10 Paź 2017 21:20
    R-MIK
    Poziom 37  

    acctr napisał:
    R-MIK napisał:
    }while(bit_is_clear(UP_PIN, UP_KEY));//wait for button release

    Na razie nie mam pomysłu jak rozwiązać problem (nie chce mi się wszystkiego pisac od nowa po swojemu).


    Rozwiązenim jest tutaj użycie maszyny stanów dla przycisku i zamiast tego naiwnego czekania aż przycisk się zwolni robić inne rzeczy.
    Pisałeś gdzieś że używasz maszyny stanów i zdarzeń więc nie powinienieś mieć problemów z przerobieniem tego.

    Przerobię, tylko łatwiej od razu pisać jako maszyna stanów, a nie później przerabiać.
    Na razie czekanie na zwolnienie klawisza rozwiązałem ale nie w INT od klawisza start/stop. W sumie proste, ustawić flage i uwzględnić ją później w funkcji obsługującej klawisze. łatwo powiedzieć, trudniej zrobić. Funkcję obsługującą klawisze przeniosełem z przerwań od timera do pętli głównej, bo w funkcji tej obsługiwany jest także LCD. Zrobiłem obsługę WDG ale czasem zadziała a nie wiem gdzie. Nie chce mi się szukać, jak wstawię Mega324 to będę wiedział, w którym miejscu program kręci się w kółko (przerwanie od WDG, którego M16 nie ma).

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME