« SE3 PSE Binome2023-7 » : différence entre les versions

De projets-se.plil.fr
Aller à la navigation Aller à la recherche
Ligne 63 : Ligne 63 :
  }
  }
=== Code 2 ===
=== Code 2 ===
<nowiki>#</nowiki>include <stdio.h>
#include <stdio.h>
 
#include <stdint.h>
<nowiki>#</nowiki>include <stdint.h>
#include <avr/io.h>
 
#define OUTPUT 0
<nowiki>#</nowiki>include <avr/io.h>
#define INPUT 1
 
#define INPUT_PULLUP 2
<nowiki>#</nowiki>define OUTPUT 0
#define HIGH 1
 
#define LOW 0
<nowiki>#</nowiki>define INPUT 1
#define PIN_BUTTON1 1
 
#define PIN_LED1 0 void pinModed(uint8_t pin,uint8_t mode,uint8_t portchoix) {
<nowiki>#</nowiki>define INPUT_PULLUP 2
volatile char *ddr;
 
if(portchoix == 'B') ddr = &DDRB;
<nowiki>#</nowiki>define HIGH 1
if(portchoix == 'C') ddr = &DDRC;
 
if(portchoix == 'D') ddr = &DDRD;
<nowiki>#</nowiki>define LOW 0
volatile char *port;
 
if(portchoix == 'B') port = &PORTB;
<nowiki>#</nowiki>define PIN_BUTTON1 1
if(portchoix == 'C') port = &PORTC;
 
if(portchoix == 'D') port = &PORTD; if(mode==OUTPUT) {
<nowiki>#</nowiki>define PIN_LED1 0
*ddr |= (1<<pin);
void pinModed(uint8_t pin,uint8_t mode,uint8_t portchoix)
}
{
else if(mode==INPUT)
 
{
volatile char *ddr;
*ddr &= ~(1<<pin);
 
}
if(portchoix == 'B') ddr = &DDRB;
else if(mode==INPUT_PULLUP)
 
{
if(portchoix == 'C') ddr = &DDRC;
*ddr &= ~(1<<pin);
 
*port |= ~(1<<pin);
if(portchoix == 'D') ddr = &DDRD;
}
 
} void digitalWrited(uint8_t pin ,uint8_t valeur ,uint8_t portchoix ) {
volatile char *port;
volatile char *port;
 
if(portchoix == 'B') port = &PORTB;
if(portchoix == 'B') port = &PORTB;
if(portchoix == 'C') port = &PORTC;
 
if(portchoix == 'D') port = &PORTD; if(valeur == HIGH) {
if(portchoix == 'C') port = &PORTC;
*port |= (1<<pin);
 
}
if(portchoix == 'D') port = &PORTD;
else
if(mode==OUTPUT)
{
{
*port &= ~(1<<pin);
 
}
<nowiki>*</nowiki>ddr |= (1<<pin);
} int digitalread(uint8_t pin, uint8_t portchoix) {
 
volatile char *pinbcd;
}
if(portchoix == 'B') pinbcd = &PINB;
 
if(portchoix == 'C') pinbcd = &PINC;
else if(mode==INPUT)
if(portchoix == 'D') pinbcd = &PIND; return *pinbcd & (1<<pin) ? HIGH : LOW ; }
 
int main(){
{
pinModed(PC2,OUTPUT,'C');
 
pinModed(PC4,OUTPUT,'C');
<nowiki>*</nowiki>ddr &= ~(1<<pin);
digitalWrited(PC2,HIGH,'C');
 
digitalWrited(PC4,HIGH,'C');
}
while(1){}
 
}
else if(mode==INPUT_PULLUP)
 
{
 
<nowiki>*</nowiki>ddr &= ~(1<<pin);
 
<nowiki>*</nowiki>port |= ~(1<<pin);
 
}
 
}
void digitalWrited(uint8_t pin ,uint8_t valeur ,uint8_t portchoix )
{
 
volatile char *port;
 
if(portchoix == 'B') port = &PORTB;
 
if(portchoix == 'C') port = &PORTC;
 
if(portchoix == 'D') port = &PORTD;
if(valeur == HIGH)
{
 
<nowiki>*</nowiki>port |= (1<<pin);
 
}
 
else
 
{
 
<nowiki>*</nowiki>port &= ~(1<<pin);
 
}
 
}
int digitalread(uint8_t pin, uint8_t portchoix)
{
 
volatile char *pinbcd;
 
if(portchoix == 'B') pinbcd = &PINB;
 
if(portchoix == 'C') pinbcd = &PINC;
 
if(portchoix == 'D') pinbcd = &PIND;
return *pinbcd & (1<<pin) ? HIGH : LOW ;
}
 
int main(){
 
pinModed(PC2,OUTPUT,'C');
 
pinModed(PC4,OUTPUT,'C');
 
digitalWrited(PC2,HIGH,'C');
 
digitalWrited(PC4,HIGH,'C');
 
while(1){}
 
}

Version du 11 mars 2024 à 17:09

Manette

Photos

Photo du PCB
Photo de la Schématique

Fichier:SE3-pad 2.zip

Programmation AVR

Allumage de LEDS

Code 1

#include<avr/io.h>
#include<stdio.h>
#include<stdlib.h>
void config(unsigned int bit, unsigned char port, unsigned int io)
{
   
    if (io == 1)
    {
        if (port == 'B')    DDRB |= (io<<bit);
        if (port == 'C')    DDRC |= (io<<bit); 
        if (port == 'D')    DDRD |= (io<<bit); 
    }
    else if (io == 0)
    {
        if (port == 'B')    DDRB &= ~(1<<bit);
        if (port == 'C')    DDRC &= ~(1<<bit); 
        if (port == 'D')    DDRD &= ~(1<<bit); 
    }
}
void put_bit(unsigned int bit, unsigned char port, unsigned int io)
{
    if (io == 1)
    {
        if (port == 'B')    PORTB |= (io<<bit);
        if (port == 'C')    PORTC |= (io<<bit); 
        if (port == 'D')    PORTD |= (io<<bit); 
    }
    else if (io == 0)
    {
        if (port == 'B')    PORTB &= ~(1<<bit);
        if (port == 'C')    PORTC &= ~(1<<bit); 
        if (port == 'D')    PORTD &= ~(1<<bit); 
    }
}
int get_bit(unsigned int bit, unsigned char port)
{
    if (port == 'B')    return 1 & (PINB>>bit);
    if (port == 'C')    return 1 & (PINC>>bit);
    if (port == 'D')    return 1 & (PIND>>bit);
    return -1;
}
int main(void)
{   
    //Setup
    config(2,'C',1);
    config(4,'C',1);
    put_bit(2,'C',1);
    put_bit(4,'C',1);
    while (1);
    return 0;
}

Code 2

#include <stdio.h>
#include <stdint.h>
#include <avr/io.h>
#define OUTPUT 0
#define INPUT 1
#define INPUT_PULLUP 2
#define HIGH 1
#define LOW 0
#define PIN_BUTTON1 1
#define PIN_LED1 0 void pinModed(uint8_t pin,uint8_t mode,uint8_t portchoix) {
volatile char *ddr;
if(portchoix == 'B') ddr = &DDRB;
if(portchoix == 'C') ddr = &DDRC;
if(portchoix == 'D') ddr = &DDRD;
volatile char *port;
if(portchoix == 'B') port = &PORTB;
if(portchoix == 'C') port = &PORTC;
if(portchoix == 'D') port = &PORTD; if(mode==OUTPUT) {
*ddr |= (1<<pin);
}
else if(mode==INPUT)
{
*ddr &= ~(1<<pin);
}
else if(mode==INPUT_PULLUP)
{
*ddr &= ~(1<<pin);
*port |= ~(1<<pin);
}
} void digitalWrited(uint8_t pin ,uint8_t valeur ,uint8_t portchoix ) {
volatile char *port;
if(portchoix == 'B') port = &PORTB;
if(portchoix == 'C') port = &PORTC;
if(portchoix == 'D') port = &PORTD; if(valeur == HIGH) {
*port |= (1<<pin);
}
else
{
*port &= ~(1<<pin);
}
} int digitalread(uint8_t pin, uint8_t portchoix) {
volatile char *pinbcd;
if(portchoix == 'B') pinbcd = &PINB;
if(portchoix == 'C') pinbcd = &PINC;
if(portchoix == 'D') pinbcd = &PIND; return *pinbcd & (1<<pin) ? HIGH : LOW ; }
int main(){
pinModed(PC2,OUTPUT,'C');
pinModed(PC4,OUTPUT,'C');
digitalWrited(PC2,HIGH,'C');
digitalWrited(PC4,HIGH,'C');
while(1){}
}