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