Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

jaki mikroprocesor (rejestrator ilości imp. w funcki czasu)

27 Kwi 2010 22:50 2415 19
  • Poziom 10  
    Witam!

    Z góry przepraszam jeżeli coś podobnego było na forum, ale oszukałem się dość dobrze i na nic nie trafiłem.

    Mam do zaprojektowania układ który będzie rejestrował ilość występowania impulsów na wyjściu impulsowym pewnego urządzenia.

    Postaram się przedstawić podstawowe założenia z nadzieją że ktoś doświadczony w projektowaniu tego typu układów doradzi mi jaki mikroprocesor wybrać i czy moje założenia są słuszne.

    - maksymalna ilość impulsów to 6000 na godzinę, więc zakładając zliczanie impulsów w przedziałach 2 minutowych (możliwe uśrednienie wyników) ich maksymalna liczba przypadająca na ten czas to 200, a co za tym idzie na każde 2 minuty będę potrzebował 1 bajt pamięci danych.
    - impulsy mają być zliczane przez ok tydzień, więc pamięć danych będzie wynosiła ok. 5kB
    - urządzenie będzie wyposażone w wyświetlacz LCD (prawdopodobnie z wykorzystaniem wyświetlacza z wbudowanym sterownikiem HD44780)
    - kilka przycisków służących m.in. do ustawienia zegara, daty oraz rozpoczęcia i zakończenia zliczania impulsów (zakładam że min. 2 przyciski)
    - złącze służące do zgrania danych do komputera PC

    Moje główne pytanie to czy ktoś może mi poradzić jakiś mikroprocesor wybrać w jakichś rozsądnych pieniądzach.
    Nie wiem czy jestem w błędzie ale popularny AVR wchodzi w grę jedynie w przypadku zastosowania zewnętrznej pamięci danych, ponieważ urządzenia tego producenta cechują się architekturą harwardzką (nawet atmega z wyższej półki ma mało pamięci danych), a ja wychodzę z założenia (być może błędnego) że im mniej miejsc gdzie można coś spaprać tym mniej może być z tym problemów, więc wolał bym nie dokładać zewnętrznych pamięci, chyba że jestem w błędzie?

    Będę bardzo wdzięczny za wszelkie sugestie.

    Pozdrawiam
  • Poziom 38  
    Myślę ze AVR nawet 16 sobie z tym poradzi a dane zachowywałbyś w zewnętrznym eepromie. Niewiele ich jak na tydzień wiec to nie przeszkoda. Zapewne przydałby się RTC więc np. PCF8563 i jego wyjście CLK mógłbyś wykorzystać do odmierzania 2 minut wg założenia. Do zliczania impulsów wykorzystać Jeden z liczników.
  • Poziom 18  
    Według mnie lepiej użyć jednak pamięci zewnętrznej, choć oczywiście można jej nie używać, ale gromadzenie przez tydzień wyników w pamięci danych, może spowodować to, że przy chwilowym zaniku zasilania stracisz wszystkie dane, a poza tym jest mało eleganckie (jeśli tak to można ująć).
    Najlepiej pod ATmegę podłączyć pamięć EEPROM na I2C albo SPI. Co do mikrokontrolera to polecam ATmega16. Posiada co trzeba i można ją debugować za pomocą tanich JTAGów (np. klony JTAG-ICE).
  • Poziom 42  
    No coś bardzo błędne masz te założenia o małych ilościach pamięci danych i w ogóle w podejściu do zagadnienia niestety.

    Ty chcesz przechowywać w pamięci RAM zapamiętane dane ???? a jak się procek zresetuje to co ???

    Poza tym nie rozumiem np po co ci 5kB danych za zapamiętanie iluś tam impulsów - a nie łaska zliczać i zarejestrować w dużej liczbie na np 4 bajtach czy w kilku takich zmiennych???

    Poza tym takie dane najlepiej jeśli już trzba zapamiętywać to nie w żadnej pamięci RAM zewnętrznej tylko ew EEPROM zewnętrzny. Można kupić małką 8 nóżkową kostkę w niskiej cenie o ogromnej jak na twoje potrzeby pojemności i na dodatek po zaniku zasilania dane cały czas będą trzymane

    Coś musisz może najpierw poćwiczyć budowę jakichś prostych układów nawet do migania diodą LED zanim się za ten projekt zabierzesz, bo coś cienko może ci to wyjść bez minimum praktyki a tylko teoretyzując na bazie nie wiadomo skąd pozyskanych dziwnych informacji o ograniczeniach procków AVR

    Toż one się idealnie do takich celów nadają
  • Poziom 10  
    Dziękuję za wyprowadzenie mnie z błędu z tymi zewnętrznymi pamięciami. Myślę że źle się wyraziłem z tymi wewnętrznymi pamięciami danych-mój błąd. W niektórych atmegach występuje pamięć EEPROM i o ile się nie mylę maksymalnie wynosiła 4kB i to o niej myślałem.

    mirekk36 napisał:
    a nie łaska zliczać i zarejestrować w dużej liczbie na np 4 bajtach czy w kilku takich zmiennych???


    Nie wiem czy użytkownik mirekk36 dobrze mnie zrozumiał.
    nie potrzebuję zliczyć ile tych impulsów wystąpi w ciągu tygodnia, tylko mam zarejestrować krzywą ich występowania (dokładnie rzecz biorąc urządzenie ma zarejestrować obciążenie na liczniku energii elektrycznej wyposażonym w wyjście impulsowe generujące 2000imp/kW, przy założeniu iż maksymalne obciążenie będzie wynosić 3kW) i upraszczając to do tego stopnia żeby każde 2 minuty zapisywać na 1 bajcie będę potrzebował 7*24*30=5040 bajtów
  • Poziom 42  
    tomaszek1988 --> ok też myślałem że może coś nieprecyzyjnie napisałeś albo ja źle zrozumiałem ;)

    Ale teraz wszystko dla mnie jasne i dla ciebie chyba także jeśli chodzi o możliwość zastosowania zewn. pamięci EEPROM o dużej pojemności.
  • Poziom 19  
    Cytat:
    Nie wiem czy jestem w błędzie ale popularny AVR wchodzi w grę jedynie w przypadku zastosowania zewnętrznej pamięci danych, ponieważ urządzenia tego producenta cechują się architekturą harwardzką


    Niezupełnie. AVR nie ma architektury harwardzkiej a jest oparty o zmodyfikowaną architekturę harwardzką. Czasami można spotkać określenie lekko (lub słabo) zmodyfikowana architektura harwardzka. Oznacza to, że możliwy jest odczyt i zapis danych do pamięci programu (czyli flash) w trakcie działania programu. Daje to możliwość zapisu znacznie więcej danych niż do wbudowanego epromu: 16kB, 32kB... minus oczywiście to co zabiera sam kod programu. Odczyt bez problemu natomiast zapis 128 bajtowych stron (dla mega8 i mega16). Ponadto procedura zapisu do pamięci flash musi znajdować się w określonej lokalizacji pamięci programu tzn aplikację piszemy normalnie a procedurkę (lub tylko jej część) umieszczamy w pamięci za pomocą dyrektywy org (lub jej odpowiednika). Uwaga: specjalnie nie używam nazwy bootloader bo to określenie w kontekscie powyższego użycia (jako zapis do pamięci nieulotnej) nie ma sensu.
  • Poziom 27  
    koledze spokojnie wystarczy Atiny2313 z jakimś EEPROM-em np. 25LC1024 (to ten największy w transmisji SPI). Na pozostałe urządzenia spokojnie starczy pinów i pamięci programu. Jeśli chcesz zaszaleć do zakup atmega8. :)
  • Poziom 42  
    ktrot napisał:
    Uwaga: specjalnie nie używam nazwy bootloader bo to określenie w kontekscie powyższego użycia (jako zapis do pamięci nieulotnej) nie ma sensu.


    Tak jak specjalnie nie ma sensu, albo nawet powiedziałbym, że w ogóle nie ma sensu zapisywanie danych z jakichś rejestratorów do pamięci FLASH procesora, to już przerost formy nad treścią. Możliwe to to jest, tylko po co? skoro można i taniej i pewniej a na dodatek o wiele łatwiej z zewnętrznym EEPROM'em.

    Dlaczego taniej??? bo tak jak mówił kolega wyżej wystarczyłby do tego procek ATiny w niskiej cenie i kostka eeprom w niskiej cenie a jeszcze by ba dobre piwo starczyło gdyby chcieć w zamian za to kupować ATmega32 może 64 a może nawet jak potrzeba by było dużo pamięci to i ATmega128 hmmmm???

    Moim zdaniem nie tędy droga.
  • Pomocny post
    Poziom 27  
    procek z 5 PLN, pamięć też coś koło tego, kwarc za 2 PLN, stabilizator też coś koło 2 PLN, oporniki i kondensatory nawet z płyty PC-ta a jak dobrze trafić to wszystko to można na starej płycie od baby-at odszukać z wyjątkiem samego procka. Czyli masz kolego swoją "wojnę na złomowisku" za małe pieniądze.:) NO chyba że szaleństwo ciebie ogarnie wtedy trzeba kupić zestaw eksperymantalny za np. 130 PLN zatem jak kol. mirek radził starczy i na piwo i na gorzałe, zagrychę i ogórki.
  • Poziom 19  
    Po pierwsze odpowiadałem na pytanie czy można zapisać dane z rejestratora w atmega8? Odpowiedź: tak można.
    Po drugie czy do zapisu 5k danych taniej wychodzi attiny2313+eeprom czy tylko atmega8: attiny 4-6zł atmega8 5-7zł. Jeżeli kupisz eeprom 64k za 1-2zł to wyjdzie porównywalnie (tylko gdzie można za tyle dostać eeprom 64k?). O tym żeby zostało na piwo nie ma mowy.
    Po trzecie, dla mnie układ zbudowany na jednej kości jest prostszy od takiego złożonego z dwóch, ale może jestem wyjątkiem...
  • Poziom 10  
    ktrot więc jakie polecasz rozwiązanie?

    Dodam że cena jest tutaj kwestią drugorzędną - najważniejsze jest to żeby układ dało się w miarę prosty sposób oprogramować. Wiem że prawie wszystko da się zrobić, tylko żeby się nie przejechać przez to że zaoszczędzę kilka złotych a będę musiał dorzucić wiele linii kodu - nie chcę się pchać w jakieś kombinowanie, a użyć sprawdzonych metod i sposobów rozwiązania tego zagadnienia.

    Pozdrawiam
  • Poziom 19  
    Polecam atmega8 + eeprom. Oprogramowanie zapisu do pamięci flash uc wymaga znajomości programowania w asemblerze oraz przekazywania danych z języka wysokiego poziomu do asemblera. Do obsługi eepromu zarówno po spi jak i i2c znajdziesz dużo przykładów w sieci. Raczej nie polecam attiny2313 - jak pisałem wyżej niewielka róznica w cenie a tylko 2k pamięci w attiny może spowodować kłopoty z pamięcią, jeżeli oprócz rejestrowania i wyświetlania na lcd będziesz chciał dodać jakąś obróbkę zebranych danych np liczenie energii zużytej w określonym przedziale czasowym czy wyszukiwanie największych poborów prądu.
  • Poziom 38  
    Mo i można zamienić na ATMega168 albo 328 w tej samej płytce- jakby pamięci było mało.
  • Poziom 27  
    ktrot napisał:
    Oprogramowanie zapisu do pamięci flash uc wymaga znajomości programowania w asemblerze oraz przekazywania danych z języka wysokiego poziomu do asemblera.

    Gdzie kolega coś takiego wyczytał ? To nie prawda nie trzeba znać asm aby zapisać coś we flash-u. Poza tym flash to nie miejsce do odkładania zapisanych danych.

    ktrot napisał:
    Raczej nie polecam attiny2313 - jak pisałem wyżej niewielka róznica w cenie a tylko 2k pamięci w attiny może spowodować kłopoty z pamięcią

    To także nieprawda, bo do zastosowania opisanego przez autora to nawet za dużo. Jednak Attiny nie ma sprzętowej obsługi SPI więc seria Atmega będzie zdecydowanie lepsza własnie przez prostote obsługi zapisu/odczytu SPI.
    Poza tym kol krot mając wyraźną "niechęć" do układów zlożonych więcej niż jednej "kości" wiele nie zdziałasz bo kiedyś pojawi się ta druga a może i trzecia i kolejna.
    Kol.autorze miałes parę postów wyżej w zasadzie gotowe rozwiązanie, zamknij ten post, złóż układ i zacznij programować min Atmega8 + pamieć SPI im większa tym lepiej. :)
    PZDR
  • Poziom 29  
    Co wiemy o impulsach z licznika energii, są jakoś formowane, filtrowane?
    Zdaje mnie mi się, że należałoby dodać jakiś cyfrowy filtr (robiony programowo).
    Co robić ze zbyt krótkimi, zbyt długimi?
    Co zrobić po resecie?
    Trzeba by przewidzieć oznaczanie pomiarów jako „nie pewne” i to może na kilka sposobów.
    Jakaś suma kontrola może te nie byłaby zła. Trzeba zapisać czas rozpoczęcia rejestracji, a może i czas zakończenia, a może nawet oznaczać sumą i czasem każdy pomiar?
    Zmiana czasu letni/zimowy
    A co będzie gdy ktoś w trakcie rejestracji przestawi zegarek?
    Tak czy siak, bajt na dwie minuty to zbyt mało.
    A może karta SD, albo nawet dwie? Miłą cechą byłaby rejestracja ciągła z możliwością "podkradania" już zebranych pomiarów.
    Izolowany wlot (i wylot). Nie byłoby bez sensu dodanie baterii (akumulatorka) podtrzymującej.
    Zamiast kwarcu może DS32kHz

    warto sprawdzić jak to robią inni, np. Pozyton
  • Poziom 19  
    Cytat:
    Gdzie kolega coś takiego wyczytał ? To nie prawda nie trzeba znać asm aby zapisać coś we flash-u. Poza tym flash to nie miejsce do odkładania zapisanych danych.

    Do zapisu danych do pamięci programu (czyli flash) w trakcie działania programu, potrzebny jest dostęp do rejestrów R0,R1,R28..R31 - jest do nich dostęp z poziomu języka wysokiego poziomu inaczej niż przez inline? poza tym procedurka zapisu powinna być krótka - najlepiej <128 ewentualnie <256 bajtów. Są i inne restrykcje - czasowe, lokalizacyjne ale nie będę się dalej o tym rozpisywał. O tym, czy pamięć programu jest odpowiednia do zapisu danych niżej.


    Cytat:
    Jednak Attiny nie ma sprzętowej obsługi SPI

    Ma. Jak każdy avr programowany przez ISP. To w końcu ten sam interface.

    Według założeń podanych przez autora postu - zliczanie i zapis impulsów - 5000 bajtów na tydzień. Do tego wystarczy goła atmega8: 3k wykorzystamy na program oraz pozostałe 5k na składowanie danych. Pamięć flash ma ograniczoną liczbę zapisów ale w takim układzie (raz na tydzień) wystarczy na co najmniej 200 lat. Czy ma sens używać pamięć flash zamiast zewnętrzny eeprom? Dla mnie ma - procedurkę obsługi flash (zapis i odczyt) napisałem kilka lat temu i użyłem jej wielokrotnie. Jak ktoś nie chce to niech nie używa flasha w ten spsoób.

    Uwaga kolegi rpal o tym czy potrafię zbudować układ na więcej niż jednej kości to czysta złośliwość więc nie będę się nad tym rozwodził. Nie obchodzi mnie to.
  • Poziom 27  
    [quote="ktrot"]
    Cytat:
    Cytat:
    Jednak Attiny nie ma sprzętowej obsługi SPI

    Ma. Jak każdy avr programowany przez ISP. To w końcu ten sam interface.
    nie zabieram już głosu, to powyżej wystarczy oraz ślepy upór w pisaniu andronów.
  • Poziom 12  
    rpal napisał:
    ktrot napisał:
    Cytat:
    Jednak Attiny nie ma sprzętowej obsługi SPI

    Ma. Jak każdy avr programowany przez ISP. To w końcu ten sam interface.
    nie zabieram już głosu, to powyżej wystarczy oraz ślepy upór w pisaniu andronów.
    Obaj się mylicie:
    ATtiny13 - po spi można go tylko programować
    ATtiny2313 - ma USI, który jest kompatybilny z SPI (bez chip select'a - ale w przypadku 1 eepromu to nie ma znaczenia)