Hoy Momento Arduino

Hemos recibido algunos consejos sobre Arduino en los últimos dos días y pensamos en combinarlos para su conveniencia. El primer consejo que recibimos fue para algunos indicios de [Bill] sobre algunas alternativas de escritura digital (). Al igual que en algunas investigaciones anteriores que hemos cubierto, este consejo también incluye algunos consejos sobre cómo facilitar un poco la escritura de registro directo con #define para simplificar las cosas. Obviamente, esto no será tan estúpido como digitalWrite (), pero creemos que puedes lidiar con eso.

Nuestro segundo consejo es para un conjunto de pantallas OLED 4dd vendidas como Arduino Shields. Tienen varios tamaños diferentes, desde 0,96 ″ hasta 1,7 ″, según sus necesidades y presupuesto. Todavía no existe una biblioteca de pantalla oficial para ellos, pero los sistemas 4ds tuvieron la amabilidad de proporcionar algunos recursos con los que trabajar. Con suerte, veremos algunos programas geniales de esto, ¿tal vez un Mario de píxeles mucho más grande? ¿Un juego de la vida mucho más pequeño? ¡Envíanos tus proyectos o deja tus ideas en los comentarios!

  • tedioso dice:

    “El acceso directo al puerto no es para los débiles de corazón” … lmfao

    Las instrucciones SBI / CBI duran 2 ciclos, pero la instrucción OUT solo necesita 1. Entonces, ¿no podría hacer esto:

    registrar un carácter sin nombre toggleMask = _BV (bit);
    PINB = Alternar máscara;
    PINB = Alternar máscara;
    PINB = Alternar máscara;

    No lo he probado, pero, ignorando el tiempo de configuración inicial (que es solo 1 ciclo de todos modos), su pin ahora oscila a 2 ciclos por período en lugar de 4. (¡suponiendo que se haya desenrollado de su bucle!))

  • WestfW dice:

    Oh vamos. Esta es una noticia antigua, y el código ha aparecido durante mucho tiempo en los foros de arduino y en las listas de correo electrónico de los desarrolladores que le permiten recibir digitalWrite () con una sola instrucción (en las circunstancias adecuadas) UTILIZANDO LA SINTAXIS EXISTENTE. La única razón por la que no se implementa ampliamente es el temor de que la versión más rápida sea incompatible con versiones anteriores solo por su velocidad o porque no apaga los temporizadores que podrían usarse para producir PWM en el mismo pin.

    http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1267553811/0

  • luego dice:

    Tal vez mañana Arduino Moment se trate de quitar el AVR de la placa. Por supuesto, una vez que la gente se dé cuenta de lo que es Arduino después de sacar el chip Atmel, no habrá más momentos Arduino.

  • Dedo dice:

    En cuanto a las pantallas OLED, he completado (a fondo) bibliotecas para una interfaz con 128 × 128 (en la placa 4d serializada y solo la pantalla en sí si desea controlarla con uC), así que si alguien quiere que la biblioteca juegue (tiene muchas funciones de dibujo, así como texto, está diseñado para el controlador de pantalla más nuevo SSD1351 porque el controlador de pantalla anterior ssd1339 ya no se hace el dibujo incorporado) solo diga eso y puedo publicar un enlace a él .

    • Eric dice:

      @ Dedo:
      Por favor, ¿podría publicar su biblioteca SSD1351?
      Gracias
      Eric

  • carbunclo azul dice:

    Gracias HaD !!! Me gusta la publicación combinada 🙂 Continúe 🙂

  • Juan dice:

    Nunca puedes tener suficientes consejos.

  • Cuenta dice:

    “El código existe desde hace mucho tiempo”

    No nombraría 4-6 meses, pero el enlace se agregó a mi artículo, gracias.

  • Nakka dice:

    ¿De qué se trata todo este fusible arduino de todos modos? ¿Es la aritmética simple de bits realmente tan difícil de aprender?

    Lo siento, pero todavía no veo la ventaja en funciones como “digitalWrite ()” de todos modos …

  • WestfW dice:

    @Nakka: ah; nunca ha hablado con personas que no hayan aprendido sobre binario. La abstracción de un pin de microcontrolador a, bueno, un “pin”, en lugar de alguna pieza enmascarada aleatoria en algún registro con nombre extraño es algo bueno, en mi opinión. Claro, puede afirmar que las personas que no pueden entender cómo se refiere “PORTB & = ~ (1

  • farmacia online dice:

    @westfw: Preferiría.

  • Paul dice:

    Hace casi 1 año, escribí un digitalWrite () optimizado, que se compila en una sola instrucción de 2 ciclos, cuando las entradas son tiempos de compilación constantes. Lo he estado enviando como parte de Teensyduino desde noviembre (Teensyduino también tiene optimizaciones no constantes). El código de instrucción única constante también se encontraba en el número 140 de Arduino, y puede que algún día se convierta en parte del propio Arduino.

  • r_d dice:

    56 ciclos para escribir un poco? ¿Exactamente qué diablos está haciendo todo este tiempo?

  • WestfW dice:

    @r_d: Buena pregunta. Asigna el número de PIN al puerto indexando una búsqueda a una tabla guardada en un instante. Y un poco. Marque “sin pin”. Más mapeo de información de tiempo. Si el registro de tiempo es “real”, entonces se asegura de que cualquier PWM que ese temporizador pueda manejar en ese pin esté deshabilitado (lo que implica lógica adicional). Asigne el puerto al registro de salida para el puerto. Lea el registro, AND A OR A el valor con la máscara de bits (quizás complementando la máscara primero) y devuélvalo (usando direccionamiento indexado en ambos casos, porque la dirección del registro es una variable. Algunos registros adicionales). Además de una función normal llama.

    Podría estar un poco más optimizado, pero está diseñado para mantener la misma estructura básica en varias CPU y no está realmente diseñado para ser rápido. No es necesario que sea rápido. Después de todo, Arduino está diseñado con el conocimiento de que si realmente necesita velocidad, puede ingresar un código C simple o incluso un ensamblaje en línea. No es como algunos entornos donde la función lenta es su única opción …

  • Thomas dice:

    Genial, realmente me gustan estas pequeñas delicias de Arduino 🙂

    (No soy tan duro como algunos piratas informáticos experimentados, pero me encanta este sitio)

  • Alberto de Nutchip Labs dice:

    De acuerdo con WestfW.
    Tengo una licenciatura en ciencias de la computación y más de 25 años de experiencia en programación, pero no, no puedo manejar el enmascaramiento de bits tanto como puedo con digitalWrite ().
    Si vas a escribir un pin, tu código tiene que decir exactamente eso. Cada truco debe delegarse a bibliotecas y compiladores, en mi humilde opinión.

  • Alastair D’Silva dice:

    Es posible que le interese reemplazar una biblioteca de tiempo de ejecución de Arduino que he desarrollado durante los últimos meses que trata este problema y muchos otros, como la capacidad de enviar datos en serie de forma asincrónica.

    La fuente completa y los tutoriales están disponibles en: http://www.makehackvoid.com/group-projects/mhvlib-efficiency-oriented-library-avr-microcontrollers

  • stefodestructo dice:

    @Johano. Eso es lo que ella dijo

  • Matthew Garten dice:

    La biblioteca uOLED que utilicé para Arduino Watch http://www.instructables.com/id/Arduino-Watch-Build-Instructions/ se puede encontrar en http://code.google.com/p/uoled-library/
    Algunas de las bibliotecas enumeradas en el artículo no funcionan con las versiones actuales del software Arduino mientras se está ejecutando.

  • Que no dice:

    @Matthew Garten Tiene algunos patrones de habla molestos que este tipo en el video me hace enojar, como si no pudiera decir arduino pero dice arduino, ¿por qué la gente pone letras adicionales en una palabra? Es como si los estadounidenses dijeran wimblet mientras pronunciaban wimbledon, no puedes entender por qué lo hacen.

  • vonPalitroque dice:

    Según el manual avr-libc:
    PORTB | = _BV (0);
    y
    PORTB & = ~ _BV (0);

    compilar para
    sbi PORTB, 0
    cbi PORTB, 0

    respectivamente, si está disponible. Estas son dos instrucciones cíclicas. Si estas instrucciones no están disponibles, el conjunto resultante parece
    ; sbi
    y r1, PORTB
    ori r2, 1
    el PORTB, r1

    ; cbi
    y r1, PORTB
    andi r1, 0xfe
    el PORTB, r1

    Todas estas son instrucciones en 1 ciclo. En otras palabras, es más rápido sbi / cbi si está disponible, y el compilador se encarga automáticamente de eso. Si necesita un pulso más rápido en un pin, lo mejor es configurar PWM.

Fernando Román
Fernando Román

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *