Operácie

Tester obvodu 7400: Rozdiel medzi revíziami

Z SensorWiki

Riadok 34: Riadok 34:
 
<tabs>
 
<tabs>
 
<tab name="AVR C-code"><source lang="c++" style="background: LightYellow;">
 
<tab name="AVR C-code"><source lang="c++" style="background: LightYellow;">
#include <avr/io.h>
+
#include <avr/io.h>  
 +
#include <util/delay.h>
 +
#include <stdio.h>
 +
#include "uart.h"
 +
FILE mystdout = FDEV_SETUP_STREAM(uart_putc, NULL, _FDEV_SETUP_WRITE);
 +
#define F_CPU 16000000UL
 +
#define BAUD 9600
  
int main(void)
+
#define NAND_A_PIN PD6
{
+
#define NAND_B_PIN PD7
  unsigned int measuredValue;
+
#define NAND_OUT_PIN PB0
  
  while (1)
+
void init_pins() {
  {
+
    DDRD |= (1 << NAND_A_PIN) | (1 << NAND_B_PIN);
     /*  relax  */ 
+
    DDRB &= ~(1 << NAND_OUT_PIN); // Nastavit pin jako vstup
  }
+
}
 +
 
 +
void send_input_signals(uint8_t a, uint8_t b) {
 +
     if (a) PORTD |= (1 << NAND_A_PIN);
 +
    else PORTD &= ~(1 << NAND_A_PIN);
 +
    if (b) PORTD |= (1 << NAND_B_PIN);
 +
    else PORTD &= ~(1 << NAND_B_PIN);
 +
}
  
  return(0);
+
uint8_t read_output_signal() {
 +
    return PINB & (1 << NAND_OUT_PIN);
 
}
 
}
  
</source></tab>
+
int main() {
<tab name="filename.h"><source lang="c++" style="background: LightYellow;">
+
    init_pins();
#include <avr/io.h>
+
    uart_init();
 +
    stdout = &mystdout;
 +
    printf("Kombinacie:\n");
  
void adc_init(void);                                   // A/D converter initialization
+
    for (;;) {
 +
        send_input_signals(1, 0);
 +
        printf("Vystup pro 10: %d\r\n", read_output_signal());
 +
        _delay_ms(1000);  
  
unsigned int adc_read(char a_pin);
+
        send_input_signals(1, 1);  
 +
        printf("Vystup pro 11: %d\r\n", read_output_signal());
 +
        _delay_ms(1000);
 +
 
 +
        send_input_signals(0, 1);
 +
        printf("Vystup pro 01: %d\r\n", read_output_signal());
 +
        _delay_ms(1000);
 +
 
 +
        send_input_signals(0, 0);
 +
        printf("Vystup pro 00: %d\r\n", read_output_signal());
 +
        _delay_ms(1000);
 +
    }
 +
 
 +
    return 0;
 +
}
 
</source></tab>
 
</source></tab>
 
</tabs>
 
</tabs>

Verzia zo dňa a času 18:55, 3. máj 2024

Záverečný projekt predmetu MIPS / LS2024 - Jakub Macák


Zadanie

Mojou úlohou bolo spraviť tester obvodu 7400 (4xNAND), pripojeného k doske Arduino UNO

Obvod 7400 (4xNAND).

Literatúra:


Analýza a opis riešenia

Obvod 7400 (4xNAND) je obvod, ktorý obsahuje štyri samostatné NAND brány, pričom každá brána má dva vstupy a jeden výstup. Najskôr som si musel zistiť PIN layout tohto obvodu a následne obvod správne zapojiť. Po zapojení som spravil program, ktorý posiela do obvodu kombinácie (1) jednotiek a (0) núl. Obvod kombinácie vyhodnotí a odošle hodnotu na základe danej kombinácie. Keďže to je NAND obvod, v prípade kombinácie 1-1 vracia 0, pre každú inú kombináciu vracia 1.

PIN layout obvodu.

Zapojenie

Zapojenie som realizoval zapojením pinu 1 na D8, 2 na D7 a 3 na D6. Pin 7 na GND a 14 na Vcc.

Schéma zapojenia obvodu 7400 (4xNAND).


Algoritmus a program

Algoritmus programu je....


#include <avr/io.h> 
#include <util/delay.h> 
#include <stdio.h> 
#include "uart.h" 
FILE mystdout = FDEV_SETUP_STREAM(uart_putc, NULL, _FDEV_SETUP_WRITE);
#define F_CPU 16000000UL
#define BAUD 9600

#define NAND_A_PIN PD6 
#define NAND_B_PIN PD7
#define NAND_OUT_PIN PB0

void init_pins() {
    DDRD |= (1 << NAND_A_PIN) | (1 << NAND_B_PIN);
    DDRB &= ~(1 << NAND_OUT_PIN); // Nastavit pin jako vstup
}

void send_input_signals(uint8_t a, uint8_t b) {
    if (a) PORTD |= (1 << NAND_A_PIN);
    else PORTD &= ~(1 << NAND_A_PIN);
    if (b) PORTD |= (1 << NAND_B_PIN);
    else PORTD &= ~(1 << NAND_B_PIN);
}

uint8_t read_output_signal() {
    return PINB & (1 << NAND_OUT_PIN);
}

int main() {
    init_pins();
    uart_init();
    stdout = &mystdout;
    printf("Kombinacie:\n");

    for (;;) {
        send_input_signals(1, 0); 
        printf("Vystup pro 10: %d\r\n", read_output_signal());
        _delay_ms(1000); 

        send_input_signals(1, 1); 
        printf("Vystup pro 11: %d\r\n", read_output_signal());
        _delay_ms(1000); 

        send_input_signals(0, 1); 
        printf("Vystup pro 01: %d\r\n", read_output_signal());
        _delay_ms(1000); 

        send_input_signals(0, 0); 
        printf("Vystup pro 00: %d\r\n", read_output_signal());
        _delay_ms(1000); 
    }

    return 0; 
}

Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x zdrojaky.zip:

Zdrojový kód: zdrojaky.zip


Overenie

Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia. Na konci uvádzame fotku záverečnej obrazovky pred resetom. Vypísaný je tu priemerný čas a najlepší čas.

Aplikácia.

Video:

Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.