Måling af hastighed med AVR

Hejsa Jeg =F8nsker at m=E5le en hastighed vha. 2 IR-sender/modtagere og en ATmega32. Det skal g=F8res, s=E5 man starter med at m=E5le tiden, n=E5r f= =F8rste sensor passeres og stoppes, n=E5r den anden passeres. Jeg har kigget p=E5 dette eksempel:

formatting link
men her virker det til, at man starter m=E5lingen, n=E5r B0-indgangen g=E5r h=F8j og stopper den, n=E5r den g=E5r lav igen. Hvordan =E6ndrer man det lettest, s=E5 den starter/stopper p=E5 hvert sit input?

P=E5 forh=E5nd tak

T.

Reply to
T.
Loading thread data ...

"T." skrev i en meddelelse news: snipped-for-privacy@f42g2000yqn.googlegroups.com... Hejsa Jeg ønsker at måle en hastighed vha. 2 IR-sender/modtagere og en ATmega32. Det skal gøres, så man starter med at måle tiden, når første sensor passeres og stoppes, når den anden passeres. Jeg har kigget på dette eksempel:

formatting link
men her virker det til, at man starter målingen, når B0-indgangen går høj og stopper den, når den går lav igen. Hvordan ændrer man det lettest, så den starter/stopper på hvert sit input?

På forhånd tak

T.

---------------------- Nu har jeg ikke lige nærstuderet eksemplet, men det er da bestemt et program der er til at overskue :o) Og i den grad overkill med en Mega32, men det kan jo være lige meget.

Eksemplet er lavet med en Capture indgang, det er ofte smart, men i dit tilfælde skal du bruge to forskelige indgange, og så er det lettere at bruge almindelge indgange eller interrupt indgange. Jeg gætter på at du ikke skal måle mikrosekund nøjagtighed, og at processoren ikke skal lave ret meget andet end at måle hastigheden/tiden mellem to pulser ?. Så kan du snildt klare den med helt simple input pins. Det er ekstremt let at sætte op, og ekstremtlet at arbejde med. Der er ikke så meget register setup. Men du skal jo kunne programere lidt selv. Kan du programmere selv? Ellers kan du godt få noget hjælp herfra.

mvh Kåre

Reply to
Kåre

- snipped-for-privacy@f42g2000yqn.googlegroups.com...

=F8rste

bit-avr-tim...,

=E5r

ogram

t bruge

n

let

ster

s

Hej K=E5re

Helt klart. Ja, det er lidt overkill med en mega32, men nu var det lige den, eksemplet var lavet ud fra ;-) Eksemplet er jo lavet med en Captureindgang for at kunne benytte interrupt - det vil jeg ogs=E5 gerne lave det med, men som jeg forst=E5r eksemplet, s=E5 starter timeren, n=E5r ICP g=E5r h=F8j og stopper, n=E5r de= n g=E5r lav igen - er det ikke rigtigt forst=E5et? Jeg vil jo netop have een fotosensor til at starte timeren og en anden til at stoppe den. Det lyder n=E6sten som en S/R Flip-flop, men hvorfor skulle man dog blande en F/F ind i det, n=E5r det da b=F8r laves i SW'en - der er vel andre, der har haft behov for at lave et lignede projekt f=F8r? :-) Det skal faktisk bruges til at afl=E6se "mundingshastigheden" fra en katapult, s=E5 lidt tidskritisk er det da. Jo, jeg kan godt programmere, men man kan jo altid blive dygtigere af andres erfaringer :-)

Mvh.

T.

Reply to
T.

"T." skriver:

Kan softwaren ikke lave en S-R FlipFlop?

Klaus

--
  Modelbane Europas hjemmeside: http://www.modelbaneeuropa.hadsten.dk
     Min egen hjemmeside nu med nyt domæne http://www.moppe.dk
 Click to see the full signature
Reply to
Klaus D. Mikkelsen

Hej Kåre

Helt klart. Ja, det er lidt overkill med en mega32, men nu var det lige den, eksemplet var lavet ud fra ;-) Eksemplet er jo lavet med en Captureindgang for at kunne benytte interrupt - det vil jeg også gerne lave det med, men som jeg forstår eksemplet, så starter timeren, når ICP går høj og stopper, når den går lav igen - er det ikke rigtigt forstået? Jeg vil jo netop have een fotosensor til at starte timeren og en anden til at stoppe den. Det lyder næsten som en S/R Flip-flop, men hvorfor skulle man dog blande en F/F ind i det, når det da bør laves i SW'en - der er vel andre, der har haft behov for at lave et lignede projekt før? :-) Det skal faktisk bruges til at aflæse "mundingshastigheden" fra en katapult, så lidt tidskritisk er det da. Jo, jeg kan godt programmere, men man kan jo altid blive dygtigere af andres erfaringer :-)

Mvh.

T.

------------------------------- Du har jo nok pins nok, så jeg ville bare vælge en fotosensor ind på hver sin interruptindgang. Bland Capture funktionen ude af det.

Start en timer når det ene interrupt trigger, og stop timeren og udfør beregning, sende data osv når det andet interrupt kommer. Det kræver ingen ekstra ekstern hardware, og koster vel ikke mere end 10-20 linier kode, for selve interrupt/timing delen.

Du kan jo bruge Mega32'erens 16 bit timer 1, sætte prescaler så du får en tilpas opløsning. Hvis de 16 bit ikke er nok må du jo så enable overflow interrupt for timeren, så du kan tælle til mere end 65535 ticks. Nulstil timeren på INT0 (fotocelle1), og aflæs den på INT1 (fotocelle 2).

mvh Kåre

Reply to
Kåre

den g=E5r

-

=E5 hver

r
0-20

=E5r en

rflow

le 2).

Hej K=E5re

Det lyder ikke helt tosset. Det pr=F8ver jeg. L=F8ber jeg panden imod, m=E5 jeg jo lige vende tilbag - h=E5ber det er ok :-)

Mvh.

T.

Reply to
T.

Hej Kåre

Det lyder ikke helt tosset. Det prøver jeg. Løber jeg panden imod, må jeg jo lige vende tilbag - håber det er ok :-)

Mvh.

T.

---------------------- Du siger bare til!

mvh Kåre

Reply to
Kåre

- snipped-for-privacy@t23g2000yqt.googlegroups.com...

r

r den g=E5r

n -

=E5 hver

=F8r

f=E5r en

verflow

elle 2).

=E5

Til...

Dette lille program:

#include #include #include #define outp(a, b) b =3D a #define inp(a) a

uint8_t led; typedef unsigned char u08;

ISR(INT0_vect) { /* signal handler for external interrupt int0 */ led =3D 0x01; }

ISR(INT1_vect) { /* signal handler for external interrupt int1 */ led =3D 0x00; // PORTB =3D 0x00; }

int main(void) { outp(0x01, DDRB); /* use PortB for output (LED) */ outp(0x00, DDRD); /* use PortD for input (switches) */ outp((1

Reply to
T.

Til...

Dette lille program:

#include #include #include #define outp(a, b) b = a #define inp(a) a

uint8_t led; typedef unsigned char u08;

ISR(INT0_vect) { /* signal handler for external interrupt int0 */ led = 0x01; }

ISR(INT1_vect) { /* signal handler for external interrupt int1 */ led = 0x00; // PORTB = 0x00; }

int main(void) { outp(0x01, DDRB); /* use PortB for output (LED) */ outp(0x00, DDRD); /* use PortD for input (switches) */ outp((1

Reply to
Kåre

-=AD-

Jeg bruger WinAVR

GIMSK bruges i forbindelse med aktivering af interrupt.

Det vil jeg da kigge p=E5 - takker! Jeg skriver koden til et STK500 board. Her er det lidt tr=E6lst, at knapperne er aktiv lave, n=E5r nu interruptvektorerne trigger p=E5 et h=F8j= t signal, s=E5 man er n=F8dt til at holde knapperne nede og s=E5 slippe dem for at generere interruptet - men det er selvf=F8lgelig kun s=E5 l=E6nge je= g befinder mig i testfasen :-)

Mvh.

T.

Reply to
T.

"T." skrev i en meddelelse news: snipped-for-privacy@t20g2000yqe.googlegroups.com...

Jeg bruger WinAVR

GIMSK bruges i forbindelse med aktivering af interrupt.

--------------------------------------------------------- Bruger også WinAVR, men den kender altså ikke GIMSK, ej heller kan jeg finde den i databladet. ...ups, kom lige til at tænke på at jeg lige pt sidder og fusker med et lille 168 projekt. Kan godt se den eksisterer i Mega32. Jeg har dog aldrig brugt den direkte, men har altid sat hele GICR registret op. GIMSK kan jeg faktisk heller ikke finde i databladet...nå det er en detalje, bare du sørger for at få den sat rigtigt op.

Det vil jeg da kigge på - takker! Jeg skriver koden til et STK500 board. Her er det lidt trælst, at knapperne er aktiv lave, når nu interruptvektorerne trigger på et højt signal, så man er nødt til at holde knapperne nede og så slippe dem for at generere interruptet - men det er selvfølgelig kun så længe jeg befinder mig i testfasen :-)

Mvh.

T.

--------------------------------------- Det er helt normalt med aktive lave knapper. Bruger aldrig andet... Men du kan jo styre om din irq indgang skal trigges af falling, rising eller level med MCUCR, nederste fire bit.

mvh Kåre

Reply to
Kåre

- snipped-for-privacy@t20g2000yqe.googlegroups.com...

---=AD=AD-

g finde

et

g
g

Det er ogs=E5 "en underlig fisk" Jeg lavede p=E5 et tidspunkt lidt kode til en 90S8515, hvor jeg aktiverede GIMSK til brug for interrupt. Da den gik ud af produktion, skiftede jeg selvf=F8lgelig over til ATmega8515 - pludselig kunne jeg ikke l=E6ngere compile koden - Det viste sig s=E5, at GIMSK p=E5 en mega8515 hedder GICR - hvorfor???

=F8jt

jeg

ler

Okay! At kigge. Det virkede ogs=E5 tumpet, at det var n=F8dvendigt at g=F8r= e s=E5dan - takker.

Reply to
T.

Jeg mangler et SIMPELT C-program til WINAVR, der forbinder et 2x24 karakters LCD display til een port og bare kan skrive en linje tekst i hver linje. Bare for at se, at der er hul igennem.

Har nogen et godt link?

P=E5 forh=E5nd tak

T.

Reply to
T.

Kan du ikke bruge assembler ?

formatting link

Reply to
Benny Nissen

Dette blir som å banne i kirken. Tenk å anbefale assembler. Det er like idiotisk som å hevde at en monokrom skjerm fungerer bra til ren dostekst-behandling. Hør her. Det er like vanvittig som å anbefale å snakke rent norsk / dansk uten å spe opp språket med fremmedord. Har fader Holberg snakket forgjeves?

HM

Jeg programmerer selv i assembler, og jeg vet hvor "idiotisk" det er.

Reply to
Harald Mossige

Jeg ved godt assembler har sine fordele, men opgav det for mange =E5r siden til fordel for C. S=E5 jeg vil v=E6re glad for et eksempel til WinAVR i C. Brugte tidligere CodeVision. Her bruger du bare wizarden.

2 min. S=E5 er du klar. Det skal dog v=E6re til WinAVR, da denne desv=E6rre ikke forst=E5r mange af kommandoernde fra CodeVision :-(

Mvh.

T.

Reply to
T.

Jeg ved godt assembler har sine fordele, men opgav det for mange år siden til fordel for C. Så jeg vil være glad for et eksempel til WinAVR i C. Brugte tidligere CodeVision. Her bruger du bare wizarden.

2 min. Så er du klar. Det skal dog være til WinAVR, da denne desværre ikke forstår mange af kommandoernde fra CodeVision :-(

Mvh.

T.

----------------------------------------------------- Har du en mail kan jeg sende dig noget. Men det er "as is", og du skal nok selv lige ind og kigge i koden og pille det ud du vil bruge.

mvh Kåre

Reply to
Kåre

- snipped-for-privacy@c16g2000yqd.googlegroups.com...

i

re

e

S'f=F8lli - Det tilbud, tager jeg gerne imod :-) skott at festudvalget dot dk

Reply to
T.

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.