hardware initialisation

master
Nidan 13 years ago
parent c3f88152ce
commit 87711a38ca

@ -0,0 +1,62 @@
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#define TEMP_PIN 0
#define IMPULS0_PIN 1
#define IMPULS1_PIN 2
#define TAST_PIN 3
#define FET0_PIN 0
#define FET1_PIN 1
uint8_t led_color = 0;
void io_init(void)
{
PORTA = (1 << TAST_PIN) | (1 << IMPULS1_PIN) | (1 << IMPULS0_PIN);/* enable pullups on inputs */
PORTB = 0;
DDRA = (1 << OC0B);/* led outputs ... */
DDRB = (1 << OC0A) | (1 << FET0_PIN) | (1 << FET1_PIN);/* ... and FET output */
}
void led_init(void)
{
TCCR0A = (1 << COM0A1) | (1 << COM0B1) | (1 << COM0B0) | (1 << WGM1) | (1 << WGM0);/* pwm enable: fast, A not inverted, B inverted */
TCCR0B = (1 << CS02) | (1 << CS00);/* prescaler / 1024 */
TCNT0 = 0;/* reset counter */
OCR0A = OCR0B = led_color;
}
void led_set(void)
{
OCR0A = OCR0B = led_color;
}
void adc_init(void)
{
ADMUX = (1 << REFS1) | (TEMP_PIN << MUX0);/* Vref = 1.1, pin selection */
ADCSRA = (1 << ADEN) | (1 << ADATE);/* adc enable, triggered */
ADCSRB = (1 << ADTS2);/* trigger on counter 0 overflow */
DIDR0 = (1 << TEMP_PIN);/* disable digital input on adc pin */
/* result in (ADCH << 8) | ADCL, accessable as ADC? */
}
void input_init(void)
{
GIMSK = (1 << PCIE0);/* interrupt on change on PORT A */
PCMSK0 = (1 << TAST_PIN) | (1 << IMPULS1_PIN) | (1 << IMPULS0_PIN);
}
int main(void)
{
/* if we store the last setting somewhere get calculate led_color from it before calling led_init() */
io_init();
led_init();
adc_init();
input_init();
return 0;
}
Loading…
Cancel
Save