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

MSP430 - Pobór prądu różny w zależności od pętli delay

TMEA 07 Sty 2014 11:30 702 4
  • #1 07 Sty 2014 11:30
    TMEA
    Poziom 16  

    Witam

    Mam problem z poborem prądu. Jeśli kod jest taki:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    to pobór prądu jest po wejściu do LPM3 na poziomie 2mA ale cała funkcja się wykonuje. Jeżeli wywalę z tej funkcji __delay_cycles(1000000); to pobór prądu jest super - 8uA ale znów nie działa funkcja wysyłania tych TxBuffer. Czemu tak się dzieje? Przerwanie wygląda tak:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 4
  • #2 07 Sty 2014 11:57
    Marek_Skalski
    Moderator Projektowanie

    Może resetujesz radio zanim wyśle dane i dlatego masz niski pobór prądu i brak danych na wyjściu?
    Na pewno wysyłasz wszystkie bajty zanim wywołasz ResetRadioCore(); bez opóźnienia? Nie pokazałeś funkcji Transmit(...); i nie potrafię odpowiedzieć czy sprawdzanie warunku if(!transmitting)... wystarcza.

    0
  • #3 07 Sty 2014 12:05
    TMEA
    Poziom 16  

    Kod: c
    Zaloguj się, aby zobaczyć kod


    wysyła jeśli jest dodany ten delay. Ale znów po wyłączeniu pobiera duży prąd. Jeśli nie ma delaya to nie wysyła chyba bo 2 urządzenie tego nie odbiera ale znów usypia się ładnie :) może radio potrzebuje jakiegoś czasu na reset czy coś?

    0
  • #4 07 Sty 2014 12:15
    Marek_Skalski
    Moderator Projektowanie

    Rozpoczęcie transmisji, tak?

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Flaga wskazująca transmisję w toku, tak?
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Jeżeli transmisja się zakończyła, to włącza odbiornik, tak? Ten warunek będzie sprawdzony tylko 1 raz!
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Oczekiwanie i tutaj trwa transmisja danych.
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Zgaduję, że coś resetujesz w module radiowym. Po tej operacji nie możesz nic wysłać.
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Widzisz już dlaczego nie wysyłasz danych po usunięciu pętli?

    Zamiast if(!transmitting) użyj while i powinno działać.
    edit:
    Chyba, że nigdy nie kasujesz flagi transmitting i jest to tylko sygnalizacja trybu pracy modułu radiowego. Wtedy musisz obserwować flagę zakończenia transmisji (TX buffer empty czy coś podobnego) i dopiero iść dalej. No niestety, ale przesyłanie danych trwa. Nie można załadować bufora i wyłączyć nadajnika, a Ty tak robisz kiedy usuwasz delay. Na pewno z krótszym delay też będzie działać. To tylko 7 bajtów.

    0
  • #5 07 Sty 2014 12:22
    TMEA
    Poziom 16  

    Kod: c
    Zaloguj się, aby zobaczyć kod


    w ten sposób wysyła ale znów po wejściu dalej w LPM3 pobór prądu 2mA czyli jak by czegoś nie wyłączył. Radio trzeba przed resetem jakoś ustawiać jeszcze?

    0