From 870701f742c2b3367b3f97a81369a230709b3ecb Mon Sep 17 00:00:00 2001 From: sejo Date: Fri, 17 Dec 2021 13:26:33 -0600 Subject: [PATCH] tomatimer --- src/img/foto_tomatimer.png | Bin 0 -> 36934 bytes src/log.txt | 1 + src/low-level.gmo | 8 +- src/tomatimer.gmo | 347 +++++++++++++++++++++++++++++++++++++ 4 files changed, 354 insertions(+), 2 deletions(-) create mode 100644 src/img/foto_tomatimer.png create mode 100644 src/tomatimer.gmo diff --git a/src/img/foto_tomatimer.png b/src/img/foto_tomatimer.png new file mode 100644 index 0000000000000000000000000000000000000000..b8eb05e0c5b7612d4d38acbcab8f8f9c2c9d48f7 GIT binary patch literal 36934 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 ./nibble_dice_tracker.gmi {nibble dice tracker} => ./darena.gmi {darena} +## avr-asm + +=> ./tomatimer.gmi {tomatimer} +=> ./avr-asm.gmi {avr-asm} + ## mu => ./mu.gmi {mu} @@ -24,8 +29,7 @@ writing code closer to the machine(s) => ./forth.gmi {forth} -## others -=> ./avr-asm.gmi {avr-asm} + # command-line interface notes diff --git a/src/tomatimer.gmo b/src/tomatimer.gmo new file mode 100644 index 0000000..5e8a43e --- /dev/null +++ b/src/tomatimer.gmo @@ -0,0 +1,347 @@ +# tomatimer + +a small pomodoro timer on an attiny85, programmed with {avr-asm}. + +part of the {s-camino} practice. + +=> ./img/foto_tomatimer.png photo of the tomatimer: a small circuit with two leds, a buzzer, the attiny85, all of them over a plastic card. + +# about + +tomatimer works as a 25 and 5 minutes timer, cycling between them. + +a couple of LEDs indicate via blinking which one of the two timers is active at a given moment. + +at the end of each timer, a buzzer plays an alarm during some seconds. + +all the durations can be reconfigured via the source code if needed. + +# connections + +```diagrama de pines + ┌──────┐ + │1 8│ VCC + │2 7│ PB2: LED state 1 + │3 6│ PB1: LED state 0 +GND │4 5│ PB0: Buzzer + └──────┘ +``` + +LEDs are connected such that an output of "high" will turn them on. + +# source code + +with billingual comments + +``` +; tomatimer.S +#include + +; TIMER1 tiene su reloj a clk/512 (~1953 Hz) +; contando 244 pulsos se va a 8Hz (frame freq) +; i.e. 8 frames son 1 segundo +; r16 y r17 se usan como registros auxiliares + +; duraciones en minutos de los timers +#define DUR_TIMER0 25 +#define DUR_TIMER1 5 +; duraciones en segundos de la alarma +#define DUR_ALARMA0 3 +#define DUR_ALARMA1 5 + +; más chico es más agudo +#define WAVE_PERIOD0 3 +#define WAVE_PERIOD1 6 + +; teórico: 244 +#define TIMER1_PERIOD 240 + +#define rFrames r20 +#define rSegundos r21 +#define rMinutos r22 +#define rFlags r23 + +#define fAlarmOn 0 +#define fAlarmLevel 1 +#define fCualTimer 2 + +#define pinAlarm PB0 +#define pinState0 PB1 +#define pinState1 PB2 + +; para hacer fast modulo 8 +#define MASK_FRAMES 0x07 + +; *********************** +; vectores de interrupts: +; *********************** +; Reset +.org 0x0000 + rjmp main + +; dirección 0x0003 * 2 +.org 0x0006 + rjmp timer1compareA_isr + +; dirección 0x0009 * 2 +.org 0x0012 + rjmp timer1compareB_isr + +; *********************** +; Main +; *********************** +.org 0x001E +main: + ;---------------------------------- + ; configuración general + ;---------------------------------- + + ; habilita interrupciones + sei + + ; pin PB0 como pin de salida + ldi r16, (1<