¿Cómo programar a través de ICSP cuando el chip está en el circuito con chips que interfieren?

0

Mi circuito es:

USBTinyISP < -usi / icsp- > ATTiny85 < -usi / i2c- > MCP4725 .

Es decir, los pines USI utilizados para programar el t85 también se usan para i2c en el circuito final.

Cuando intento programar en flash el t85 en el circuito, falla. Si desconecto la línea SDA del 4725 durante la programación, funciona. Supongo que que el 4725 está confundiendo el nivel de SDA con los paquetes ACK I2C y, por lo tanto, interfiere con la línea MOSI compartida durante la programación. Pero si es así, entonces mi ICSP no es realmente en Circuito :(. Es decir, si el circuito fue permanente, no podría programar el MCU, excepto eliminándolo. Sin embargo, veo muchos circuitos con encabezados de ICSP en ellos que presumiblemente trabajo.

¿Cómo se evitan las interferencias lógicas del circuito cuando programo a través de ICSP? La única solución que se me ocurre es usar un microcontrolador con pines ICSP dedicados. Pero, ¿hay alguna otra solución de práctica común para este problema?

    
pregunta soliton_zero

2 respuestas

4

Agregue una resistencia adecuada entre cualquier circuito externo que accione un pin ICSP y el chip AT. La resistencia debe ser lo suficientemente alta como para que el circuito ISP pueda anular el circuito externo, pero lo suficientemente bajo para que el circuito externo aún pueda conducir el AT lo suficientemente rápido. Podrías comenzar con 1k.

Una capacidad de ICSP es una propiedad combinada del chip de destino, el programador, y el circuito de destino .

    
respondido por el Wouter van Ooijen
1

Hay muchas opciones que puede que no se te ocurran de inmediato.

Uno es:

simular este circuito : esquema creado usando CircuitLab

De esta manera, el Tiny probablemente aún sea capaz de conducir el DAC a 400kHz al menos, quizás incluso más rápido, dependiendo de la longitud de sus cables. El DAC todavía tiene suficiente "fuerza" a través de los resistores de 470 ohmios para tirar de las líneas lo suficientemente bajas como para ser visto como un cero en el ACK o al sostener la línea SCL, pero generalmente un programador de ICSP es lo suficientemente fuerte como para "ganar" desde los 470 ohmios . Al menos en SPI. Los chips aún más pequeños que requieren TPI como el Tiny10 y el Tiny20 no podrían ganar desde 470 Ohm, pero SPI es impulsado por el objetivo del Tiny85 y el programador.

Si desea aún más control / garantía, puede agregar un transistor PNP accionado por cualquier pin libre, que se baja de forma activa. Cuando su Tiny se reinicia para la programación, la resistencia predeterminada R1 cerrará el transistor:

simular este circuito

En este caso, las resistencias de 470 ohmios evitan que el DAC se "encienda" de los voltajes en las líneas de datos. Esto es, en mi opinión, una solución menos clara, pero si la primera no funciona, esta podría funcionar.

De ahí en adelante, hay todo tipo de cosas como los chips de búfer I2C que se pueden habilitar / deshabilitar y más, pero todo aumenta en complejidad.

Incluso puede conectar el transistor PNP en este ejemplo a través de otro NPN al pin RESET del diminuto, apagando automáticamente el DAC cuando se activa el reinicio del Tiny.

Pero nuevamente, poner señales en un chip que no tiene potencia nunca es una solución realmente buena, en mi opinión, y si las resistencias no funcionaran, primero vería los chips de búfer.

    
respondido por el Asmyldof

Lea otras preguntas en las etiquetas