Skip to main content


Tak to vypadá, že mě CAN na ESPčku pěkně vypekl. Několik hodin jsem se mořil s tím, proč mi nechodí žádné zprávy až jsem dospěl do stádia, které se v logických hrách nezývá "zkus všechno použít na všechno" 😀 Takže jsem zjistil (sláva logickým analyzátorům!), že když mám jedno ESPčko, tak vysílá, jakmile propojím dvě, tak na sběrnici ticho a způsobuje to TX pin. Jakmile ho odpojím na přijímací straně, zprávy chodí.

Mám prozatímní hypotézu, že je to tím, že:

1. protože je CAN multimaster, rozlišuje se tam ne logická nula a jednička, ale "recesivní" a "dominantní" stav. Recesivní znamená "nechávám sběrnici na pokoji" a dominantní znamená "stáhnu sběrnici do nuly".

2. STMka jsou udělaná tak, že u nich stačí RX a TX spojit a použít jeden drát ke spojení napřímo, bez transciveru. U ESPčka to nejspíš nejde asi proto, že ESPčko potřebuje nutně mít za pinem transceiver, protože v "recesivním" stavu nenechá pin napokoji, ale nastaví ho na 1. Čímž sběrnici efektivně totálně utlumí (navíc tím jde vysílaná nula přímo proti nastavené jedničce, což není úplně dobrý).

To je teda docela opruz. V praxi to znamená, že ESPčko nemůže fungovat jako převodník, jenom jako pasivní odposlouchávání sběrnice 🙁

Navíc CAN funguje tak, že se očekává, že alespoň jeden uzel na sběrnici příjem zprávy potvrdí. Kromě ESPčka teda na sběrnici musí být aspoň jeden uzel. No, takže jásání bylo předčasné 🙁 Transceivery dorazí z dálného východu až za dlouho (a ještě jsem, blbec, koupil pětivoltové 🙁 )
Unknown parent

Miroslav Prýmek
Rikals "hromadu" 😀
Unknown parent

Miroslav Prýmek
Ajo, tak to jo. Takova zasoba se hodi, kdyz cloveka chytne slina, aspon nemusi cekat na balicky 😀 Taky se mi tady vali vselijaky veci, co jsem si kdysi koupil a pak na ne ani nesah. Sem tam jsem fakt rad, ze neco takovyho netknutyho mam, kdyz se to zrovna z nicehoznic hodi 😀
Unknown parent

Miroslav Prýmek
Tak jsem nad tím včera v noci ještě seděl a dál to zkoušel a hypotéza byla nejspíš špatná: v tom demu, který mám pro STMka se explicitně přepíná TX pin do open drain módu (takže do nuly drát aktivně stahuje, ale do jedničky ne). Knihovna pro ESP nastavuje normální OUTPUT. Zkoušel jsem to taky předělat na open drain, ale nepodařilo se. Nevím proč, příčinu jsem nenašel, je to strašně pracný ladit.

Každopádně jsem někde na webu narazil na radu, kterou když jsem četl, tak jsem se studem málem propadl, že mě to nenapadlo: před TX pin stačí předřadit diodu! OMG! Pak může být pin nastavenej jak chce, nula na sběrnici projde, jednička neprojde. Jak říká klasik: "a přitom taková blbost"! Ale pro samý zkoumání a debugování jsem neměl čas se zastavit a zamyslet!
in reply to Miroslav Prýmek

Uffff, tak konečně to valí perfektně, spolehlivě. Metoda s diodou před TX pinem je opravdu spolehlivá. ESPečko už mi bridguje tam i zpátky do linuxové slcan síťovky. Konečně!!! To bylo ale trápení 😀 Ale aspoň jsem se zas něco naučil.

Tak, a teď už si můžu vesele zprovoznit malou CAN sensorovou síť! Juchů!