I2L 2022 Groupe6

De wiki-se.plil.fr
Aller à la navigation Aller à la recherche

Proposition de système

Nous voudrions équiper la carte d'un port USB, d'une horloge, d'une LED, d'un bouton et d'un haut-parleur. Le but final serait de, lors d'un appui bouton et/ou CapsLock (à définir ensemble), de faire un son et un allumage de la LED.

Contre-proposition

L'idée est bien de refléter l'ensemble de l'état des touches "verrous" du clavier du PC. A chaque changement d'état de ces touches vous associerez un signal lumineux avec les 3 LED multicolores et surtout un signal sonore. Vous êtes tenus de produire des sons et pas seulement des notes. Pour cela vous devrez réussir à stocker (en mémoire flash) des échantillons sonores et à les reproduire sur votre haut-parleur.

Fichiers

Vous utiliserez le même circuit imprimé que le groupe 5.

Installation

Installation des dépendances :

apt install gcc-avr avr-libc dfu-programmer

Passer du fichier source au fichier exécutable :

Compil : avr-gcc -mmcu=atmega16u2 -DF_CPU=16000000UL -c -Wall -I. -Os main.c -o main.o

Edition des liens (exe) : avr-gcc -mmcu=atmega16u2 -g -lm -Wl,--gc-sections -o main.elf main.o

Transformer le code source en fichiers utilisable pour la carte

avr-objcopy -j .text -j .data -O ihex main.elf main.hex

dfu-programmer atmega16u2 erase

dfu-programmer atmega16u2 flash time.hex

dfu-programmer atmega16u2 reset

Programmation

MAKEFILE

AVR = avr-gcc
AVR_HEX = avr-objcopy

TARGET = atmega16u2
DFU = dfu-programmer

CFLAGS = -mmcu=atmega16u2 -DF_CPU=16000000UL -Wall -I. -Os
CLINKS = -mmcu=atmega16u2 -g -lm -Wl,--gc-sections
CHEXS = -j .text -j .data -O
 
SRC = main.c

OBJ = main.o

ELF = main.elf

HEX = main.hex

push: clean compile link hex erase flash reset

compile: 
    $(AVR) $(CFLAGS) -c $(SRC) -o $(OBJ)

link: 
    $(AVR) $(CLINKS) -o $(ELF) $(OBJ)

hex:
    $(AVR_HEX) $(CHEXS) ihex $(ELF) $(HEX)

erase:
    $(DFU) $(TARGET) erase 

flash:
    $(DFU) $(TARGET) flash $(HEX)

reset:
    $(DFU) $(TARGET) reset

clean:
    rm -f $(OBJ) $(EXEC)

Prog SE

LED

Faire clignoter une led

#include <avr/io.h>
#include <util/delay.h>

#define LED     0
#define BUTTON  2

int main(void){

    DDRD |= (1 << LED);                // Sortie pour la LED
    PORTD &= ~(1 << LED);              // Configuration de la résistance de tirage

    while(1) {
        PORTD |= (1 << LED);
        _delay_ms(5);
        PORTD &= ~(1 << LED); 
        _delay_ms(5);     
    }
}

Boutons

Faire clignoter une led en fonction du bouton
#include <avr/io.h>
#include <util/delay.h>

#define LED     0
#define BUTTON  2

int main(void){

    CLKSEL0 = 0b00010101;
    CLKSEL1 = 0b00001111;
    CLKPR = 0b10000000;
    CLKPR = 0;

    DDRD |= (1 << LED);  
    PORTD &= ~(1 << LED);              

    DDRC &= ~(1 << BUTTON);                
    PORTC |= (1 << BUTTON);    

    while(1) {
        if (!(PINC & (1 << BUTTON)))
        {
            PORTD |= (1 << LED);
            _delay_ms(5);
            PORTD &= ~(1 << LED); 
            _delay_ms(5);     
        }
    }
}

HP

Faire parler le HP

Prog USB

Le programme qui va sur le microcontrôleur

Prog PC

Le programme qui tourne sur le pc