Vstupná jednotka s palcovým prepínačom TS211: Rozdiel medzi revíziami
Zo stránky SensorWiki
| Riadok 10: | Riadok 10: | ||
'''Literatúra:''' | '''Literatúra:''' | ||
* [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob] | * [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob] | ||
Verzia z 16:53, 19. jún 2026
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).

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.

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.

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.

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.