Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Atmega 8 - Generator określonej liczby impulsów w zakresie 2 do 30.

sp5gbw 28 Jul 2015 12:36 2118 23
  • #1
    sp5gbw
    Level 17  
    Choć jestem elektronikiem ze sporym stażem, posiadam marne pojęcie o programowaniu mikrokontrolerów AVR. Obecnie zaszła potrzeba wykonania pewnego urządzenia przy wykorzystaniu procesora o małym poborze prądu wg założeń:
    W jak najkrótszym czasie po każdym załączeniu zasilania, należy wygenerować określony ciąg impulsów z zakresu 1, 2, 3 … 28, 29, 30, o częstotliwości akustycznej ok. 5kHz, nadających się do zmodulowania nadajnika pilota np. 433MHz. Liczba impulsów może być nastawiana przyciskami lub w inny sposób . Czy ktoś mógłby mi pomóc w napisaniu odpowiedniego listingu w C++.
  • #2
    Bartusjusz
    Level 25  
    Pomóc czy napisać za Ciebie?
    Jeśli pomóc to jak brzmi pytanie, jeśli napisać za Ciebie to zapomniałeś nadmienić ile płacisz i na kiedy ma być.
  • #3
    strikexp
    Level 27  
    Kup sobie klona Arduino UNO lub NANO, tam masz gotowe biblioteki do pisania takich rzeczy.
  • #4
    excray
    Level 40  
    Kolego czy masz jakąś bazę sprzętową? Masz już jakiś procesor? Czy będziesz robić projekt od podstaw? Napisz coś więcej to postaram się pomóc.
  • #5
    kamyczek
    Level 38  
    sp5gbw wrote:
    Choć jestem elektronikiem ze sporym stażem, posiadam marne pojęcie o programowaniu mikrokontrolerów AVR.


    I tu dochodzimy do sedna sprawy i moje pytanie jest następujące czy szanowny kolega ma chęć zdobycia wiedzy , czy chce zlecić napisanie programu i za niego zapłacić .
    Myślę że jako elektronik z doświadczeniem ceni pan wiedzę kolegów i nie chce zrobić tego urządzenia rączkami kolegów z forum , bo było by to nieeleganckie ;)
  • #6
    sp5gbw
    Level 17  
    Witam wszystkich i dzięki za zainteresowanie. Nie do końca wiem jak działa to forum, więc sorry za jakieś wpadki.
    Odpowiadam koledze "excray ale i innym kolegom.
    Posiadam programator USB, mikrokontroler Atmega 8, płytka do eksperymentów właśnie się wytrawia, Win AVR w koputerku. Chodzi mi o pomoc w konstrukcji i oprogramowaniu.
    1. Czy taki generator uda się wykonać tylko na samym mikrokontrolerze, czy też jeszcze potrzebne będą inne układy.
    2. jestem na początkowym etapie samo uczenia się C++ i zależy mi na listingu z wyjaśnieniami.
    Oczywiście nie za darmo, Na pewno posiadam sporo doświadczenia szczególnie w serwisie różnej elekrtoniki -oprócz telefonów, ale i mnóstwo urządzeń jak np DMMów.
  • #7
    strikexp
    Level 27  
    Mikrokontroler zrobi to samo co komputer, tylko wolniej :)
    Twój cel jest banalny i bez problemu go uzyskasz. Jednak jak pisałem najlepiej zaczynać programować na Arduino UNO za 20-30zł bo jest 10 razy łatwiej.
    I popełniłeś błąd kupując ATmega8, to jest przestarzały mikrokontroler i ma mnóstwo pułapek. Lepiej dokup ATmega168 lub ATmega328.
  • Helpful post
    #8
    excray
    Level 40  
    Kolego @sp5gbw o ile rozumiem to program ma działać tak:
    - po uruchomieniu wczytuje z EEPROM ilość cykli (od 2 do 30) i generuje je czyli generuje przez czas Ta sygnał 5kHz z odstępem Tb między sygnałami.
    - po wygenerowaniu tego sygnału sprawdza stan klawiatury w oczekiwaniu na zmianę ilości cykli. Jeżeli taka nastąpiła zapisuje ją do EEPROM.
    Zweryfikuj proszę opis, ew. uzupełnij oraz podaj wartość Ta i Tb.

    Dodano po 1 [minuty]:

    strikexp wrote:
    I popełniłeś błąd kupując ATmega8, to jest przestarzały mikrokontroler i ma mnóstwo pułapek. Lepiej dokup ATmega168 lub ATmega328

    Kolego bez przesady. Błąd by popełnił jakby kupił Z80 bez peryferiów ale do tak banalnego zadania Atmega8 jest idealna. Ma wszystko co jest potrzebne a nawet więcej i jest tania.
  • #9
    sp5gbw
    Level 17  
    Dzięki wszystkim za podjęcie tematu.
    Może łatwiej będzie jak podam trochę więcej szczegółów całego pomysłu.Chodzi o to,żeby drogą radiową w urządzeniu podobnym do limitera prędkości kit AVT-5133, nastawić limitowaną wartość "prędkości" (cudzysłów, gdyż chodzi o inne wykorzystanie tego kitu). Pomyślałem, że generując pewną liczbę impulsów np. 20(szt) z częstotliwością akustyczną np.5kHz, można by zmodulowć nadajnik pilota, odebrać odpowiednim odbiornikiem i odebraną liczbą impulsów (przerabiając program zastosowany w AVT-5133) nastawić potrzebny limit:20. Generując inną ilość impulsów, zmienić limit na inny. Nie jestem pewien czy ten sposób jaki wymyśliłem, zważywszy na potrzebę dużej pewności działania jest właściwy...Ważne jest również to, żeby generacja nastąpiła w krótkim (milisekundy) czasie po zasileniu generatora.

    Dodano po 15 [minuty]:

    Jeszcze raz ja;
    strikexp napisał:
    I popełniłeś błąd kupując ATmega8, to jest przestarzały mikrokontroler i ma mnóstwo pułapek. Lepiej dokup ATmega168 lub ATmega328.
    Tak jak pisałem na początku jestem raczkującym w dziedzinie mikroprocesorów, a w posiadanej literaturze najczęściej występuje Atmega 8. Łatwo mogę ten błąd naprawić.
    Ale czy nie jest tak, że napisany program bez przeróbek, można skompilować w razie potrzeby na inny mikroprocesor?
  • #10
    strikexp
    Level 27  
    Nie jest tak że program pod ATmega8 kompilujesz na ATmega328. Są pomiędzy nimi różnice i bez zmian w kodzie wywala często błąd lub po prostu nie działa.


    A odnośnie projektu, czy ja dobrze zrozumiałem? Chcesz radiowo sterować prędkością?
    To może zamiast kombinowania lepiej kupić takie coś: http://electropark.pl/moduly-komunikacji/4362-modul-radiowy-4-kanaly-pilot.html plus mikrokontroler. Lub dwa mikrokontrolery i cyfrowe moduły radiowe w podobnej cenie co ten powyższy.
  • #11
    dondu
    Moderator on vacation ...
    @sp5gbw

    Dla Twojej wiedzy takie opinie:

    strikexp wrote:
    I popełniłeś błąd kupując ATmega8, to jest przestarzały mikrokontroler i ma mnóstwo pułapek. Lepiej dokup ATmega168 lub ATmega328.

    są kompletnie nieuprawnione i mówią jedynie o tym, że osoba je wypowiadająca ma niewielkie doświadczenie projektowe i nie rozumie zasad tworzenia portfolio mikrokontrolerów danego producenta oraz doboru mikrokontrolera do konkretnego projektu: http://mikrokontrolery.blogspot.com/2011/04/jaki-mikrokontroler-wybrac-do-projektu.html

    Pułapki, często nie są związane z tym konkretnym mikrokontrolerem, ale z całą rodziną AVR w tym także sugerowanych ATmega168 i ATmega328, a poza tym są dobrze opisane także na stronie z linku powyżej oraz w dokumentacji: http://mikrokontrolery.blogspot.com/2011/04/avr-czyhajace-pulapki.html

    Dodatkowo producenci w zakresie stwierdzonych problemów (błędy projektowe lub produkcyjne) przygotowują odpowiednie erraty: http://mikrokontrolery.blogspot.com/2011/04/erraty-utrapienie-elektronikow.html

    Mikrokontrolery innych rodzin np. ATtiny, XMega czy SAM (ARMy Atmela) także zawierają różnego rodzaju błędy, które są opisywane w specjalnych dokumentach: przykład: http://www.atmel.com/Images/doc6483.pdf

    Tak samo jest u innych producentów. Niemniej jednak pisanie o pułapkach jest niepotrzebnym straszeniem początkującego.

    Przykro mi kolego strikexp, ale musiałem tak surowo Twój post skomentować.


    Dlatego:
    sp5gbw wrote:
    Tak jak pisałem na początku jestem raczkującym w dziedzinie mikroprocesorów, a w posiadanej literaturze najczęściej występuje Atmega 8. Łatwo mogę ten błąd naprawić.

    to nie jest żaden Twój błąd, ale masz rację, że najwięcej materiałów w sieci i nie tylko na ten mikrokontroler (ATmega8) znajdziesz. Dlatego też warto od niego zaczynać - zaglądnij więc do spisu treści na stronie, której link Ci wskazałem.

    A patrząc na ogólny opis tego co chcesz zrobić, to ATmega8 jest zbyt potężny (specjalnie używam tego słowa) i może wykorzystasz go w 1%, a pozostałe 99% jego możliwości będzie niewykorzystane, więc można rozpatrywać znacznie mniejszy i ... starszy model niż ten niby przestarzały ATmega8.
  • #12
    strikexp
    Level 27  
    A tam przesadzasz dondu, są różnice w adresach rejestrów pomiędzy ATmega8 i rodziną ATmega168/ATmega328. I właśnie o takie pulapki chodzi ponieważ często gotowe programy są pisane właśnie pod ATmega328. Początkujący ściąga i okazuje się że nie działa. I chociaż taki doświadczony programista jak Ty wprowadza poprawki w kilka minut to początkujący może wyrywać sobie włosy z głowy przez kilka dni.
    Trzeba być tego świadomym i najlepiej mieć oba mikrokontrolery, kwota około 12zł za ATmega328 to niewielki wydatek. Ja właśnie z powodu tych różnic swoją ATmega8 wrzuciłem do pudełka i zapomniałem. Więc o przestawieniu na ATmega328 mówię z własnego doświadczenia a nie jakichś wymysłów.

    Co do proponowania początkującemu mniejszych mikrokontrolerów to nie byłbym taki śmiały. Są niby mniejsze, słabsze i tańsze ATtiny, ale ATtiny znacznie różnia się od ATmega. Po co początkujący ma sobie mieszać w głowie skoro znacznie wiecej materiałów jest na temat ATmega.
    Ja przykładowo sięgnęłem po ATtiny dopiero teraz, z powodu że muszę zrobić kilka inteligentnych czujników. W tym przypadku różnica ceny ma znaczenie a obudowa DIP-8 jest dodatkową zaletą a nie wadą.
  • #13
    Bartusjusz
    Level 25  
    strikexp
    1. Tak samo często, a nawet częściej są pisane na atmegę8 i nie przełożysz ich wprost na 328, więc argument bez sensu.
    2. Tak 12zł to tanio, tylko że atmega8 kosztuje 5,2zł więc jest jeszcze tańsza. Argument znów bez sensu.
    3. A ja z własnego doświadczenia mam paczkę atmeg8 i zamówiłem właśnie kolejne, co z tego?

    P.S.
    Co do attiny tu się akurat zgodzę, lepiej zacząć od wszystkomającej atmegi, co autor już uczynił.
  • #14
    dondu
    Moderator on vacation ...
    strikexp wrote:
    A tam przesadzasz dondu, są różnice w adresach rejestrów pomiędzy ATmega8 i rodziną ATmega168/ATmega328.

    W zdaniu do którego się odniosłem pisałeś jedynie o ATmega8:

    strikexp wrote:
    I popełniłeś błąd kupując ATmega8, to jest przestarzały mikrokontroler i ma mnóstwo pułapek. Lepiej dokup ATmega168 lub ATmega328.

    Przejście z jednego mikrokontrolera na drugi, to zupełnie inny temat i w tym zakresie nie podważam tego co napisałeś ale idąc tym tokiem rozumowania:

    strikexp wrote:
    Trzeba być tego świadomym i najlepiej mieć oba mikrokontrolery, kwota około 12zł za ATmega328 to niewielki wydatek. Ja właśnie z powodu tych różnic swoją ATmega8 wrzuciłem do pudełka i zapomniałem. Więc o przestawieniu na ATmega328 mówię z własnego doświadczenia a nie jakichś wymysłów.

    powinieneś kupić maksymalną ATmegę, a właściwie XMega, bo to także jest AVR.


    strikexp wrote:
    Co do proponowania początkującemu mniejszych mikrokontrolerów to nie byłbym taki śmiały. Są niby mniejsze, słabsze i tańsze ATtiny, ale ATtiny znacznie różnia się od ATmega.

    Czytaj proszę dokładnie co piszę, bo nie proponowałem autorowi zmiany mikrokontrera na mniejszy.


    strikexp wrote:
    Ja przykładowo sięgnęłem po ATtiny dopiero teraz, z powodu że muszę zrobić kilka inteligentnych czujników. W tym przypadku różnica ceny ma znaczenie a obudowa DIP-8 jest dodatkową zaletą a nie wadą.

    I właśnie dlatego nie wolno początkującym wmawiać, że jakiś mikrokontroler jest przestarzały i o tym napisałem w poprzednim poście.

    Chodzi o to, byś odpowiadając w szczególności początkującemu, nie przekazywał mu mitów przez takie wypowiedzi jak w poprzednim poście. Robisz w ten sposób krzywdę jemu i innym, którzy to czytać będą.
  • #15
    sp5gbw
    Level 17  
    Dyskusja jaką koledzy prowadzą jest dla mnie bardzo pomocna. Wszystkie linki starannie przeczytałem, i choć nie wszystko zrozumiałem, to jakiś pogląd na temat mikroprocesorów już mam.
    Odpowiadając koledze strikexp odnośnie linku zdalnego sterowania, to to urządzenie można by oczywiście wykorzystać jako łącze radiowe, ale z tym to ja sobie poradzę gdyż posiadam podobne urządzenia.
    Wracając do tematu to czy moje ostatnie wyjaśnienia dla kolegi excray były wystarczające?
  • #16
    sp5gbw
    Level 17  
    Ponieważ brak dalszych postów zamykam temat.
  • Helpful post
    #17
    excray
    Level 40  
    Witam. Przepraszam za spóźnioną odpowiedź ale to wina sezonu urlopowego. Powiem szczerze że obecnie po ostatnich wyjaśnieniach rozumiem jeszcze mniej niż wcześniej. Czy może kolega po prostu napisać do czego to ma służyć? To będzie mi łatwiej zrozumieć jak to ma funkcjonować.
  • #18
    p.kaczmarek2
    Level 26  
    strikexp wrote:

    I popełniłeś błąd kupując ATmega8, to jest przestarzały mikrokontroler i ma mnóstwo pułapek. Lepiej dokup ATmega168 lub ATmega328.


    Ja jako początkujący mogę z doświadczeń z Atmegami napisać, że popełniłem błąd kupując mocniejszą atmegę, bo większość artykułów z sieci była pod ATMEGA8 (którą polecam) a ja przez to miałem problem z portowaniem (inne nazwy rejestrów).
  • #19
    sp5gbw
    Level 17  
    Dzięki koledzy. Witam ponownie kolegę "exccray". Tak myślałem, że chodzi o urlop... Jeszcze raz dziękuję za pomoc. Wreszcie udało mi się napisać program spełniający moje potrzeby w pierwszej części mojego projektu. Jeśli mogę poprosić o ocenę oto on:
    Code: c
    Log in, to see the code
  • Helpful post
    #20
    Wirnick
    Level 29  
    sp5gbw wrote:
    Jeśli mogę poprosić o ocenę oto on:
    Code: c
    Log in, to see the code

    Przemyśl to :|
  • #21
    sp5gbw
    Level 17  
    Dzięki za wnikliwy opis. Jestem początkujący i bardzo mi pomogłeś.
  • #22
    excray
    Level 40  
    Ten kod po uruchomieniu generuje 11 impulsów ale bez możliwości zaprogramowania z poziomu użytkownika innej ilości. Czy taka funkcjonalność spełnia Twoje oczekiwania?
  • #23
    sp5gbw
    Level 17  
    Witam ponownie.
    Nie zauważyłem tego, ale jeszcze się przyjże. Robiłem pomiary częstościomierzem z funkcją licznika, za i podstawiłem 120 a delay skróciłem do 1ms, tak aby uzyskać częstotliwość 5kHz i licznik za każdym podłączeniem do żródła zasilania - pokazywał 120... Może próbowałeś w jakimś poważniejszym układzie, bo mój to tylko Atmega 8 i led przyłączona do portów (nogi 20 i 21) ?
  • #24
    excray
    Level 40  
    Wybacz, nie zauważyłem warunku "<=". Rzeczywiście będzie robić 12 impulsów.