#include <avr/io.h>
void ad_init(unsigned char channel){
ADCSRA = (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); // Résolution maximale
ADCSRB = (((channel&0x20)==0?0:1)<<MUX5); // Sélection du canal
ADMUX = channel&0x1f;
ADMUX |= (0<<REFS1) | (1<<REFS0); // Référence de mesure AVCC
ADMUX |= (1<<ADLAR); // Alignement gauche de la valeur
ADCSRA |= (1<<ADEN); // Convertisseur activé
}
unsigned int ad_capture(void){
ADCSRA |= (1<<ADSC); // Début de conversion
while(ADCSRA & (1<<ADSC)); // Attente de la fin de conversion
return ADCH; // Un seul octet retourné
}
#include <stdint.h>
#include <avr/io.h>
#define SPI_DDR DDRB
#define SPI_PORT PORTB
#define SPI_SS 0
#define SPI_SCK 1
#define SPI_MOSI 2
#define SPI_MISO 3
void spi_init(void){ // Initialisation du bus SPI
{
SPI_DDR |= (1<<SPI_MOSI)|(1<<SPI_SCK)|(1<<SPI_SS);
SPI_DDR &= ~(1<<SPI_MISO);
SPI_PORT |= (1<<SPI_SS);
SPI_PORT |= (1<<SPI_MISO);
SPSR = (1<<SPI2X);
SPCR = (1<<SPE)|(1<<MSTR)|(1<<CPOL)|(1<<CPHA);
}
void spi_activer(void){ // Activer le périphérique
SPI_PORT &= ~(1<<SPI_SS); // Ligne SS à l'état bas
}
void spi_desactiver(void){ // Désactiver le périphérique
SPI_PORT |= (1<<SPI_SS); // Ligne SS à l'état haut
}
uint8_t spi_echange(uint8_t envoi){ // Communication sur le bus SPI
{
SPDR = envoi;
while(!(SPSR & (1<<SPIF)));
return SPDR;
}