Pavouk Hiwonder

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Odpovědět
Uživatelský avatar
gilhad
Příspěvky: 886
Registrován: 07 bře 2018, 11:22

Re: Pavouk Hiwonder

Příspěvek od gilhad » 24 dub 2026, 05:40

Pak bych skutečně zkusil všechny ty "neznámé" piny na začátku nastavit na INPUT a něčím v průběhu činnosti měřit, zda se na nich neobjeví jednička, nebo nula. A občas zkouknout ze sottware, zda jsou pořád ještě INPUT, nikoli třeba INPUT_PULUP, nebo OUTPUT.
Který se pohne, ten je něčím ovládaný, který se nepohne, ten buď nějaká knihovna považuje za INPUT, ale nemá ho nikam zapojený, nebo je volný.
(V druhém kole bych je naopak dal jako OUTPUT a sledoval zevnítř, zda to něco nezmění.)

Na to je asi potřebuješ převést na "opravdové adresy" podle Atmelu/Microchipu, pomůže třeba tenhle obrázek z https://forum.arduino.cc/t/atmega328-st ... ard/936878

Obrázek

kde si například přečteš, že Digital pin 13 (system LED) se správně nazývá PB5 a je to tedy 5. bit na portu B (číslováno 0..7) (a na DIP chipu (podlouhlém) je to 19. nožička, zatímco na TQFP a MLF chipech (čtvercových) je to 17.nožička)

v C/C++ přečteš jeho mod pomocí registru DDRB napřiklad (píšu z hlavy, můžou tam být překlepy)

Kód: Vybrat vše

if ((DDRB & _BV(5)) == 1) { 
        Serial.print("PB5 is INPUT");
} else { // DDRB & 0b 0010 0000 == 0
   if ((PINB & _BV(5)) == 0) {
        Serial.print("PB5 is INPUT");
    } else {
        Serial.print("PB5 is INPUT_PULLUP");
    };
};
if ( (PINB & _BV(5)) == 0 ) {
    System.println(" and is LOW");
} else {
    System.println(" and is HIGH");
}
Já teda používám spíš rovnou datasheet od Atmelu -
https://ww1.microchip.com/downloads/en/ ... asheet.pdf
kde se na stránce 59 dočteš, že
Configuring the Pin
Each port pin consists of three register bits: DDxn, PORTxn, and PINxn. As shown in ”Register Description” on
page 100, the DDxn bits are accessed at the DDRx I/O address, the PORTxn bits at the PORTx I/O address,
and the PINxn bits at the PINx I/O address.
The DDxn bit in the DDRx Register selects the direction of this pin. If DDxn is written logic one, Pxn is
configured as an output pin. If DDxn is written logic zero, Pxn is configured as an input pin.
If PORTxn is written logic one when the pin is configured as an input pin, the pull-up resistor is activated. To
switch the pull-up resistor off, PORTxn has to be written logic zero or the pin has to be configured as an output
pin. The port pins are tri-stated when reset condition becomes active, even if no clocks are running.
If PORTxn is written logic one when the pin is configured as an output pin, the port pin is driven high (one). If
PORTxn is written logic zero when the pin is configured as an output pin, the port pin is driven low (zero).
Pro port B:
Zapsáním nuly do bitu v DDRB se daný pin nastaví na INPUT, zapsáním 1 do příslušného bitu v PINB se mu nastaví PULLUP, zapsáním 0 shodí (taky se shodí, pokud se nastaví výstup)
Zapsáním 1 do bitu v DDRB se daný pin nastaví na OUTPUT, následně zapsání 0, nebo 1 do PINB se nastaví na LOW, nebo HIGHT, zapsáním 1 do PINB se hodnota překlopí.

Pokud máš nastavený jen INPUT a hodnota plave (je nepřipojený), tak čtením dostaneš "náhodně" 0 nebo 1, přičemž to znamená jen, že není zaručeno co a kdy. Klidně to může být celou dobu jedno, nebo druhé, nebo se to nějak měnit.

Čili číst, jestli tam něco skutečně je, nebo není se dá jen zvenku jiným měřákem (který to taky může ovlivnit, pokud není vhodný). Rozhodně vhodný měřák jsem si postavil a vzkoušel, je tady: https://robodoupe.cz/2018/drobnicky-003 ... -sledovac/, zejména neruší I2C sběrnici, ale vhodných jiných je spousta.

Pokud chce šlověk odchytit i krátké pulzy, tak na výstup tohohle ještě zapojí jednou nohou R-S klopný obvod (a druhou nohou ho nuluje)

A teda asi bych začal tím, že odpojím napájení motorů (a senzory a tak, co půjde), nahrál do toho UNA nějaký testovací prográmek (já používám https://github.com/githubgilhad/memxFORTH-core jako interaktivní shell ve FORTHu) a postupně si tahal za nožičky (dával tam nuly a jedničky) a měřil, kam to doleze, co je s čím přesně propojené (ale to možná máš na tom svojem obrázku, podle toho, jakým způsobem jsi ho "sesmolil")

(Sakra, ono je půl šesté ráno, nikoli večer a já proč začínám mít pocit, že se v tom trochu ztrácím. No nic, půjdu spát a jestli ti tohle přijde jako zajímavý směr, tak napiš, co mám rozepsat podrobněji, nebo kam pokračovat dál. Já se teď na nějakou dobu pomořil do toho svojeho MHF-002 = což je převážně asembler na atmega2560 =Arduino Mega a teď mi to při překladu píše

Kód: Vybrat vše

FLASH used: 60848 / 262144 bytes
        |   size |   hexa | build/FORTH_c_003.elf
--------+--------+--------+--------------------------
FLASH: 	|  60848 | 0xEDB0 | data: 628 + text: 60220
RAM:   	|  19892 | 0x4DB4 | data: 628 + bss: 19264
	7122 bytes	.FORTH_data
	3499 bytes	.bss
	628 bytes	.data
	15765 bytes	.highram
takže asi sám neposoudím, zda ještě píšu srozumitelně, a nebo už vůbec :? když mi čtení disassemblovaného výpisu překladu přijde jako jednoduchý způsob si něco ověřit o překladu)


a všechno je tam vysvětlené podrobně a do detailů, ale je to dlouhé 293 stránek a anglicky

----

Vzhledem k tomu, že UNO (atmega328p) má jen jeden I2C port (PC4 - SDA, PC5 - SCL) tak mi přijde divné, že na tom svém obrázku ho máš 4x, z toho jednou černý, podruhé modrý a 2x prázdný - podle mě by asi měly být všechny SDA vnitřně propojené, stejně jako všechny SDL. Stejně tak další vícenásobné vývody, jako D12 D13 9a možná další).
WIN je nejspíš VIN (V jako Voltage, IN jako vstup)

luger
Příspěvky: 266
Registrován: 30 dub 2023, 11:06

Re: Pavouk Hiwonder

Příspěvek od luger » 25 dub 2026, 09:18

díky ale toto je na mě už dost složité. A další problém je, že se dovnitř pavouka jen tak nedostanu. Rozmontovat celé a rozpojit tisíc drátů a pak je dát zpátky je zatím nepřijatelné. Nedalo by se to vyčíst z těch origo knihoven ? A ještě je tam gyroskop a ten ani nevím kde je zapojený :D
Jen mi jde o to zjistit které piny jsou ještě volné.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti