Program v Bascomu - měřič rychlosti se dvěma IR bránami

Mám prosbu zda by mi někdo nepomohl s tímto programem.Chci si postavit měřič rychlosto a pořád se mi to nedaří zprovoznit.Mam připojené dvě IR brány na Pind.2 Pind.3 (Atmega8).
Pls. pomozte
Děkuji

[code]$crystal = 8000000
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40
$sim

Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Config Lcd = 16 * 2 'nastaveni lcd

Dim X As Word
Dim V As Single
Dim F As Long

Config Timer0 = Timer , Prescale = 1024
Config Timer1 = Counter , Edge = Falling , Prescale = 1
Config Portd = Input
On Ovf0 Tim0_isr
Enable Interrupts

Do

Cls

Lcd “merim rychlost”
Lowerline
Cursor Off
If Pind.2 = 1 Then
Start Timer0
End If
If Pind.3 = 1 Then
Stop Timer0
End If
Tim0_isr:
X = Timer1

Locate 2 , 1
Lcd " "
Locate 2 , 1
V = 500000 / X
Lcd Str(v)
Lcd " m/s "
Waitms 250

Tcnt0 = 0
Timer1 = 0

Return

Loop

End[/code]


NTB-
ASUS F3T-AP028
AMD TL-56
RAM 2x1024MB
GPU-NV7600-256M
HDD-160G / 7200
DVD-Sup.MTI.

:arrow_right: administrator: přejmenováno z "Program v Bascomu - pomóc"

:arrow_right: administrator: příspěvek byl upraven

zdravím, jsem velice rád že potkávám “Bascomáře”. Teď k programu. Popiš co ti na tom nejede, ale jak se na ten program takk dívám, tak ho budeš muset asi celý přepsat. Používáš sice piny D.2 a D.3, ale používáš je jako obyčejné vstupní. Zde vzniká problém, že jejich stav je čten pouze v jeden kratičký okamžik,kdy porgram ve smyčce do-loop “čichá” podmínku. Ty potřebuješ, nastavity tyto piny tak, aby vyvolávaly externí přerušení:

'nadefinuj přerušení
On Int0 Vnejsi0 'při přerušení na pinuD.2 vykonej podprogramVnejsi0
'totéž udělej pro přerušení 1

do
'tadz bude hlavní smyčka do-loop, kde se bude konat výpočet a zobrazení
loop
end

Vnejsi0:
'tady zapni časovač a počítání pulzů
return

'totéž udělej pro podprogram přerušení 1(vypni časovač…)
return

doporuřuji projít stránky jednoho chytrého pána, kde najdeš i vzorové příklady programů v ČJ, věřím, že hodně pomůžou. Jsou to mp222.wz.cz

Vzhledem k editu admina usuzuji, že Bascom tu není moc vítán,tak mě kontaktuj na icq 376811892 a nejen ty, ale kdokoli kdo bude potřebovat pomoct s progamováním AVR v bascomu. Víc hlav víc ví.
/pokud jsem něčím porušil pravidla, nekamenujte mne prosím, jen jsem chtěl pomoct/

Tady je třeba ne testovat pin, ale čekat na hranu 0-1.

Bez přerušení to jde např takto:

[code]$regfile = “M8def.dat”
$crystal = 8000000

Config Timer1 = Timer , Prescale = 8

Dim Cas As Word

Do
Stop Timer1
Timer1 = 0
Bitwait Pind.2 , Reset 'čekej až pind.2 bude 0
Bitwait Pind.2 , Set 'čekej na přechod 0-1
Start Timer1

  Bitwait Pind.3 , Set
  Stop Timer1
  Cas = Timer1                      'čas v mikrosec
  '...
  '...
  '...

Loop[/code]

Je v Bascomu regulérní zápis “If Pind.2 = 1”?
V C by to bylo vždy vyhodnoceno jako true, musely by tam bejt 2 rovnítka.