#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; }