Ultrazvukovy dalkomer + ATtiny214
Pavel Hudecek
edizon na seznam.cz
Pondělí Březen 30 18:39:10 CEST 2020
Dobrý den všem,
UZ dálkoměr produkuje dost hrozná data, často to lítá o skoro 10 %. Je to takovéto klasické čidlo se dvěma UZ měniči HC-SH04. Mám tam někde nějakou chybu, nebo je to normální chování tohoto typu měření?
Měří se s pomocí TCA0 a přerušení od pinu:
volatile long timeRet=0;
volatile char portIntSync=1;
long timeResult=0;
interrupt [PORTA_PORT_vect] void porta_int_isr(void) { // ----
if (portIntSync==0) {
if (PIN_echo==1) { // vzestupna - zacatek mereni
TCA0.SINGLE.CNT = 0;
TCA0_SINGLE_INTFLAGS = 1;
timeRet=0;
} else { // sestupna - konec mereni
timeRet=(long)TCA0.SINGLE.CNT;
portIntSync=1;
}
}
PORTA.INTFLAGS=255;
}
Program ve volném čase mj. dělá:
if (portIntSync==1) {
#asm("cli")
timeResult=timeRet;
#asm("sei")
#asm("cli")
PIN_trig(1);
delay_us(10);
PIN_trig(0);
portIntSync=0;
TCA0.SINGLE.CNT = 0;
#asm("sei")
}
Zobrazování výsledků vypadá takto (zobrazí raw hodnotu a pak přepočet na mm):
PIN_led(1);
printN(timeResult, 9);
putchar(' ');
printN((timeResult*345*8+1)/40000, 5);
putchar('\n');
delay_ms(100);
PIN_led(0);
printN zobrazuje long číslo (parametr 1) na počet míst (par. 2).
#define PIN_led(d) EQUBIT(PORTA.OUT,3,(d))
#define PIN_trig(d) EQUBIT(PORTA.OUT,5,(d))
#define PIN_echo TSTBIT(PORTA_IN,6)
Jsem zvědav, zda se formátování odesláním rozbije, nebo ne:-)
Díky,
PH
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20200330/1942f9f2/attachment.html>
Další informace o konferenci Hw-list