Pensé en comprar una máquina de yogurt de alguna manera. Sí, de modo que el yogur sea bueno y siempre de la misma calidad. ¿Qué se necesita para esto? En primer lugar, las materias primas, en segundo lugar, temperatura precisa y estable, en tercer lugar, establecer el tiempo de cocción. Comencé a elegir y me enfrenté a la siguiente emboscada: los fabricantes de yogurt baratos no estaban regulados. Es decir, dentro del cable calefactor, y este cable, de hecho, está conectado a la red. La temperatura dentro del fabricante de yogurt al mismo tiempo depende de las manos del recolector, la temperatura ambiente, las fases de la luna y la profundidad del sueño de Cthulhu (Cthulhu fhtagn, por cierto).Por supuesto, esta situación no me convenía. Y aún más me molestó la situación en torno a los fabricantes de yogurt, quienes, por sus funciones y parámetros, me convenían. Por alguna razón, los fabricantes de tales fabricantes de yogurt creen que están suministrando productos espaciales al mercado y los precios de dichos productos deberían ser apropiados. La fuerte angustia mental en el proceso de selección me llevó al punto en que expresé mi indignación a mi amada esposa por la política inhumana de fijación de precios de los fabricantes de yogurt y en el proceso de efusiones verbales, expresé la frase "Lo haré mejor por quinientos rublos", después de lo cual luego hizo clic ...Era la historia de fondo. Y ahora la historia.En el proceso de construcción de un dispositivo maravilloso, me encontré con un error. Cuando se mostraba la temperatura actual, el controlador se reiniciaba periódicamente. Es decir, a veces funcionaba durante horas normalmente, y a veces se reiniciaba cada pocos segundos. Dado que esto comenzó a suceder después de que se introdujera la función de sondeo del sensor ds18b20 en el firmware, es natural que recurriera a ella para una búsqueda de errores. Y no encontré nada. La pila no se rompió, la función no escribió nada en sus áreas de memoria. En general, funcionó, como debería ser. Además, deshabilitar esta función eliminó el error, que indicaba claramente (como me pareció en ese momento) el héroe de la ocasión. Pensé que todo era el culpable del sistema de sincronización.Como tengo una pequeña piedra (attiny2313a) y no hay suficientes temporizadores para todas las lociones, salí de la situación escribiendo un administrador de tareas que recibe las tareas y el tiempo de retraso requerido de las funciones, las pone en la cola. Luego, después de contar el tiempo necesario, les transfiere el control. Configuré el tiempo mínimo de retraso en 1 milisegundo. Lo que me permitió establecer retrasos de milisegundos a un minuto. Pero si mira la hoja de datos del sensor ds18b20, verá que la comunicación con el sensor de temperatura a veces dura más de 500 microsegundos (reinicie y espere presencia).
Pero, ¿qué pasa si, en el proceso, una interrupción interfiere con la función de comunicación? Habrá un desplazamiento de intervalo de tiempo, debido al cual el controlador no podrá leer el bit o reconocer correctamente la presencia. Encontré una manera de usar la sincronización. El proceso es simple. Cuando la función de sondeo del sensor ve que tendrá una comunicación a largo plazo con el sensor, establece una interrupción en el registro B del temporizador 1 al mismo tiempo que la interrupción del "administrador de tiempo" ubicada en el registro A del temporizador 1. Y dado que las interrupciones se procesan estrictamente de acuerdo con la dirección de la interrupción tabla de interrupciones, resulta que después del proceso de sincronización, la función de sondeo del sensor recibirá el control inmediatamente después de la interrupción del "administrador de tiempo".Bueno, ¿dónde puede haber un error? Si en todos lados Pero personalmente, pensé que el problema podría estar en la intersección de las interrupciones. Es decir, en el caso de que entre otro durante la ejecución de una interrupción. La limpieza del código para resolver este problema continuó hasta que descubrí que mis acciones llevaron al hecho de que el problema comenzó a ocurrir incluso con el sensor no conectado. Habiendo deshabilitado la función de sondeo del sensor, estaba convencido de que ahora los reinicios del controlador no dependen de su funcionamiento. Y entonces una suposición brillante me golpeó. ¡Necesito medir el voltaje! El multímetro informó alegremente que hay 4.2 voltios en el controlador. “Bueno, por supuesto, BOD, pensé. Y conecté la alimentación externa a la placa (antes de eso estaba contento con la alimentación USB). El multímetro gruñó bastante, lo que equivale a 4,98 voltios en el tablero. Con un sentimiento de victoria, encendí el tablero para ver lo increíble. Un error estaba presente!Y se hizo aún más vigoroso. Ahora el controlador se reinicia cada dos segundos, y a veces en una fracción de segundo. Las búsquedas continuaron con venganza y condujeron a una función que muestra información en la pantalla.Como probablemente hayas adivinado, todo estaba bien con ella, especialmente porque después de escribirla fue examinada adecuadamente. Y, sin embargo, todo decía que mi esquivo error yace en él. Resultó que el error solo ocurre cuando se muestra la página de temperatura actual. Las páginas que muestran el poder, el inicio, la hora del error no causaron. Al no encontrar nada que pudiera causar este comportamiento, decidí construir sobre la comida. A saber, el hecho de que bajo voltaje normal se produjo un error con mayor frecuencia. Al reducir el voltaje, descubrí que a 3.8 voltios en el controlador, este último funciona de manera estable. La situación rompió todos los patrones. Y luego recordé la ley de Ohm. La corriente es proporcional al voltaje. ¿Es siempre? No. En los LED, esta ley no funciona. Funciona con mayor precisión, pero con sus gadgets.La proporcionalidad de la corriente a través del diodo no es la misma que en una resistencia convencional, porque los dispositivos semiconductores son en su mayoría no lineales. Recuerde al menos un tiristor o un diodo zener (diodo zener). Aquí hay una comparación de la característica de voltaje de corriente del LED de la hoja de datos (línea negra) y la característica de voltaje de corriente de la carga resistiva (línea roja)
Se ve que para la carga resistiva, la ley de Ohm es dios y maestro. Si el voltaje aumentó en un 10%, entonces la corriente aumentará en el mismo 10%. Pero nadie es un decreto para el LED. Si eleva el voltaje en el LED solo en un 10% (de 2 voltios a 2.2 voltios), su corriente saltará al 100%, es decir, ¡dos veces! Pero en mi caso, lo principal fue que un aumento en el voltaje también aumentó su reducción en el momento en que se encendió el diodo. ¡Y tenía 32 diodos! Cuatro indicadores de siete segmentos con ocho LED en cada uno (siete segmentos y un punto). Están conectados conmigo no a través de la multiplexación, sino a través de registros de desplazamiento porque:1. Las conclusiones del controlador attiny2313 eran muy deficientes.2. Me molesta su parpadeo cuando se conecta por multiplexación (perfeccionismo varias veces)3. El multiplexor consume muchos recursos de controlador para la salida (perfeccionismo número dos).Además, conecté registros de desplazamiento con la función de apagar la pantalla durante la actualización de la pantalla (perfeccionismo número tres). ¿Por qué renuncié a esta función? No lo sé. Después de todo, la lógica que he elegido puede funcionar hasta una frecuencia de 100 MHz. En consecuencia, los datos se pueden insertar en la frecuencia completa del controlador, que tengo es de 10 MHz. Bueno, ¿quién tiene tiempo para notar el movimiento de bits en los bits del indicador a tal frecuencia?Siga adelante. La potencia de mi circuito es proporcionada por el regulador L7805, aquí está su diagrama de conexión.
El regulador proporciona una corriente de 1A sin ningún problema. A la salida del regulador hay un condensador de 0.1 microfaradios, que, en teoría, debería suavizar las fluctuaciones de corriente. Su carga a 5 voltios es 0.5 microcoulomb. A 3.8 voltios, la carga es respectivamente 0.38 microcoulomb. A 3.8 voltios, los LED consumen aproximadamente 288 mA, y a 5 voltios aproximadamente 416 mA. En consecuencia, cuando el voltaje se eleva de 3,8 voltios a 5 voltios, la carga almacenada por el condensador aumentará en un 24%, pero el consumo de corriente aumentará en más del 30 por ciento al mismo tiempo. Los cálculos son, por supuesto, ejemplares pero muestran que la caída de voltaje en dicho circuito es mayor cuanto mayor es el voltaje de suministro. A 3.8 voltios, la reducción no fue crítica para el controlador. Pero a 5 voltios, la reducción aumentó y comenzó a reiniciar el controlador. Y el controlador se reinició precisamente en la página de visualización de temperatura porque¿Qué exactamente en esta página eran todos los indicadores de visualización involucrados?La solución fue simple. En el código, solo tenía que comentar las líneas para encender y apagar los indicadores sbi displayPort, offDispWire y cbi displayPort, offDispWire. ldi XL, videoMem
cbi displayPort, shiftWire
cbi displayPort, storageWire
;sbi displayPort, offDispWire
ZpushToDisplay:
ldi temp2, 8
ld temp, X+
ZnextbitToDisplay:
cbi displayPort, dataWire
sbrc temp, 7
sbi displayPort, dataWire
sbi displayPort, shiftWire
cbi displayPort, shiftWire
lsl temp
dec temp2
cpi temp2, 0
brne ZnextbitToDisplay
cpi XL, videoMem+sizeVideoMem
brne ZpushToDisplay
sbi displayPort, storageWire
cbi displayPort, storageWire
;cbi displayPort, offDispWire
Las descargas se han detenido. Y el controlador vivió feliz para siempre.Z.Y. El escurridizo proceso de búsqueda de errores apuntaba a otra falla en el esquema. El hecho es que la disipación de potencia máxima de los registros de desplazamiento es de aproximadamente 0,5 vatios, y la corriente a través de la salida de potencia o tierra es de aproximadamente 70 miliamperios. Si se muestra la figura ocho con un punto, la corriente a través del registro de desplazamiento debe ser de aproximadamente 104 miliamperios, lo cual, como usted sabe, es un exceso. No es que no haya tenido en cuenta este momento. Lo he tenido en cuenta. Pero en el proceso de calcular la resistencia para el LED, sucumbió a un minuto de debilidad y olvidó que el LED es un elemento no lineal y reducir la corriente a través de él dos veces no es suficiente para duplicar la resistencia de la resistencia limitadora de corriente. En general, en cualquier situación incomprensible, ¡vea el CVC!