[AC2] Aula09

- Missing addicionals
- Aula08 fix
- pfull fix

Signed-off-by: TiagoRG <tiago.rgarcia@ua.pt>
This commit is contained in:
Tiago Garcia 2024-04-26 11:16:10 +01:00
parent 282dac9853
commit b3efac5a67
Signed by: TiagoRG
GPG Key ID: DFCD48E3F420DB42
7 changed files with 194 additions and 7 deletions

View File

@ -2,8 +2,8 @@
void _int_(8) isr_T2() { void _int_(8) isr_T2() {
static int c = 0; static int c = 0;
if (c++ == 6) { if (++c == 6) {
IEC0bits.T2IE = 0; T2CONbits.TON = 0;
LATE &= 0xFFFE; LATE &= 0xFFFE;
c = 0; c = 0;
} }
@ -12,7 +12,8 @@ void _int_(8) isr_T2() {
void _int_(7) isr_INT1() { void _int_(7) isr_INT1() {
LATE |= 0x0001; LATE |= 0x0001;
IEC0bits.T2IE = 1; TMR2 = 0;
T2CONbits.TON = 1;
IFS0bits.INT1IF = 0; IFS0bits.INT1IF = 0;
} }
@ -24,14 +25,14 @@ int main() {
IPC1bits.INT1IP = 2; IPC1bits.INT1IP = 2;
IEC0bits.INT1IE = 1; IEC0bits.INT1IE = 1;
IFS0bits.INT1IF = 0; IFS0bits.INT1IF = 0;
INTCONbits.INT1EP = 0;
IPC2bits.T2IP = 2; IPC2bits.T2IP = 2;
IFS0bits.T2IF = 0; IFS0bits.T2IF = 0;
T2CONbits.TCKPS = 7; T2CONbits.TCKPS = 7;
PR2 = 39062; PR2 = 39062;
TMR2 = 0; IEC0bits.T2IE = 1;
T2CONbits.TON = 1;
EnableInterrupts(); EnableInterrupts();

Binary file not shown.

View File

@ -0,0 +1,91 @@
#include <detpic32.h>
#define SAMPLES 4
volatile int voltage = 0;
const unsigned int dis7Scodes[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D,
0xFD, 0x07, 0x7F, 0x6F, 0x77, 0xFC,
0x39, 0x5E, 0xF9, 0xF1};
typedef enum { HIGH, LOW } display;
void send2displays(unsigned char value) {
static display flag = LOW;
value = ((value / 10) << 4) + (value % 10);
unsigned char high = dis7Scodes[value >> 4];
unsigned char low = dis7Scodes[value & 0x0F];
if (flag == HIGH) {
LATD = (LATD & 0xFF9F) | 0x0040;
LATB = (LATB & 0x80FF) | high << 8;
flag = LOW;
} else {
LATD = (LATD & 0xFF9F) | 0x0020;
LATB = (LATB & 0x80FF) | low << 8;
flag = HIGH;
}
}
void _int_(4) isr_T1(void) {
AD1CON1bits.ASAM = 1;
IFS0bits.T1IF = 0;
}
void _int_(12) isr_T3(void) {
send2displays(voltage);
IFS0bits.T3IF = 0;
}
void _int_(27) isr_adc(void) {
int *p = (int *)(&ADC1BUF0);
int media = 0;
for (; p <= (int *)(&ADC1BUFF); p++)
media += *p;
media /= SAMPLES;
voltage = (media * 33 + 511) / 1023;
IFS1bits.AD1IF = 0;
}
int main() {
TRISB &= 0x80FF;
TRISD &= 0xFF9F;
TRISBbits.TRISB4 = 1;
AD1PCFGbits.PCFG4 = 0;
AD1CON1bits.SSRC = 7;
AD1CON1bits.CLRASAM = 1;
AD1CON3bits.SAMC = 16;
AD1CON2bits.SMPI = SAMPLES - 1;
AD1CHSbits.CH0SA = 4;
AD1CON1bits.ON = 1;
IPC6bits.AD1IP = 2;
IFS1bits.AD1IF = 0;
IEC1bits.AD1IE = 1;
// Configure Timer T1 with 5Hz frequency
T1CONbits.TCKPS = 2;
PR1 = 62499;
TMR1 = 0;
T1CONbits.TON = 1;
// Configure Timer T3 with 100Hz frequency
T3CONbits.TCKPS = 2;
PR3 = 49999;
TMR3 = 0;
T3CONbits.TON = 1;
IPC1bits.T1IP = 2;
IFS0bits.T1IF = 0;
IEC0bits.T1IE = 1;
IPC3bits.T3IP = 2;
IFS0bits.T3IF = 0;
IEC0bits.T3IE = 1;
EnableInterrupts();
while (1);
return 0;
}

View File

@ -0,0 +1,21 @@
#include <detpic32.h>
int main() {
T3CONbits.TCKPS = 2;
PR3 = 49999;
TMR3 = 0;
T3CONbits.TON = 1;
// tON = 0.25 * (1 / 100) = 2.5ms
// fOutPreScaler = 20MHz / 4 = 5MHz
// tOutPreScaler = 1 / 5MHz = 200ns
// OC1RS = (2.5 * 10^-3) / (200 * 10^-9) = 12500
OC1CONbits.OCM = 6;
OC1CONbits.OCTSEL = 1;
OC1RS = 12500;
OC1CONbits.ON = 1;
while (1);
return 0;
}

View File

@ -0,0 +1,27 @@
#include <detpic32.h>
void setPWM(unsigned int dutyCycle) {
if (dutyCycle < 0 || dutyCycle > 100)
return;
OC1RS = ((PR3 + 1) * dutyCycle) / 100;
}
int main() {
T3CONbits.TCKPS = 2;
PR3 = 49999;
TMR3 = 0;
T3CONbits.TON = 1;
// tON = 0.25 * (1 / 100) = 2.5ms
// fOutPreScaler = 20MHz / 4 = 5MHz
// tOutPreScaler = 1 / 5MHz = 200ns
// OC1RS = (2.5 * 10^-3) / (200 * 10^-9) = 12500
OC1CONbits.OCM = 6;
OC1CONbits.OCTSEL = 1;
OC1RS = 12500;
OC1CONbits.ON = 1;
while (1) setPWM(80);
return 0;
}

View File

@ -0,0 +1,32 @@
#include <detpic32.h>
void setPWM(unsigned int dutyCycle) {
if (dutyCycle < 0 || dutyCycle > 100)
return;
OC1RS = ((PR3 + 1) * dutyCycle) / 100;
}
int main() {
T3CONbits.TCKPS = 2;
PR3 = 49999;
TMR3 = 0;
T3CONbits.TON = 1;
// tON = 0.25 * (1 / 100) = 2.5ms
// fOutPreScaler = 20MHz / 4 = 5MHz
// tOutPreScaler = 1 / 5MHz = 200ns
// OC1RS = (2.5 * 10^-3) / (200 * 10^-9) = 12500
OC1CONbits.OCM = 6;
OC1CONbits.OCTSEL = 1;
OC1RS = 12500;
OC1CONbits.ON = 1;
TRISC &= 0xBFFF;
while (1) {
setPWM(10);
LATC = (LATC & 0xBFFF) | (PORTD & 0x0001) << 14;
}
return 0;
}

View File

@ -1,19 +1,34 @@
#!/bin/bash #!/bin/bash
# Validate arguments
if [ "$#" -ne 1 ]; then if [ "$#" -ne 1 ]; then
echo "Usage: $0 <source_file>" echo "Usage: $0 <source_file>"
exit exit
fi fi
# Parse arguments
file=${1##*/} file=${1##*/}
dir=${1%/*} dir=${1%/*}
filename="${file%.*}" filename="${file%.*}"
cd "$dir" || exit
# Go to source directory
if [ -d "$dir" ]; then
cd "$dir" || exit
fi
# Compile and clean up
pcompile "$file" || exit pcompile "$file" || exit
for f in *; do for f in *; do
if [[ "$f" =~ ^.+\.(o|elf|map|sym)$ ]]; then if [[ "$f" =~ ^.+\.(o|elf|map|sym)$ ]]; then
rm "$f" rm "$f"
fi fi
done done
# Program and open terminal
ldpic32 "$filename.hex" || exit ldpic32 "$filename.hex" || exit
pterm || exit pterm || exit
cd "$OLDPWD" || exit
# Go back to original directory
if [ -d "$dir" ]; then
cd - || exit
fi