Conseguir más pins de I/O en ATTiny con cambio de registros (3 / 6 paso)

Paso 3: Ejemplo #1: código de

El código está escrito en el montaje de la AVR. Si trabajas con controladores como el ATTiny - es un deber! Se ve de miedo, pero en realidad es mucho más simple y más fácil que C.

Otra razón para usar el lenguaje ensamblador es que este código sólo 148 bytes de espacio después de compilación, mientras que el IDE de Arduino produce 644 bytes de salida binaria para el mismo código (no probado en AVR GCC), así que si desea ampliar la funcionalidad de su proyecto pequeño, tiene menos de 400 bytes a la izquierda para trabajar con...

 /* * Shift register demo #1 * * ATTiny13A Running * ADC running * * PIN ASSIGNMENT: * PB0 - Shift Register Clock * PB1 - Shift Register Serial Data * PB2 - Shift Register Latch(Store) * PB3 - ADC3 (Potentiometer input) * PB4 - [NOT USED] * PB5 - RESET */ .include "tn13Adef.inc" .def A = R16 ; g.p. variable and/or function argument .def B = R17 ; Used in SEND_BYTE and ADC_START as temporary storage .def LED = R18 ; stores current LED output .def BCT = R19 ; Bit counter for SEND_BYTE .equ SRCK = 0 ; PB0 = Clock .equ SRDA = 1 ; PB1 = Serial Data .equ SRLC = 2 ; PB2 = Latch /* INTERRUPT VECTORS */ .org 0x0000 rjmp RESET ; Reset interrupt .org 0x0003 rjmp TC0_OV ; Timer1 interrupt /* * START!!! */ RESET: /* SETUP STACK */ ldi A, low(RAMEND) ; Set stack pointer out SPL, A /* SETUP PINS */ ldi A,0b0000_0111 ; Set output pins PB0..PB2 out DDRB,A /* SETUP TIMER1 */ ldi A,0b0000_0101 ; Set Timer Prescaler (1024) out TCCR0B,A ; This will cause Timer Interrupt every ~27ms ldi A,0b00000010 ; Enable Timer0 Overflow Interrupt out TIMSK0,A /* SETUP ADC3 */ ldi A,0 out ADCSRB,A ; Disable autotrigger(Free running) ldi A,0b00001000 ; Disable Digital Input on PB3(ADC3) out DIDR0,A ldi A,0b00000011 out ADMUX,A ; Source:ADC3, Align:RIGHT, Reference:VCC. ldi A,0b10000110 out ADCSRA,A ; Enable ADC with prescale 1/64 /* RESET REGISTERS */ ldi A,0x00 ; clear A ldi LED,0xFF ; Set all LED's to OFF(1-off, 0-on) rcall SEND_BYTE ; Clear display sei ; Enable interrupts /* Main loop */ MAIN: rjmp MAIN /* * Sends 8-bit data from LED register to Shift Register */ SEND_BYTE: ldi BCT,0b1000_0000 ; Set Bit counter next_bit: mov B,LED ; Move data byte to temp and B,BCT ; Check bit breq zero ; Set Data to 0 sbi PortB,SRDA ; Set Data to 1 rjmp shift ; shift zero: cbi PortB,SRDA shift: sbi PortB,SRCK ; CLK up nop cbi PortB,SRCK ; CLK down clc ; Clear Carry flag ror BCT ; Shift bit counter brne next_bit ; Next iteration sbi PortB,SRLC ; When done, Latch nop cbi PortB,SRLC ret ; Done /* Start ADC conversion. Saves result to A */ ADC_START: sbi ADCSRA,ADSC ; Start ADC conversion adc_wait: sbic ADCSRA,ADSC ; Check conversion status rjmp adc_wait ; Skip jump if completed in A,ADCL ; Get low bits in B,ADCH ; Get high bits lsr B ; Shift 2 bits to the right ror A ; through Carry lsr B ror A ret /* Timer 0 overflow interrupt */ TC0_OV: rcall ADC_START ; start ADC0 Conversion /* Compare Input, Set output */ cpi A,0xC8 ; A>=200? brlo gt_160 ldi LED,0b11100000 rjmp sr_write gt_160: ; A>=160? cpi A,0xA0 brlo gt_120 ldi LED,0b11110000 rjmp sr_write gt_120: ; A>=120? cpi A,0x78 brlo gt_80 ldi LED,0b11111000 rjmp sr_write gt_80: ; A>=80? cpi A,0x50 brlo gt_40 ldi LED,0b11111100 rjmp sr_write gt_40: ; A>=40? cpi A,0x28 brlo lt_40 ldi LED,0b11111110 rjmp sr_write lt_40: ; A<40 ldi LED,0b11111111 sr_write: rcall SEND_BYTE ; Send byte to shift reg. reti ; return 

Artículos Relacionados

Bicho muerto prototipos y electrónica libre

Bicho muerto prototipos y electrónica libre

Prototipos de bicho muerto y forma libre electrónica son una manera de construir circuitos electrónicos, de trabajo soldando directamente a las partes, o a través de alambres en vez de la forma tradicional de usar una placa de circuito impreso (PCB).
Mini estación meteorológica con Attiny85

Mini estación meteorológica con Attiny85

En un reciente Indigod0g instructivo describe una mini estación meteorológica que funciona bastante bien, usando dos Arduinos. Tal vez no todo el mundo quiere sacrificar 2 Arduinos para obtener lecturas de temperatura y humedad y comentó que debería
Reloj del mundo en alemán usando Arduino

Reloj del mundo en alemán usando Arduino

Mientras que en Alemania el año pasado, vi un mundo reloj en una tienda similar a este en una tienda que estaba a un precio de 900€. He leído varios instructables en línea sobre cómo crear un reloj mundial así que decidí darle un tiro. Quiero agradec
Hacer una matriz de 8 x 10 L.E.D

Hacer una matriz de 8 x 10 L.E.D

actualización 1: he añadido juego del código para CONWAY de la vidaACTUALIZACIÓN 2: AHORA PUEDE GUARDAR ALGUNOS PINES DE ARDUINO CON LA AYUDA DEL REGISTRO DE CAMBIO DE 1.En este instructable le mostraré cómo crear una matriz de 8 bastante lujo por 10
Diversión con foto montaje - Episodio 21

Diversión con foto montaje - Episodio 21

No soy un viajero del mundo pero he estado en varios lugares que difieren radicalmente en temperatura y humedad. No importa lo que alguien dice, "calor seco" no significa nada cuando el termómetro está por encima de 110 grados. Asimismo,-40 grad
4 x 4 x 4 actualización de cubo de LED con cambio de registros (74hc595)

4 x 4 x 4 actualización de cubo de LED con cambio de registros (74hc595)

este proyecto se inició con una bolsa de LEDs que había extraído de las linternas, para convertir a linternas UV. Sabía que encontraría algo divertido para utilizar con, pero fue meses antes de que me di cuenta de que hacer con ellos. Cuando vi un cu
Diversión con foto montaje - episodio 2

Diversión con foto montaje - episodio 2

Bueno el episodio 1 fue todo un éxito porque realmente alguien que no me miró. Así que aquí vamos con el episodio 2. En este Instructable buscamos algunos datos reales de entrada para enviar a la pantalla de LCD de 1602 que construyó en el episodio 1
Diversión con foto montaje - episodio 24

Diversión con foto montaje - episodio 24

Cuando yo estaba colocado en el extranjero a principios de 1970 había dos cosas buen precio disponibles que más militares chicos gustaron: equipo de música y alcohol. No, no es sobre una destilería casera powered PIC este Instructable. Lo siento. El
Sustituir halógenos de baja tensión Bi-Pin con LEDs

Sustituir halógenos de baja tensión Bi-Pin con LEDs

este instructivo detalla cómo adaptar fácilmente una lámpara halógena bi-pin de baja tensión (12V) con una "Bombilla" que se utilice menos energía de alta potencia (< 10W), duración (50.000 horas) y aproximadamente la misma potencia (~ 300 lú
9-Charlieplexor (9-pines para 72 LEDs)

9-Charlieplexor (9-pines para 72 LEDs)

Este Instructable muestra cómo cablear una 9-Charlieplexor. (Formalmente se trata de un "circuito de Charlieplexing con 9 nodos" capaz de controlar 72 LEDs o menos.) Un método general podría tomarse de este diseño para Charlieplexors más grande.
Desmitificador de 4 pines direccionables LEDS RGB

Desmitificador de 4 pines direccionables LEDS RGB

Si has visto mi anterior Instructable sobre LEDs RGB, tienes una muy buena base en la habilidad de poner tres fuentes luminosas distintas en un solo paquete en sus estructuras.Tiempo de marchas en, y también lo hace la tecnología! Una de las novedade
Arduino 16 LEDs con dos registros de desplazamiento 74HC595 (pins ilimitados)

Arduino 16 LEDs con dos registros de desplazamiento 74HC595 (pins ilimitados)

Este es mi primer instructivo, espero que te guste. He estado jugando con LEDs para un tiempo y me di cuenta de que estoy bastante limitada con los pines de Arduino y no se pueden hacer grandes proyectos que requiere una gran cantidad de pines. Se tr
3 Arduino Pins to 24+ Output Pins

3 Arduino Pins to 24+ Output Pins

¿Acaben los pines de salida para tu Arduino? Bien esta es la solución para usted! En este tutorial muestro el hardware y el código necesario para el control de múltiplos de 8 número de salidas, utilizando sólo 3 de sus pines de Arduino. La idea princ
DIY Party Chick Pin

DIY Party Chick Pin

Aprender cómo hacer un sombrero de fiesta pequeña. Luego hacen un dulce poco partido Chick perno de DIY en pocos simples pasos en esta entrega de hacer, con Madge! Hacemos que sea fácil hacer fabulosas!Paso 1: Vea el Video!Paso 2: Se necesita:Se nece