RC filter: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace |
Bez shrnutí editace |
||
Riadok 1: | Riadok 1: | ||
<FONT Size="+1"> | |||
Presmerovanie 🡆 [[Riadenie sústavy 1. rádu]] | |||
</FONT> | |||
<!-- | |||
'''Úloha 1:''' Odmerajte časový priebeh signálov pri nabíjaní kondenzátora C cez rezistor R. Z nameraného grafu určte hodnotu časovej konštanty T a spresnite hodnoty R a C. | '''Úloha 1:''' Odmerajte časový priebeh signálov pri nabíjaní kondenzátora C cez rezistor R. Z nameraného grafu určte hodnotu časovej konštanty T a spresnite hodnoty R a C. | ||
Riadok 186: | Riadok 193: | ||
--> | |||
Verzia z 14:52, 5. máj 2021
Presmerovanie 🡆 Riadenie sústavy 1. rádu
Zdrojovy kod pre AVRGCC a ARDUINO
/* **********************************************************
*
* Hruba kostra programu na identifikaciu parametrov RC clena
*
* Odpor je pripojeny a) na niektory digitalny vystup
* b) zaroven na analogovy vstup
* Kondenzator je pripojeny na iny analogovy vstup
* Okrem merania dvoch velicin mame premennu sysTime, ktoru
* kazdych 10ms inkrementujeme a tak "meriame cas".
* Namerane udaje odosielame ako trojicu cas,input,output\n\
* po seriovej linke rychlostou min. 19200 Bd do PC, kde si
* hodnoty zobrazime graficky.
*
* Pozor: toto je len kostra, ktoru musite doplnit spravnymi
* konfiguracnymi parametrami, aby to fungovalo!
*
************************************************************ */
#include <stdio.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include "uart.h"
#include "adc.h"
#define RCinput // Digitalny (budiaci) vstup RC clena
#define vIn // Analogovy vstup RC clena
#define vOut // Analogovy vystup RC clena
unsigned volatile static int sysTime=0;
/* Prerusenie od casovaca T0 kazdych 10 ms */
ISR (TIMER0_COMPA_vect)
{
sprintf(outString,"%d,%d,%d\n",sysTime, adc_read(vIn),adc_read(vOut));
uart_puts(outString);
sysTime++;
}
void timer0_init(void) /* Mode 2: clear on CTC match */
{
TCCR0A =
TCCR0B =
OCR0A = // Nastav periodu 10ms
TCNT0 = // Vynuluj pocitadlo
TIFR0 = // Clear CTC flag
TIMSK0 = // Enable Overflow Interrupt
}
void hw_init(void)
{
/* tu nastavite spravne vstupy a vystupy */
}
int main(void)
{
cli(); // cez inicializaciu zakazeme prerusenia
hw_init();
uart_init(57600);
timer0_init();
adc_init();
sei();
while(1)
{
// Part 1: identification of the system
if ( sysTime == 100) // v prvej sekunde
set_bit(PORTx,RCinput); // start charge
if ( timeVal == 600) // v siestej sekunde
clear_bit(PORTx,RCinput); // start dischg
if (timeVal>1000) // po 10 sekundach STOP
{
cli();
while(1); /* stop here forever, end of experiment */
}
//nothing to do here, everything else is in ISR
}
}
/* Arduino code nabuduce */
Literatúra
-->