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.

[Bascom][Atmega128] Odczyt danych z ESP8266

pier 21 Jun 2017 18:43 1563 7
  • #1
    pier
    Level 23  
    Witam.

    Odczytuję dane z ESP8266 przez uarta takim sposobem:

    Code: vbnet
    Log in, to see the code


    Ramki danych wysyłane przez ESP mają taki format:
    Code:

    Czas,17:28
    Thingspeak,20.1,45,998.1,4.1
    Forecast,H,F,B


    Chciałbym je w taki sam sposób odebrać. Kawałek programu który zamieściłem jakoś tam działa. Dane są poprawne ale dowolnie pozamieniane między sobą i wyświetlane strasznie chaotycznie.

    Dodam że ramki z danymi z ESP wysyłane są w taki sposób że po uruchomieniu ESP-ka lecą wszystkie dane tak jak wyżej napisałem a później tylko czas co minutę a reszta danych tylko jeśli są inne niż na początku.

    Prędkości uart-u mam dobrze poustawiane. Jest to 38400 przy kwarcu 16Mhz.

    Proszę o jakieś sugestie co robię źle.
  • #2
    pier
    Level 23  
    Poradziłem sobie z odczytem.
    Mam dane tak odebrane jak chciałem ale powstał inny problem.

    Odczyt z uart-a zajmuje strasznie dużo czasu. Blokuje to strasznie pozostałą część programu. Jak sobie z tym poradzić?


    Code: vbnet
    Log in, to see the code
  • #3
    User removed account
    User removed account  
  • #4
    pier
    Level 23  
    niveasoft wrote:
    Obecnie taki odbiór rozwiązuję inaczej, ale w Twoim wydaniu coś czuję że to nie odbiór danych przy taktowaniu 16MHz zajmuje dużo czasu a bardziej wyświetlanie tego na LCD.

    Jeśli by Ci to odpowiadało to możesz: odebrac dane, i zrobić z nich tą tablice stringów po czym ustawić jakąś flagę "Refresh_lcd"
    Potem w każdym przejściu pętli wyświetlać/odświeżać tylko jeden z tych napisów/stringów. No i kiedy index wyświetlanego napisu = 9 to koniec Refresh_lcd

    Czyli odświeżanie lcd zajmie 9 przejść pętli ale a w tym czasie procesor będzie miał 9 możliwości by reagować na inne warunki.



    Pewnie Masz rację. Lcd działa bardzo wolno a to za sprawą takiej a nie innej biblioteki.
    Docelowo dane pobierane z ESP będą odświeżane na lcd nie częściej niż co 30min a więc myślę że nie będzie to takim problemem.
    Dzięki za odpowiedź.

    Dodano po 9 [godziny] 59 [minuty]:

    Jednak nie obsługa wyświetlacza jest problemem.

    Zrobiłem licznik który zwiększa się w pętli. Dopóki nic nie ma na uarcie to licznik cały czas się zwiększa. Kiedy uart odbierze ramkę danych program zatrzymuje się aż do odebrania następnej ramki. I tak w kółko, program startuje tylko na jeden obrót co minutę, wtedy kiedy przychodzą dane przez uart.
  • #5
    User removed account
    User removed account  
  • #6
    pier
    Level 23  
    Raczej problemem jest sama komunikacja po uart bo cały program bez niej działa jak należy.
    Mam jeszcze jedno podejrzenie co może być nie tak. Jak sprawdzę to napiszę.

    Dodano po 38 [minuty]:

    Myślałem że to budowa ramki danych jest problemem ale niestety nie.

    Wielkość ramki $framesize mam ustawione na 150.

    Dodano po 15 [minuty]:

    Dodaję uproszczony program jak Pisałeś.

    Code: vbnet
    Log in, to see the code



    W procedurze odczytu z Uart-a mam trochę nawrzucane rzeczy ale to nie ma znaczenia bo bez tego śmiecia też program się wiesza i "ożywa" tylko raz na minutę jak odbierze dane z Uart-a.
  • Helpful post
    #7
    User removed account
    User removed account  
  • #8
    pier
    Level 23  
    niveasoft wrote:
    To się i tak nie kompiluje bo brakuje połowy rzeczy. Miałeś przygotować coć co się kompiluje...

    Znalazłem jednak jedną cechę wspólną Twoich kodów wiec przypuszczam, że to nie literówka.. otóż kiedy uC ustawi flagę że odebrał uzgodniony znak czyli ustawi Got_match = 1 to potem testujesz ten warunek w pętli głównej...
    ..zapomniałeś jednak o jednym. Musisz skasować flage Got_match = 0 bo inaczej to program będzie to mielił wiecznie, hehehehe, w kółko :D

    Ciekaw jestem czy to tylko ta błahostka :D



    Bingo.

    Kurcze sam bym jeszcze wieki spędził żeby to znaleźć.

    Wielgaśne dzięki za pomoc.