Operácie

Vstupná jednotka s palcovým prepínačom TS211

Zo stránky SensorWiki

Záverečný projekt predmetu MIPS / LS2026 - Sofiia Nevzorova


Zadanie

Navrhnite a realizujte vstupnú jednotku na báze dvojsekčného palcového prepínača TS211 s BCD kódovaním pripojenú k vývojovej doske ACROB. Programovo zabezpečte čítanie hodnôt z oboch sekcií prepínača (desiatky a jednotky) v negatívnej logike s využitím interných pull-up rezistorov mikrokontroléra ATmega328P. Implementujte algoritmus na prevod BCD kódov z portov PORTC a PORTD na výsledné dekadické číslo v rozsahu 00 až 99. Zabezpečte výpis aktuálnej hodnoty cez rozhranie UART do konzoly pri každej zmene nastavenia(na overenie).

Vývojová doska ACROB.

Literatúra:


Analýza a opis riešenia

Základným komponentom tohto riešenia je dvojsekčný palcový prepínač TS211. Každá sekcia prepínača funguje ako mechanický dekodér, ktorý prevádza nastavenú číslicu (0–9) na 4-bitový signál v kóde BCD (Binary Coded Decimal). Prepínač má pre každú sekciu 5 výstupov: jeden spoločný kontakt (Common) a štyri dátové kontakty s váhami 1, 2, 4 a 8.

Hardvérové zapojenie: Prepojenie s mikrokontrolérom ATmega328P na doske ACROB bolo realizované nasledovne: Ľavý blok (Desiatky): Výstupy s váhami 1, 2, 4, 8 sú pripojené na piny A0, A1, A2 a A3 (čo zodpovedá portu PORTC, bity 0–3). Pravý blok (Jednotky): Výstupy sú pripojené na digitálne piny D2, D3, D4 a D5 (port PORTD, bity 2–5). Spoločné kontakty (C): Obe sekcie majú spoločný kontakt pripojený na GND (zem). Z hľadiska mechanickej konštrukcie bolo kvôli nedostatočnej dĺžke kontaktov prepínača pre montáž priamo do breadboardu zvolené pripojenie pomocou flexibilných vodičov, čím sa zabezpečil spoľahlivý elektrický kontakt.

Celkový pohľad na zariadenie.

Princíp činnosti a softvérové spracovanie: Vstupy mikrokontroléra sú nakonfigurované v režime s aktivovanými internými pull-up rezistormi. To znamená, že piny pracujú v negatívnej logike: Ak je kontakt v prepínači otvorený, pull-up rezistor drží na pine logickú 1. Ak je kontakt zopnutý (číslica je zvolená), pin sa prepojí so zemou (GND) a procesor načíta logickú 0. V programe sa preto načítané hodnoty z registrov PINC a PIND najskôr bitovo invertujú (~). Pre desiatky (PORTC) sa priamo maskujú spodné 4 bity. Pre jednotky (PORTD) sa využíva bitový posun doprava o 2 miesta (>> 2), aby sa bity z pozícií D2–D5 dostali na pozície 0–3 pre správny výpočet váhy BCD kódu.

Výsledné číslo sa vypočíta podľa vzťahu: Hodnota = (Desiatky * 10) + Jednotky, a následne sa posiela cez rozhranie UART do konzoly PuTTY.

Schéma zapojenia.


Algoritmus a program

Algoritmus programu využíva toto a toto, základné funkcie sú takéto a voláma ich tuto... Výpis kódu je nižšie...


#define F_CPU 16000000UL
#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);

uint8_t read_bcd_tens(void) {
    uint8_t status = ~PINC;
    return (status & 0x0F); 
}

uint8_t read_bcd_units(void) {
    uint8_t status = ~PIND;
    return ((status >> 2) & 0x0F); 
}

int main(void)
{
    uart_init();
    stdout = &mystdout; 
    
    DDRC &= ~0x0F; PORTC |= 0x0F;      
    DDRD &= ~0x3C; PORTD |= 0x3C;      

    uint8_t last_val = 255; 

    while(1)
    {
        uint8_t tens = read_bcd_tens();   
        uint8_t units = read_bcd_units(); 
        
        uint16_t total = (tens * 10) + units;
        
        if (total != last_val) {
            printf("Value: %02u\n", total);
            last_val = total;
        }
        
        _delay_ms(150); 
    }
    return 0;
}
#include <avr/io.h>

void adc_init(void);                                   // A/D converter initialization

unsigned int adc_read(char a_pin);

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

Ako ste overili funkciu, napríklad... 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 hotového zariadenia.

Aplikácia.

Video:

Čo by som urobil inak

Zamyslite sa spätne nad problémom, ktorý ste riešili a napíšte, čo sa vám nepodarilo a nabudúce by ste spravili inak.


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