Skip to content

Instantly share code, notes, and snippets.

@delamonpansie
Created August 24, 2011 07:30
Show Gist options
  • Save delamonpansie/1167499 to your computer and use it in GitHub Desktop.
Save delamonpansie/1167499 to your computer and use it in GitHub Desktop.
taho
#include <util/delay.h>
#include <avr/pgmspace.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include "lcd.h"
void
rs_ws(char rs, char ws)
{
DDRD |= _BV(PD0);
DDRD |= _BV(PD1);
if (rs)
PORTD |= _BV(PD0);
else
PORTD &= ~_BV(PD0);
if (ws)
PORTD |= _BV(PD1);
else
PORTD &= ~_BV(PD1);
}
void
en(char v)
{
DDRA |= _BV(PA1);
if (v)
PORTA |= _BV(PA1);
else
PORTA &= ~_BV(PA1);
}
void
write_nible(char n)
{
DDRD |= _BV(PD2)|_BV(PD3)|_BV(PD4)|_BV(PD5);
PORTD &= ~(_BV(PD2)|_BV(PD3)|_BV(PD4)|_BV(PD5));
PORTD |= (n << 2) & (_BV(PD2)|_BV(PD3)|_BV(PD4)|_BV(PD5));
}
char
read_nible()
{
DDRD &= ~(_BV(PD2)|_BV(PD3)|_BV(PD4)|_BV(PD5));
return (PIND & (_BV(PD2)|_BV(PD3)|_BV(PD4)|_BV(PD5))) >> 2;
}
static volatile int rev, srev, rpm, sec;
static void init()
{
/* Enable interrupt on PB0 change */
DDRB &= ~_BV(PB0);
PORTB |= _BV(PB0);
GIMSK |= _BV(PCIE);
PCMSK |= _BV(PCINT0);
/* Start 1 sec timer */
TCCR1B |= _BV(CS11)|_BV(CS10)|_BV(WGM12);
OCR1 = 0x3d09;
TIMSK |= _BV(OCIE1A);
}
ISR(PCINT_vect)
{
if (PINB & _BV(PB0)) {
rev++;
srev++;
}
}
ISR(TIMER1_COMPA_vect)
{
rpm = srev * 60 / 3;
srev = 0;
sec++;
}
void print(char *msg, int v)
{
char buf[5];
itoa(v, buf, 10);
lcd_puts(msg);
lcd_puts(buf);
lcd_puts(" ");
}
int main()
{
init();
lcd_init(1, 0);
lcd_display_on_off_control(1, 0, 0);
lcd_clear_display();
lcd_puts("HeliTaho 1.0");
lcd_set_ddram_addr(40);
lcd_puts(" delamonpansie");
_delay_ms(1000);
lcd_clear_display();
sei();
for(;;) {
lcd_set_ddram_addr(0);
print("rev:", rev);
print("sec:", sec);
lcd_set_ddram_addr(40);
print("rpm:", rpm);
lcd_puts(" ");
_delay_ms(50);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment