wat is de kortste puls die een MCP23008 kan maken?

De titel zegt het al.
Ik zat me gewoon af te vragen wat de minimale pulsbreedte is die een MCP23008 kan maken op een van zijn pennen als de bussnelheid 1MHz is.
Ik dacht: ik reken dat eenvoudig 'even' uit, maar de datasheet bevat wat onduidelijkheden (voor mij dan toch) die dat onmogelijk maken.

Ik weet dat een niet al te nauwkeurige puls eenvoudig met simpele hardware gemaakt kan worden, maar daar is geen ruimte voor en de processor heeft ook geen pinnen over...
Ik weet ook van het bestaan van PWM-expanders, maar ik heb alleen een enkele puls nodig (eigenlijk: acht) en dat lijkt me met zo'n ding erg lastig worden.

In deze PDF wordt vanaf blz. 26 een redelijk duidelijke lijst aangegeven van alle timing specificaties.

Wat voor processor stuurt het aan?
Mogelijk heb je daar ook al een bottleneck.

Na het initialiseren heb je twee 'writes' nodig om één (tot 8) pinnen aan en uit te zetten.

timing per write zal dan bestaan uit:

start+address+writebit+data+stop+ack

ongeveer 1+7+1+8+1+1 I2C bus clock cycles + de tijd die nodig is om de I2C spullen op je CPU te activeren.

Wat KGE zegt, 19 clock cycles per write. Grofweg 20us op 1MHz.
Datasheet suggereert in plaatje 2.7 dat het 500ns duurt na de laatste data-bit voordat de output settled, dus met twee writes zou je een 20us puls kunnen maken.

Misschien dat je twee writes op hetzelfde adres in een I2C transactie kunt vouwen (er is een bitje SEQOP dat auto-adress-increment controleert), en dan zou je met 9 bits, dus 9us, weg kunnen komen. Maar dat moet je waarschijnlijk gewoon uitproberen.

Ik zou een MCP23S08 kiezen (SPI), is vele malen sneller...

Dank :?
Ik was duidelijk te snel met de vraag te stellen: na een goede nachtrust en dito ontbijt werken de grijze celletjes weer een heel stuk beter, het gevoel van paniek is weg.
Waar ik naar op zoek was is de mogelijke onnauwkeurgheid van een langere opgewekte puls en de mogelijke oorzaken, I²C timing is een daarvan.

@KGE, blurp:
Iets te krap door de bocht: met 19 cycles heb ik alleen het GPIO register geselecteerd maar nog geen output gezet, daar heb ik nog 9 cycles extra voor nodig: 28 totaal dus.
Als ik het SEQOP bit in het IOCON register aanzet kan ik met de volgende 9 cycles de output weer afzetten, wat dus neerkomt op een puls van 9µs :7
Met een bus restart wordt dat 28µs en met een volledige stop/start 29µs.
Toch is dat allemaal goed nieuws: het betekent dat de software de grootste bron van onnauwkeurigheid is in de opgewekte pulsbreedte, de I²C timing valt weg achter de komma.

@Arco: Snap ik (in echt tijd-kritische toepassingen zou ik dat ook doen), maar I²C blijkt voor deze toepassing snel genoeg.
Bovendien kom ik niet uit met 4 stuks MCP23x08, en zijn dubbelgrote broer inzetten gaat het ook niet worden sinds de laatste update van de datasheet: teveel problemen om die twee output only pins te omzeilen...
Okee-okee, ik weet van het bestaan van veel grotere expanders, maar dit moet een non-SMT project worden. Gewoon, omdat het (nog) kan :P

Al eens aan de PCA9505/6 gedacht? (veel i/o voor weinig geld...)

PCA9505_9506-2539769.pdf

[edit]
Oeps, ik zie dat het geen smd mag zijn... :+

[Bericht gewijzigd door Arco op (26%)]

De SPI versie van de 16 bits MCP heeft de beperkingen op de in/outputs niet.

Maar ik dacht dat het ook alleen om 'pulsen maken' ging dus dan is een output only situatie toch geen probleem?

Overigens bij output only zou je ook de 74HC595 kunnen gebruiken, eventueel een rijtje achter elkaar aan.

Touché...

De HC(T) 595 zou (voor de outputs) ook kunnen, maar die heeft dan weer meer processor I/O nodig (wat niet beschikbaar is); ook de SPI-versie heeft dat nadeel.
Dat ik niet uitkom met 4 8-bits expanders zou een hint geweest kunnen zijn dat ik meer dan alleen outputs nodig heb, maar toegegeven, dat was niet duidelijk.
Om het geheel helder te maken: ik heb twee processor pinnen beschikbaar, 28 inputs en 16 outputs nodig.
Die outputs zijn nog met een 16-bitter te doen (was ook oorspronkelijk het plan) maar ik heb gekozen voor een kleinere BOM en wat meer routing-vrijheid...

Op vrijdag 26 januari 2024 10:51:59 schreef fatbeard:
Om het geheel helder te maken: ik heb twee processor pinnen beschikbaar

Soms kun je de data pin delen met een andere interface, kan net dat ene pinnetje opleveren :-)

Een waar woord.
Alleen: die truuk wordt al benut, ander kwam ik pinnen te kort...
Ook zaken in matrix aansluiten is een 'oplossing' voor te weinig I/O, maar dat kost dan weer diodes (= boardspace met bijbehorende routingproblemen) en ook die truuk is al toegepast...
Als klap op de vuurpijl: de MCP23S08 heeft buiten de CLK, DI en DO ook nog een CS pin...
Dan kom ik niet weg met 'een pootje extra', dan heb ik 5 pootjes extra nodig :S

Maar we dwalen af, de oorspronkelijke vraag was al beantwoord.

Soms zijn pinnen ook dubbel te gebruiken:
Als je bijv. 7 segment displays aanstuurt, kun je die segmentpinnen ook gebruiken voor wat extra toetsen uit te lezen...