-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
6f3c134
commit 3d64060
Showing
7 changed files
with
130 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,7 @@ | ||
MCU = atmega8 | ||
F_CPU = 8000000 | ||
TARGET = funkenschlag | ||
SRC = funkenschlag.c serial.c src_adc.c src_sw.c src_ds.c datenschlag.c | ||
SRC = funkenschlag.c serial.c twi.c src_adc.c src_sw.c src_ds.c src_twi_adc.c datenschlag.c | ||
COMBINE_SRC = 0 | ||
|
||
include avr-tmpl.mk |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
#include <stdlib.h> | ||
#include <stdint.h> | ||
#include <avr/io.h> | ||
#include <avr/interrupt.h> | ||
#include <avr/wdt.h> | ||
#include <util/delay.h> | ||
#include "config.h" | ||
#include "serial.h" | ||
#include "src_twi_adc.h" | ||
#include "twi.h" | ||
|
||
/* PCF8591 I²C ADC/DAC */ | ||
#define TWI_ADC_ADDR 0x48 | ||
#define TWI_ADC_CHANNELS 4 | ||
|
||
uint16_t twi_adc_raw [TWI_ADC_CHANNELS] = {0}; | ||
int16_t twi_adc_values[TWI_ADC_CHANNELS] = {0}; | ||
|
||
static int16_t read_adc(uint8_t adc) { | ||
uint8_t result = 0; | ||
twi_start(TWI_ADC_ADDR<<1); | ||
twi_write(adc); | ||
twi_stop(); | ||
twi_start((TWI_ADC_ADDR<<1) | 1); | ||
twi_read(1); /* discard first response */ | ||
result = twi_read(0); | ||
return result; | ||
} | ||
|
||
int16_t twi_adc_get(uint8_t n) { | ||
return twi_adc_values[n]; | ||
} | ||
|
||
uint16_t twi_adc_get_raw(uint8_t n) { | ||
return twi_adc_raw[n]; | ||
} | ||
|
||
void twi_adc_query(void) { | ||
/* keep sampling adc data */ | ||
for (uint8_t adc = 0; adc < TWI_ADC_CHANNELS; adc++) { | ||
/* scale to 10 bit values */ | ||
twi_adc_raw[adc] = read_adc(adc); | ||
twi_adc_values[adc] = twi_adc_raw[adc]<<2; | ||
} | ||
} | ||
|
||
void twi_adc_init(void) { | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
void twi_adc_init(void); | ||
void twi_adc_query(void); | ||
int16_t twi_adc_get(uint8_t n); | ||
uint16_t twi_adc_get_raw(uint8_t n); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
#include <stdlib.h> | ||
#include <stdint.h> | ||
#include <string.h> | ||
#include <avr/io.h> | ||
#include <avr/pgmspace.h> | ||
#include <avr/interrupt.h> | ||
#include <util/twi.h> | ||
#include "twi.h" | ||
|
||
void twi_init(void) { | ||
TWSR = 0; | ||
TWBR = (F_CPU / 100000UL - 16) / 2; | ||
TWCR = 1<<TWEN; | ||
} | ||
|
||
static void twi_wait(void) { | ||
while (!(TWCR & (1<<TWINT))); | ||
} | ||
|
||
void twi_start(uint8_t addr) { | ||
TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN); | ||
twi_wait(); | ||
TWDR = addr; | ||
TWCR = (1<<TWINT) | (1<<TWEN); | ||
twi_wait(); | ||
} | ||
|
||
void twi_stop(void) { | ||
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO); | ||
} | ||
|
||
void twi_write(uint8_t data) { | ||
TWDR = data; | ||
TWCR = (1<<TWINT) | (1<<TWEN); | ||
twi_wait(); | ||
} | ||
|
||
uint8_t twi_read(uint8_t ack) { | ||
TWCR = (1<<TWINT) | (1<<TWEN) | (ack? (1<<TWEA) : 0); | ||
twi_wait(); | ||
uint8_t result = TWDR; | ||
if (!ack) twi_stop(); | ||
return result; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
void twi_init(void); | ||
void twi_start(uint8_t addr); | ||
void twi_stop(void); | ||
uint8_t twi_read(uint8_t ack); | ||
void twi_write(uint8_t data); |