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.

[ATmega128/ATmega8][BASCOM] Stacja meteorologiczna

19 Paź 2009 15:47 9605 25
  • Poziom 10  
    Witam,
    Jestem w fazie projektowania prostej stacji meteo. Projekt podzieliłem sobie na 2 części. Pierwsza część wykonuje pomiary (temperatura otoczenia, prędkość i kierunek wiatru) i zapisuje je na karcie SDC/MMC. Druga część wyświetla pomiary na wyświetlaczu LCD i umożliwia komunikację z PC przez RS-232. Obie część będą znajdowały się w odległości ok. 10 m od siebie.

    Projekt składa się:
    czujnik liniowy halla - [CH-CS3503]
    czujnik unipolarny halla - [CH-CS3144E]
    czujnik temperatury - [DS18B20+]
    ATmega128
    ATmega8

    Mikrokontrolery są połączone przez interfejs SPI. ATmega128 pracuję w trybie MASTER, ATmega8 w trybie SLAVE. Dodatkowo do interfejsu SPI podłączona jest pamięć flash (karta SDC/MMC).

    Jest to w sumie mój pierwszy schemat i prosił bym Was drodzy użytkownicy o rzucenie okiem. Zalarzy mi głównie na sprawdzeniu poprawności podłączenia czujników, czy gdzieś nie potrzeba rezystora itp.

    [ATmega128/ATmega8][BASCOM] Stacja meteorologiczna]
    Darmowe szkolenie: Ethernet w przemyśle dziś i jutro. Zarejestruj się za darmo.
  • Poziom 43  
    Zerknij Tutaj jest bardzo fajna i dość prosta w budowie stacja.
    Zrobiłem ją i mój znajomy również. Stacja działa super.
  • Moderator Programowanie
    Na 100% będą problemy z SPI na 10m .... :(
  • Poziom 42  
    Korzystasz z wejść ADC0-ADC3 w mega128 ale już zasilanie AVCC to "amba" zjadła ? ;) .... eee podobnie zresztą w mega8 (chociaż tam by ci przyfarciło bo przypadkiem by to na tym procku - zadziałało - ale po co jakieś oszczędności na podłączaniu zasilania do wszystkich nóżek do tego przeznaczonych??? - to się zemści kiedyś przykro)

    Poza tym skoro już korzystasz z ADC to wypadałoby dodać kondensator 100nF pomiędzy AVREF a GND.
  • Poziom 10  
    Hm.. Jak 10 metrów na SPI nie da rady, to cały projekt do przebudowy:(
    Chciałem, żeby stacja mogła także działaś samodzielnie bez modułu z LCD. A może połączyć 2 mikrokontrolery przez RS-232? Jest uważacie?
  • Poziom 10  
    W takim razie SPI wykorzystam tylko dla pamięci SDC/MMC. Mikrokontrolery połączę przez interfejs RS-232. Gdy zajdzie konieczność pobrania danych na PC-ta, wyjmę wtyczkę z modułu z LCD i podłącze do komputera. Trochę nie eleganckie jest te rozwiązanie, ale innego wyjścia nie widzę. Przed wszystkim zależy mi, aby urządzenie zbierające pomiary było samodzielne i mogło pracować bez modułu z LCD czy połączenia z PC-tem.
    Poprawie schemat i wrzucę jeszcze raz do wglądu.
  • Poziom 42  
    Zamiast Atmega8 możesz wziąć ATmega88 - wtedy można sobie zdaje się wygospodarować drugi sprzętowy UART. Atmega128 ma od razu 2 gotowe UART'y. A poza tym można sobie prościutko zrobić za pomocą MAX485 - magistralę RS485 zamiast RS232 no i wtedy możesz się bez problemu kontaktować z dowolnym z tych 2 procków za pomocą PC'ta. Trzeba tylko sobie ustalić który będzie Masterem.
  • Poziom 10  
    mirekk36 napisał:
    Zamiast Atmega8 możesz wziąć ATmega88 - wtedy można sobie zdaje się wygospodarować drugi sprzętowy UART. Atmega128 ma od razu 2 gotowe UART'y. A poza tym można sobie prościutko zrobić za pomocą MAX485 - magistralę RS485 zamiast RS232 no i wtedy możesz się bez problemu kontaktować z dowolnym z tych 2 procków za pomocą PC'ta. Trzeba tylko sobie ustalić który będzie Masterem.


    Czyli jak mam 2 x UART na ATmega128, to mogę zrobić 2 x RS-232. Jedno do modułu z LCD, a drugie do PC-ta. Druga opcja to zrobić komunikację przez RS-485.
    Hm..Trochę poczytałem na forum i myślę, że wersja z 2x RS-232 będzie prostsza do zaprogramowania.
    A i jeszcze jedna rzecz. W ATmega8 mam zewnętrzny kwarc 8MHz. Czy w ATmeg128 muszę też go zastosować dla poprawności transmisji?
  • Poziom 42  
    chander napisał:

    A i jeszcze jedna rzecz. W ATmega8 mam zewnętrzny kwarc 8MHz. Czy w ATmeg128 muszę też go zastosować dla poprawności transmisji?


    ja nie wiem w ogóle po co ci ten kwarc w Atmega8 - skoro ona ma tylko obsługiwać transmisję RS232 i LCD + jakieś jeszcze tam drobiazgi. Noo - chyba, że chcesz koniecznie jakieś wyższe prędkości transmisji RS232 np 115200bps ale wtedy lepiej by było zastosować jakiś kwarc "przyjazny dla RS232" jeśli już.

    Tymczasem jeśli chodzi o wymianę niewielkiej ilości danych to prędkość 9600 najspokojniej w świecie można uzyskać przy wewn. oscylatorze 8MHz. Więc zastanów się nad tym , że tak powiem "okwarcowaniem procków" ;)

    oczywiście jak się uprzesz w jakimś celu na ten kwarc 8MHz to w niczym nie przeszkadza aby inny procek był bez kwarca - w czym to miałoby zaszkodzić?
  • Poziom 10  
    Na szybkości transmisji mi bardzo nie zależy, więc w sumie bez kwarców się mogę obejść.
    Ten schemat jest w ogóle zlepkiem kliku schematów zamieszczonych w sieci. Ja go tylko poskładałem do własnych celów, stąd błędy czy dziwne rozwiązania :)
    Wprowadzę zmiany, poprawie wymienione przez Was błędy i zamieszczę schemat do wglądu.
  • Pomocny post
    Moderator Mikrokontrolery Projektowanie
    Po pierwsze ten wewnetrzny to nie kwarc tylko generator RC. Proponowalbym ci jednak jesli zamierzasz wykorzystac rs232 dac kwarc do procesora. Twoja stacja bedzie narazona na skrajne temperatury, a wtedy wewnetrzny RC niezle plywa. No i pytanie zasadnicze - po co ci az ATMega128, BASCOM jest az tak pamieciozerny? No i po co ci dwa procesory? Prosciej dac jeden i RS485, raczej nie rs232 bo ten tez ma ograniczenie spore co do dlugosci kabla. Chyba, ze satysfakcjonuja cie bardzo male predkosci. Jesli je musisz laczyc to po SPI tez pojdzie, tyle, ze potrzebujesz z obu stron nadajnik/odbiornik linii. No i generalnie potrzebujesz dobre zabezpieczenia ESD, bo ci z tych kabli beda pioruny lataly.
  • Poziom 10  
    tmf napisał:
    Po pierwsze ten wewnetrzny to nie kwarc tylko generator RC. Proponowalbym ci jednak jesli zamierzasz wykorzystac rs232 dac kwarc do procesora. Twoja stacja bedzie narazona na skrajne temperatury, a wtedy wewnetrzny RC niezle plywa. No i pytanie zasadnicze - po co ci az ATMega128, BASCOM jest az tak pamieciozerny? No i po co ci dwa procesory? Prosciej dac jeden i RS485, raczej nie rs232 bo ten tez ma ograniczenie spore co do dlugosci kabla. Chyba, ze satysfakcjonuja cie bardzo male predkosci. Jesli je musisz laczyc to po SPI tez pojdzie, tyle, ze potrzebujesz z obu stron nadajnik/odbiornik linii. No i generalnie potrzebujesz dobre zabezpieczenia ESD, bo ci z tych kabli beda pioruny lataly.


    Potrzebna mi ATmega128 do obsługi kart SDC/MMC.
    Chce użyć 2 uC po to, aby urządzenie mogło pracować (dokonywać i zapisywać pomiary) samodzielnie. A jeśli zajdzie potrzeba lub chęć wyświetlenia 'wyników' na LCD to moduł z LCD ma to umożliwić. Analogicznie jest z komunikacją z PC-tem. Podłączam się pod urządzenie w celu pobrania pomiarów (raz na jakiś czas) lub na stale i w sofcie który mam zamiar napisać można będzie monitorować bieżące parametry pogodowe i przeglądać statystyki.
    PS. Taki jest plan;)
  • Moderator Mikrokontrolery Projektowanie
    A dlaczego uwazasz, ze jeden procesor nie umozliwi samodzielnej pracy urzadzenia? Niepotrzebnie komplikujesz uklad, a nie obraz sie, sadzac po tym o co pytasz ta niepotrzebna komplikacja spowoduje, ze nigdy go nie uruchomisz.
  • Poziom 10  
    Nie obrażam się :)
    Dlaczego założyłem, że projekt będzie 'lepszy' gdy zrealizuję go 2 uC?
    Więc, darmowa wersja BASCOMA AVR umożliwia skompilowanie kodu o maksymalnej wielkości 4KB. Pomyślałem sobie, że podzielę cały program na 2 części, żeby nie trzeba było crackować środowiska;) Sam kod obsługi kart SDC/MMC zajmuję ok. 4KB i umieścił bym go w 1 uC. Drugi uC służył by jedynie do przeliczania danych z sensorów do wartości odczytywanych dla człowieka.
    Sam się już zastanawiam, czy może lepiej zmienić język na C, czy może pozbyć się jednego uC...
  • Poziom 42  
    tak z ciekawości - skoro dysponujesz tylko Bascomem który kompiluje do 4kb kodu - to po jaką choineczkę ci taka armata jak ATmega128??? ;) szok

    rzeczywiście, jeśli znasz C albo i tak zamierzasz się go uczyć - to może warto właśnie o nim pomyśleć ;) pozbędziesz się przynajmniej ograniczeń co do ilości kodu, sam kod będzie o wiele chudszy - a w efekcie końcowym cały projekt zrobisz na jakimś ATmega8/88 lub ATmega168 - w porywach nawet jakaś jeszcze większa mega - np ATmega32
  • Poziom 10  
    mirekk36 napisał:
    tak z ciekawości - skoro dysponujesz tylko Bascomem który kompiluje do 4kb kodu - to po jaką choineczkę ci taka armata jak ATmega128??? ;) szok

    rzeczywiście, jeśli znasz C albo i tak zamierzasz się go uczyć - to może warto właśnie o nim pomyśleć ;) pozbędziesz się przynajmniej ograniczeń co do ilości kodu, sam kod będzie o wiele chudszy - a w efekcie końcowym cały projekt zrobisz na jakimś ATmega8/88 lub ATmega168 - w porywach nawet jakaś jeszcze większa mega - np ATmega32


    Koledzy pisałem już kilka razy. ATmega128 jest potrzebna do obsługi karty SDC/MMC :)
    Innen uC w sensie 'uboższe' mają za mało pamięci SRAM, żeby wczytać cały klaster 512bitów z kary pamięci.
    PS. Mogłem coś namieszać, ale sens ogólny jest zachowany :)
    Cytat z BASCOMOWEGO helpa:
    "(...)najlepszymi kontrolerami do tego celu są układy Mega103 lub Mega128. Inne układy posiadają zbyt mało wewnętrznej pamięci. Można także używać układu Mega8515 czy Mega162 z dołączoną pamięcią XRAM.
    (c) Zbigniew Gibek, 2002-2005 (c) MCS Electronics, 1999-2005"

    Nad językiem C się zastanawiam. Znam C# i Jave, co prawda obiektowe, ale składnia podstawowych instrukcji bardzo podobna
  • Pomocny post
    Poziom 42  
    chander napisał:
    Nad językiem C się zastanawiam. Znam C# i Jave, co prawda obiektowe, ale składnia podstawowych instrukcji bardzo podobna


    dokładnie - składnia i zasady działania nie będą w takim razie dla ciebie problemem ;) .... jak musiałem się tego uczyć od początku na mikroklocki.... bo na PCtach programowałem tylko w Delphi/Pascalu - a teraz? ;) .... teraz zaczynam już myśleć w C także na PCtach

    ..... a pisząc w C będziesz miał tę dodatkową zaletę, że bardzij i dogłębniej poznasz procki - to się bardzo przydaje - więc osobiście polecam naukę np AVR GCC ;)
  • Moderator Mikrokontrolery Projektowanie
    Wystarczajaca ilosc SRAM ma juz ATMega16 (1kB), czyli jeden sektor + dodatki. Chyba, ze implementacja SD w Bascomie jest tak skopana, ze wymaga wiecej, wtedy ATMega32 (2kB)
    A moze zrezygnowac ze struktury FAT i pisac po sektorach, wtedy nie potrzebujesz bufora SRAM. Albo jeszcze inaczej - spreparowac karte SD z FAT i nagranym jednym ogromniastym plikiem zajmujacym cala karte. Wtedy tez piszesz po sektorach, bez koniecznosci posiadania bufora.
  • Poziom 10  
    Myślę, że wziąłem się za projekt ze złej strony. Na początku zacznę od mniej skomplikowanych operacji czyli pobraniu danych z sensorów, przetworzeniu ich i wyświetleniu na LCD. Jak uporam się z tą częścią projektu, to wezmę się za zewnętrzną pamięć flash czy komunikacja 2 x uC.
    Nie ukrywając, jestem w temacie 'świeży', więc zacznę moją przygodę schodkowo :)
    Jeśli chodzi o język, to zacznę pisać w BASCOM-ie, ale równocześnie pobawię się w C. Prawdopodobnie będzie tak, że w BASCOM-ie nie da rady zrobić obsługi SDC/MMC, ze względu na ograniczenie wersji freeware, dlatego istnieje szansa na ewolucję softu na język wyższego poziomu, a wtedy wiedza i kod napisany w C na pewno się przyda :)
  • Poziom 43  
    chander :arrow: zaglądnij na opisy stacji, które podałem w poście powyżej. Tam naprawdę jest to zrealizowane bardzo prosto, a transmisja między modułami jest bezprzewodowa.
  • Poziom 28  
    co do avr-dos:

    (c) Zbigniew Gibek, 2002-2005 (c) MCS Electronics, 1999-2005 napisał:

    Wymagania:

    · Sprzęt: zobacz notę aplikacyjną AN 123 (http://www.mcselec.com/an_123.htm).
    · Pamięć kodu: około 4KB (2K słów).
    · Pamięć SRAM: 561 bajtów na informacje o systemie plików oraz bufor katalogu plików. 517 bajtów gdy FAT jest obsługiwany przez własny bufor (dla zwiększenia szybkości), inaczej FAT jest obsługiwany przez bufor katalogu plików.
    · 534 bajtów dla każdego uchwytu pliku.


    Jak nie masz zcrakowanie lub kupionej wersji bascom to nie ma sensu wogule tego projektu zaczynac w tym jezyku. Miejsca ci na 100% nie starczy
    Mozesz tez zrobic oblusge kart sd/mmc na atmega32 w fata. Jak nie bedziesz mial ograniczen od strony kompilatora, to nie bedzie mial problemu sie zmiescic w tym jednym procku.

    Co do jezyka napewno tez polecam c, niestety ja umiem tylko c pod kompa ale staram sie przestawic.
  • Poziom 10  
    Freddy napisał:
    chander :arrow: zaglądnij na opisy stacji, które podałem w poście powyżej. Tam naprawdę jest to zrealizowane bardzo prosto, a transmisja między modułami jest bezprzewodowa.


    Zajrzałem, zarejestrowałem się, pobrałem pliki. W załącznikach do tamtego tematu nie ma schematów. W sumie to nie chce kopiować całego rozwiązania bo nic z tego nie zrozumiem :( Zamówię sobie czujniki, podłącze je pod ATmega8, ewentualnie połączę z PC-tem przez RS-232.
    Jak to już zrealizuję to pomyślę o kartach SD/MMC, chodzi mi po głowię także po głowię AVT1443. Wtedy wpiął bym sobie stację pomiarową do sieci LAN. Zewnętrzna pamięć była by wtedy nie potrzebna, bo pomiary można by było wysyłać sobie na pocztę lub ftp.
    Tak czy inaczej czas pokaże czy zostanę na ATmeg8+sesnsory+RS-232+ BASCOM, czy może jakiś potężniejszy uC+sensory+LAN+pamięć SDC/MMC i oczywiście całość już napisana w C
  • Pomocny post
    Poziom 43  
    Są w innym topicu, ale masz załączam ostatni soft i hardware.
    Poza tym nie musisz kopiować całości, ale poszczególne rozwiązania.
  • Poziom 10  
    Freddy napisał:
    Są w innym topicu, ale masz załączam ostatni soft i hardware.
    Poza tym nie musisz kopiować całości, ale poszczególne rozwiązania.


    Dzięki Freddy, wieczorem przejrzę te pliki :)
  • Poziom 10  
    Witam,

    Zaprojektowałem prototyp mojej stacji meteo w oparciu o dokumentację techniczną zastosowanych elementów:

    - ATmega8
    - MPX4115A
    - DS18B20
    - TLE4905G
    - SS49

    Komunikacja przez RS-232, PC zleca wykonanie pomiaru. Jako, że to prototyp, układ będzie zasilany z programatora USB

    Schemat:
    [ATmega128/ATmega8][BASCOM] Stacja meteorologiczna

    Prosił bym forumowiczów o sprawdzenie poprawności schematu.
    Dziękuję