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>

#define LED     8
#define BOUTON  9

int main(void){
DDRB |= 0x01;                // Sortie pour la LED
DDRB &= ~0x02;               // Entrée pour le bouton
PORTB |= 0x02;               // Configuration de la résistance de tirage

while(1){
  if(PINB & 0x02) PORTB &= ~0x01;      // LED éteinte
  else PORTB |= 0x01;                  // LED allumée
  }
}

Boutons

Faire clignoter une led en fonction du bouton

HP

Faire parler le HP

Prog USB

Le programme qui va sur le microcontrôleur

Prog PC

Le programme qui tourne sur le pc