Ahoj všem,
už týden se s kolegou pokoušíme zapojit expandér a stále se nám nedaří. Mám dojem, že už známe datasheety slovo od slova. Kdyby nám někdo poradil, kde by mohl být problém, moc by nám pomohl…díky
Popis: Na MCU máme ex. krystal 16MHz. LEDkama kontrolujeme stav komunikace. MCU bez problému vyšle START i adresu expanderu. Expander však nepošle ACK.
Díky
Filip
administrator: přejmenováno z “Atmega32A + expander (MCP23016)…po I2C”
Tak ako si poslal, sa “zapojenie” kreslilo zaciatkom minuleho storocia. Mas tam vobec pull-up rezistory? To kto ma z toho obrazku lustit? Nabuduce posli normalnu schemu.
kód vypadá jak z codevision -proč nepoužíváte jeho knihovnu pro I2C ?
A víte vůbec o tom, že adresa obvodu MCP23016 je 0b00100xxx - x nastavujete na vývodech A0-A2? Ale snad jo, když k těm vývodům vedou drátky - pak by měla být 0x27. Podle mně posíláte jenom adresu registru a data pro něj, ale ne adresu součástky - pak je jasné, že neposílá ACK.
Kde máte RC oscilátor pro expander?
Nevidím ani pullupy pro SCL a SDA, pokud tedy nejsou integrované na tom vývojovém kitu.
Nechci být nějak zlý, ale podle bastlu na nepájivém poli to nevypadá, že cituju: " už známe datasheety slovo od slova" spíš naopak.
Dobrý den.
Knihovny z CodeVisionu jsme pochopitelně použili jako první možnost. Po dlouhém a neúspěšném laděníení jsme zkusili napsat komunikaci sami, podle datasheetu MCU ATmega32.
Piny pro bližší určení adresy A0-A2 jsou uzeměny. Adresa je tedy 0b0100000 + R/W bit, tedy pro čtení 0b 01000000, tedy 40h
Pro nepřehlednost obrázku výše připojuji schéma zapojení.
Dále ještě připojuji C-file s použitím knihoven I2C.
No vida - to už je lepší schema.
takže pokud je to zapojené podle schematu - tam bych možná viděl jeden problém (nemusí být) v pullupech - jestli nejsou moc malé (1k) - doporučené bývají tak 5k6, někdo dokonce tvrdí, že by měly být větší než 10k, ale já dávám 4k7, nebo 5k6.
A čím detekuješ tu ACK - log. analyzer, osciloskop? Možná ta velká zátěž (1k + sonda) dělá problém.
Dál fakt nevím proč by to nemělo chodit.
Jinak já celkem úspěšně a bez problémů používám tu CV variantu sice ne u expanderu - u RTC a EEPROMy ale to je jedno.
A možná malá poznámka k funkci - tu adresu device bych dal do parametrů - tam pak zadával jen hodnoty v rozmezí 0x00 - 0x07 a ž pak v těle funkce ji vymaskoval tím 0x40 - při použití dalšího expanderu nebudeš muset připisovat další funkci jen kvůli adrese device, kterou máš schovanou uvnitř funkce, což mně popravdě nejdřív zmátlo a myslel jsem, že ji ani neposíláš.
Ale to je jen detail.