Ultrazvukovy dalkomer + ATtiny214

Miroslav Šinko sinkomiro na gmail.com
Úterý Březen 31 00:46:27 CEST 2020


Ako mate inicializovane ostatne piny PORTA? Nemozu vyvolavat
prerusenie, v tomto programe neziaduce?

miro

po 30. 3. 2020 o 18:39 Pavel Hudecek <edizon na seznam.cz> napísal(a):
>
>
>
> 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
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list