pokud by na určitém vstupu ATTINY byl impuls >1,3ms bude aktivní určitý výstup
pokud bude impuls >1,7ms budou aktivní dva výstupy
chtěl bych z toho pochopit jak se měří ta šířka toho impulsu
předem dík všem dobrým duším za jakoukoliv radu
![Smile :)](./images/smilies/icon_smile.gif)
Moderátor: Moderátoři
Dík, netušil jsem že by to mohlo být až tak jednoduché, hned jak budu moc tak to vyzkoušímujosvec píše:mrkni tady
http://www.mikrocontroller.net/topic/271756
Co je to "velmi dlouhý"? Ten puls by měl mít šířku 1 - 2ms s opakováním po 20ms.mtajovsky píše:... Pokud bude ten puls velmi dlouhý ... Pulsein neskončí a nic se nevyhodnotí.
tohle bude asi o dost složitější, mohl by někdo poradit jak by to vypadalo?hakamusai píše:šířku impulzu lze měřit za pomocí Timeru a náběžný/sestupný hrany ...
V zadání úlohy není nic o omezení délky pulsu. Dokud puls neskončí, nic se nebude dít, takže puls > 1,7 ms je taky puls - 1 minuta, třeba. Jenže po té 1,7 ms se nic nenastaví, bude se čekat celou minutu. Toť k algoritmu. V případě Pulsein je maximální vrácená hodnota 65535 x 10 µs defaultně, timeout i časová jednotka se dají nastavit, nicméně zadání není splněno.denny_ul píše:Co je to "velmi dlouhý"?mtajovsky píše:... Pokud bude ten puls velmi dlouhý ... Pulsein neskončí a nic se nevyhodnotí.
Kód: Vybrat vše
Dim Time1 As Word
Dim Time2 As Word
Dim Krok As Long
Dim Sirka_pulsu As Long
Config Timer1 = Timer , Prescale = 1
Config Pinb.0 = Input
Krok = 1000000000 / _xtal '1 krok čítače [nanosec]
Bitwait Pinb.0 , Reset
'*******************************************************
Do
Bitwait Pinb.0 , Set 'čekej na úroveň "1"
Time1 = Tcnt1 'zapiš stav čítače
Bitwait Pinb.0 , Reset 'čekej na úroveň "0"
Time2 = Tcnt1 'zapiš stav čítače
Sirka_pulsu = Time2 - Time1 'kroků čítače
Sirka_pulsu = Sirka_pulsu * Krok '[nanosec]
Sirka_pulsu = Sirka_pulsu / 1000 '[microsec]
Print Sirka_pulsu
Loop
End
Kód: Vybrat vše
$regfile = "attiny13a.dat"
$crystal = 9600000
$hwstack = 16
$swstack = 8
$framesize = 24
Config Portb.0 = Input
Config Portb.3 = Output
Config Portb.4 = Output
Dim W As Word
Do
Pulsein W , Pinb , 0 , 1
If W > 170 And W <= 200 Then
Portb.3 = 1
Else
Portb.3 = 0
End If
If W <= 130 And W > 100 Then
Portb.4 = 1
Else
Portb.4 = 0
End If
Loop
End
Kód: Vybrat vše
Pulsein W , Pinb , 0 , 1
Měří to délku log.0 nebo 1of an edge
Kód: Vybrat vše
$regfile = "attiny13.dat"
$crystal = 1000000
$hwstack = 16
$swstack = 8
$framesize = 24
Config Portb.0 = Input
Config Portb.3 = Output
Config Portb.4 = Output
Dim Puls As Byte
Dim Dolni As Byte
Dim Horni As Byte
Dolni = 130
Horni = 160
Aaa:
Pulsein Puls , Pinb , 0 , 0
If Puls < Dolni Then
Portb.3 = 0
Portb.4 = 0
End If
If Puls > Dolni And Puls < Horni Then
Portb.3 = 1
Portb.4 = 0
End If
If Puls > Horni Then
Portb.3 = 1
Portb.4 = 1
End If
Goto Aaa
End
Kód: Vybrat vše
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 16
$swstack = 8
$framesize = 24
Config Portb.0 = Input
Config Portb.3 = Output
Config Portb.4 = Output
Vystup1 alias Portb.3
Vystup2 alias Portb.4
Dim Puls As Word
Const Dolni = 130
Const Horni = 160
Do
Pulsein Puls , Pinb , 0 , 0
Select Case Puls
Case is < Dolni:
Vystup1 = 0
Vystup2 = 0
Case Dolni to Horni:
Vystup1 = 1
Vystup2 = 0
Case is > Horni:
Vystup1 = 1
Vystup2 = 1
End Select
Loop
End