Tanken är att man ska schemalägga när man ska nyttja bilen (och kunna göra tillfälliga ändringar) och timern sätter igång värmaren i lagom tid före.

Displayen ser ut så pga ett problem som jag har med följande kod:
Kod: Markera allt
#define MCU_CLK 7372800
#define cbi(port, shift) (port) &= ~(1<<shift)
#define sbi(port, shift) (port) |= (1<<shift)
#define F_OSC 7372800
#define LCD_TIGHTER_TIMING
#define relay 0
#define light 1
#define enter 4
#define hoger 8
#define ner 16
#define vanster 32
#define upp 64
#include "avr/io.h"
#include "lcd_44780.h"
#include "lcd_44780.c"
#include "avr/interrupt.h"
#include "inttypes.h"
#include "avr/signal.h"
#include "onewire.c"
#include "onewire.h"
volatile unsigned char boolean = 0;
volatile unsigned char secs = 32;
volatile unsigned char mins = 0;
volatile unsigned char hrs = 0;
volatile unsigned int onsecs = 0;
float temperatur;
float gettemp()
{
if (ow_reset())
{
lcd_clear();
lcd_home();
lcd_puts(" Sensor error! ");
lcd_puts("Heater disabled");
cbi(PORTD,relay);
for(;;);
}
return temperatur;
}
SIGNAL(SIG_TIMER1_COMPA)
{
boolean = !boolean;
if ((PIND&enter) == 0)
{
cli();
}
if (boolean)
{
secs++;
lcd_putchar(secs+'0');
if (++secs >= 60)
{
secs = 0;
mins++;
}
if (++mins >= 60)
{
hrs++;
secs = 0;
mins = 0;
}
if (++hrs >= 24);
{
hrs = 0;
mins = 0;
secs = 0;
}
}
lcd_putchar(secs+'0');
}
void setup()
{
ms_spin(500);
lcd_init();
lcd_puts("Init!");
//sätt upp 2Hz-interrupt
TCCR1B = (1<<CS12|1<<CS10|1<<WGM12); //systemklocka/1024
TIMSK = (1<<OCIE1A); //Compare1A enable
OCR1A = 3600; //interrupt två ggr/sek
DDRD = 0b00000011;
lcd_home();
lcd_clear();
lcd_set_cursor(1,0); //on,blink
ow_parasite_disable();
//temperatur = gettemp();
sei();
}
int main(void)
{
setup();
//UART_init();
for(;;)
{
/*if ((PIND&enter) == 0)
{
cli();
}*/
}
}
Knappen enter känns inte heller av i interruptet. Klistrar jag däremot in precis samma rader i mainloopen så går det bra.