Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

AVR ATMEGA 328 - chyba za dużo rzeczy jak na jeden procesor

Łukasz88 20 Dec 2017 17:46 717 14
Computer Controls
  • #1
    Łukasz88
    Level 10  
    Witam,

    projektuję stację pogodową. Ma ona zawierać czujnik wilgotności (niekoniecznie jeden) DHT11, czujnik ciśnienia BMP180, czujniki temperatury DS18B20 oraz prosty wiatromierz z kontaktronu i magnesika. Ponadto wyniki pomiarów mają być wyświetlane na 4 wyświetlaczach matrycowych pod kontrolą MAX7219 oraz wysyłane w świat przy pomocy ENC28J60. Wiem, że przesadziłem ale nie będę sam korzystał z tej stacji dlatego tyle "bajerów".

    Wszystko pięknie działa do momentu podłączenia i zaimplementowania w kodzie modułu ENC28J60. Na czym polega problem: po wielu próbach uznałem, że czujniki i wyświetlacz doskonale pracują na wewnętrznym zegarze AVR 1MHz. Moduł Ethernet ani myśli pracować na czymś poniżej 8MHz. I w ten prosty sposób gdy jedna część działa to już druga nie chce, i odwrotnie.

    Pomyślałem, że można by użyć dwóch różnych AVR jeden do czujników i wyświetlacza, a drugi do Ethernetu. Wydaje mi się to jednak przerostem formy nad treścią(??)

    Może macie jakieś inne pomysły? Liczę nawet na te luźne pomysły :)

    Pozdrawiam,
    Łukasz.
  • Computer Controls
  • #2
    User removed account
    User removed account  
  • Computer Controls
  • #3
    tmf
    Moderator of Microcontroller designs
    @Łukasz88 A dlaczego te pozostałe czujniki nie pracują przy 8 MHz? Przecież magistralę przez którą je łączysz można zwolnić - od tego masz preskalery.
  • #4
    Sareph
    Level 24  
    Łukasz88 wrote:
    Wiem, że przesadziłem ale nie będę sam korzystał z tej stacji dlatego tyle "bajerów".
    Nie przesadziłeś, da się na tym CPU, nawet używając tylko 8MHz z wewnętrznego oscylatora dodać jeszcze kilka innych rzeczy, moja oryginalna stacja meteo (tez na 328) miała poza tym co napisałeś dodatkowo czujniki oświetlenia i pyłu, wszystko działało dobrze z tym ENC włącznie. A poza tym, jak Ci tam wyżej napisali. ;)
  • #5
    Łukasz88
    Level 10  
    Witam,

    przepraszam, że sie nie odzywałem - pochłonęły mnie świąteczne obowiązki.

    Dziękuję za Wasze podpowiedzi. Udało się zmusić wszystkie czujniki do współpracy i wypuścić to w LAN. Jedyny problem jaki pozostał to jedna szyna SPI na której pracuje moduł Ethernet i powinien pracować wyświetlacz matrycowy. Niby to działa ale gdy chce coś wypuścić na wyświetlacz to Ethernet umiera i na odwrót. Macie koledzy jakieś pomysły? Master Slave ?

    Pozdrawiam.
  • #6
    atom1477
    Level 43  
    Daj schemat bo nie wiadomo nawet jak to jest podłączone. Czy są osobne linie CS. Itp.
  • #7
    Łukasz88
    Level 10  
    Niestety schematu nie ma. Wszystko powstaje na płytce stykowej ad-hoc. Są osobne Linie CS dla obu urządzeń tj. dla wyświetlacza jest to jeden z pinów portu D, dla modułu ethernet - pin portu B. Czy o takie rozdzielenie linii koledze chodziło ?
  • #8
    atom1477
    Level 43  
    A linie MISO jak są połączone?
  • #9
    Łukasz88
    Level 10  
    Korzystam z bibliotek obsługujących te urządzenia. W każdej z nich można było zadeklarować porty do ich obsługi i wygląda to tak:

    dla ENC28J60: PB2 - CS, PB3 - MOSI, PB4 - MISO, PB5 - SCK
    dla MAX7219: PD2 - CS, PD3 - MOSI, PD5 - CLK
  • #10
    User removed account
    User removed account  
  • #11
    atom1477
    Level 43  
    Łukasz88 wrote:
    dla ENC28J60: PB2 - CS, PB3 - MOSI, PB4 - MISO, PB5 - SCK
    dla MAX7219: PD2 - CS, PD3 - MOSI, PD5 - CLK

    Piałeś przecież:
    Łukasz88 wrote:
    Jedyny problem jaki pozostał to jedna szyna SPI na której pracuje moduł Ethernet i powinien pracować wyświetlacz matrycowy.
  • #12
    Łukasz88
    Level 10  
    atom1477 wrote:
    Łukasz88 wrote:
    dla ENC28J60: PB2 - CS, PB3 - MOSI, PB4 - MISO, PB5 - SCK
    dla MAX7219: PD2 - CS, PD3 - MOSI, PD5 - CLK

    Piałeś przecież:
    Łukasz88 wrote:
    Jedyny problem jaki pozostał to jedna szyna SPI na której pracuje moduł Ethernet i powinien pracować wyświetlacz matrycowy.


    Jak napisał kolega powyżej "co robią biblioteki nie wie nikt". Moge zadeklarować piny we/wy dla sygnałów SPI na dowolnym porcie uC. Aby odpowiedzieć jak to działa moja wiedza jest za mała.

    Korzystam z tych bibliotek:
    https://tinusaur.org/2014/07/14/max7219-driver-for-led-matrix-8x8/
    https://github.com/bprayudha/avr-enc28j60
  • #13
    User removed account
    User removed account  
  • #14
    Łukasz88
    Level 10  
    Piotrus_999 wrote:
    nie masz jednej szyny SP|I tylko dwie bo są na różnych pinach czego nie zauważyłem.


    W takim razie dlaczego obie mają wpływ na swoje działanie ? Może jakieś naprowadzenie na trop ?

    Dodano po 11 [godziny] 50 [minuty]:

    Więc po nocy pracy odpowiem Wam jaki obie szyny SPI mają wpływ na swoje działanie:

    ŻADNY.

    Problem występował gdzie indziej. W przerwaniu wywoływałem funkcję wyrzucającą coś na wyświetlacz. Po dogłębnej analizie tej funkcji okazało się, że autor biblioteki nie szczędził w niej _delay_ms(); i to właśnie na tym polegał problem "zawieszania" pracy ENC28J60 na czas wyświetlania treści na MAX7219.

    Pozdrawiam i dziękuję za pomoc.
  • #15
    User removed account
    User removed account