piątek, 16 grudnia 2016

NANO do D1 mini > "nie chce mi się z tobą gadać"

Czy dedukcja może zastąpić porządny oscyloskop?


Dziś miała być druga część tasiemca o własnych bibliotekach ale zdecydowanie wygrał temat na wskroś elektroniczny. A było to tak ....

Pięknie działający i bajecznie prosto dający się zaprogramować D1 mini postanowiłem użyć jako moduł uruchomieniowy w połączeniu z NANO. Idea była prosta - łączymy oba moduły po serialu a programujemy je i podglądamy przez znajdujące się na obu modułach konwertery USB/serial typu CH340. Dwa moduły - dwa USB - dwa Arduino IDE (CC i ORG) - dwa monitory seriala. Czyli pełna praca równoległa. W teorii bajka - w praktyce ....

Najsampierw próba wgrania do D1 mini ESPowej części kodu BRAMA 3,5 skończyła sie tym co zawsze - moduł ESP pięknie resetuje się co 10 sek pokazując stary (2013r.) SDK. Nic prostszego jak wgranie nowego firmware. Nic prostszego tylko jakie adresy bloków są właściwe dla ESP-12F (4MB flash) Tabela w dokumentacji SDK nie daje 100% odpowiedzi



Adresy dla bloków 512+512 czy 1024+1024?. Wybieram na początek 512+512.
Pytanie drugie - jeśli moduł D1 mini programuje się w Arduino IDE na prędkości 921600 to jak go zaprogramować za pomocą ESP_DOWNLOAD_TOOL_V2.4 kiedy ten ma prędkość max 576000 ?


Uruchomiłem na prędkości 576000 - działa! co więcej działa też na niższych prędkościach. Dziwy jakieś czy co?

Szybko więc wgrywam nowy firmware (opis w poprzednich postach) dogrywam drugą część programu BRAMA 3,5 - i znowu sukces - na porcie seriala cyklicznie pojawiają się komendy do sterowania LEDem w NANO i radośnie miga vLED w aplikacji BLYNK.

Zadowolony z siebie przyłączam płytkę BRAMA3 z modułem NANO i .... kicha. A w zasadzie pół kichy. W jedną stronę chyba coś działa - oba LEDy na płycie NANO migają  ale aplikacja BLYNK pokazuje coś innego - brak komunikacji z NANO via ESP.

Dobrą godzinę zajęło mi szukanie uszkodzenia. Wyraźnie był jakiś problem w komunikacji z NANO do ESP (D1mini). Nie miałem pojęcia czy błąd jest programowy czy sprzętowy. Monitor seriala NANO pokazywał na wyjściu prawidłowe ciągi komend do ESP natomiast monitor seriala ESP pozostawał dziewiczo czysty jakby nic do niego nie dochodziło. A przecież o tylko 5 cm druku na płytce pomiędzy Tx NANO a Rx ESP i 10 cm kabelka łączącego gniazdo ESP-01 na płytce z modułem D1 mini. Połączenie jest a komunikacji nie ma! Niemalże jak w małżeństwie .....

Zrobiłem więc test wersji działającej - z działającego modułu BRAMA 3 wstawiam ESP-01 i dogrywam do NANO poprzednią wersję programu - to działa. Już jest nieźle. Wgrywam więc poprzednią wersję programu do D1. To samo - połączenie  jest ale układy nie słyszą się wzajemnie.
Dziwne bo przecież D1 mini to ten sam procesor co ESP-01 a po drodze na pin Rx na złączu obu modułów nie ma niczego  - oba moduły mają  galwaniczne połączenie tego pinu z wyjściem  mikroprocesora.

Skończyłoby się pewnie na pruciu ścieżek gdyby nie natchnienie. Na płytce BRAMA3 po drodze z NANO do ESP  zastosowałem dzielnik dopasowujący poziomy napięć (z 5 -> 3V3) obu procesorów.




 I choć po drodze pomiędzy pinami NANO i ESP nie ma nic innego niż ten mój dzielnik to jednak na oby końcach dzielnika oprócz pinów procesorów dopięte są piny CH340 z szeregowymi opornikami. Po stronie NANO przyłączony CH340 nie ma żadnego znaczenia - wyjście Tx NANO ma wystarczającą wydajność  i poziomy napięć w tym punkcie napewno są prawidłowe i w stanie 0 i 1. Po stronie ESP sprawa jest bardziej złożona. Na wejściu Rx ESP do napięcia z dzielnika 1k/2k dodawane jest jeszcze poprzez rezystor 470 om napięcie z wyjścia Tx CH340 znajdującego się na płytce D1 mini. Napięcie w punkcie Rx zależy więc nie tylko od stanu wyjcia Tx NANO ale też od stanu wyjścia Tx  CH340. Jakie napięcie naprawdę panuje na tym pinie podczas transmisji serialem  jest nie do pomierzenia żadnym miernikiem - potrzeba już do tego  oscyloskopu. Ale zapewne albo poziom 1 albo poziom 0 wykracza poza dopuszczalne granice i ESP nie dekoduje prawidłowo przesyłanych serialem bajtów.

Stawiam na błędy poziom 0 na wejściu Rx. Problem po zdiagnozowaniu prawdopodobnej przyczyny da się łatwo rozwiązań zastępując rezystor 1 k diodą ( najlepiej diodą shottkyego bo ma mniejszy spadek napięcia) skierowaną w stronę NANO. Dzięki temu niski stan na wyjściu Tx NANO wymusi niski stan + 0,5-0,6 V na wej Rx ESP8266. Zakładam, że tolerancja napięć seriala ESP mieści się w granicach 0 = 0 - 1/3 Vcc   1 = 2/3 - 1 Vcc.  Dioda powinna więc wymusić prawidłowy stan 0.

Po dolutowaniu diody ESP zaczął odbierać informacje z NANO choć dioda przepuszcza prąd dokładnie w odwrotnym kierunku niż kierunek przesyłania informacji - a jednak to działa. Niemalże jak w małżeństwie .....

Wniosek z powyższego doświadczenia jest jeden - trzeba zacząć zbierać do świnki na porządny oscyloskop. Oscyloskopem problem zostałby zdiagnozowany w minutę!

Plan na dziś można uznać za  wykonany
- dwa moduły NANO i D1 mini spięte razem działają - OK


- dwa programy Arduino IDE z programami dla NANO i ESP pracują równolegle - OK


- dwa monitory seriali na COM9(NANO) I COM15(ESP) działają - OK


Czyli stereo i w kolorze .....
I to by było na tyle ...........

1 komentarz:

  1. Też buduje moją ładowarkę na Atmega8 + wyświetlacz 16x2. A jak nie masz oscyloskopu to może to Ci się przyda http://forum.arduinopolska.com/watek-arduino-jako-oscyloskop

    OdpowiedzUsuń