Как сделать счетчик импульсов на AVR
Добавлено: Пт фев 17, 2006 19:18:32
Типа прикрутить фотодиод и фотоприемник??
Спасибо за ответ
Спасибо за ответ
Здесь можно немножко помяукать :)
https://radiokot.ru:443/forum/
Код: Выделить всё
$regfile = Attiny2313.dat
$crystal = 8000000
Dim W As Word
Dim N1 As Byte
Dim N2 As Byte
Dim N3 As Byte
Dim N4 As Byte
Dim N5 As Byte
Dim N6 As Byte
Dim M1 As Long
Dim M2 As Long
Dim M3 As Long
Dim M4 As Long
Dim M5 As Long
Dim M6 As Long
Ddrd = &B11011011 ' аноды
Ddrb = &B11111111 ' сегменты
Config Int0 = Falling ' прерывание INT0 по нисходящему фронту (c + на -)
On Int0 Encod
Enable Interrupts
Enable Int0
Do ' в главном цикле отображаем количество импульсов
Portd = &B11111110
Select Case N1
Case 0 : Portb = &B11000000
Case 1 : Portb = &B11111001
Case 2 : Portb = &B10100100
Case 3 : Portb = &B10110000
Case 4 : Portb = &B10011001
Case 5 : Portb = &B10010010
Case 6 : Portb = &B10000010
Case 7 : Portb = &B11111000
Case 8 : Portb = &B10000000
Case 9 : Portb = &B10010000
End Select
Waitms 5
Portd = &B11111101
Select Case N2
Case 0 : Portb = &B11000000
Case 1 : Portb = &B11111001
Case 2 : Portb = &B10100100
Case 3 : Portb = &B10110000
Case 4 : Portb = &B10011001
Case 5 : Portb = &B10010010
Case 6 : Portb = &B10000010
Case 7 : Portb = &B11111000
Case 8 : Portb = &B10000000
Case 9 : Portb = &B10010000
End Select
Waitms 5
Portd = &B11110111
Select Case N3
Case 0 : Portb = &B11000000
Case 1 : Portb = &B11111001
Case 2 : Portb = &B10100100
Case 3 : Portb = &B10110000
Case 4 : Portb = &B10011001
Case 5 : Portb = &B10010010
Case 6 : Portb = &B10000010
Case 7 : Portb = &B11111000
Case 8 : Portb = &B10000000
Case 9 : Portb = &B10010000
End Select
Waitms 5
Portd = &B11101111
Select Case N4
Case 0 : Portb = &B11000000
Case 1 : Portb = &B11111001
Case 2 : Portb = &B10100100
Case 3 : Portb = &B10110000
Case 4 : Portb = &B10011001
Case 5 : Portb = &B10010010
Case 6 : Portb = &B10000010
Case 7 : Portb = &B11111000
Case 8 : Portb = &B10000000
Case 9 : Portb = &B10010000
End Select
Waitms 5
Portd = &B10111111
Select Case N5
Case 0 : Portb = &B11000000
Case 1 : Portb = &B11111001
Case 2 : Portb = &B10100100
Case 3 : Portb = &B10110000
Case 4 : Portb = &B10011001
Case 5 : Portb = &B10010010
Case 6 : Portb = &B10000010
Case 7 : Portb = &B11111000
Case 8 : Portb = &B10000000
Case 9 : Portb = &B10010000
End Select
Waitms 5
Loop
End
Encod: ' тут узнаем в каком направлении вращают ручку энкодера
If Pind.5 = 1 Then ' если на ноге единица (импульс не пришел) тогда
Incr W ' инкременируем переменную (увеличиваем на 1)
Else ' в обратном случае
Decr W ' декрементируем переменную (уменьшаем на 1)
End If
Waitms 5 ' ждем пока утихнет дребезг контактов
Gifr = 64 ' сбрасываем регистр хранения прерывания INT0
' а тут готовим переменную к выводу на дисплей
M1 = W
M2 = M1
M3 = M1
M4 = M1
M5 = M1
M1 = M1 / 10000 ' обработка первого разряда
N1 = Abs(M1)
M2 = M2 Mod 10000 ' обработка второго разряда
M2 = M2 / 1000
N2 = Abs(M2)
M3 = M3 Mod 1000 ' обработка третьего разряда
M3 = M3 / 100
N3 = Abs(M3)
M4 = M4 Mod 100 ' обработка четвертого разряда
M4 = M4 / 10
N4 = Abs(m4)
M5 = M5 Mod 10 ' обработка пятого разряда
N5 = Abs(m5)
Return
vervoolf писал(а):у нас в новосибирске с LCD стоит не больше 450 рублей (простой), при стоймости тиньки2313 126 рублей?
vervoolf писал(а): у нас в новосибирске с LCD стоит не больше 450 рублей (простой), при стоймости тиньки2313 126 рублей?
eXL писал(а):А не подскажет ли ALL схему счетчика с таймером.
Т.е. выставляем время счета 5...10...45сек...1...5...10 минут(т.е. регулируемое время) и считаем число импульсов пришедших за это время.
Jack_A писал(а):eXL писал(а):А не подскажет ли ALL схему счетчика с таймером.
Т.е. выставляем время счета 5...10...45сек...1...5...10 минут(т.е. регулируемое время) и считаем число импульсов пришедших за это время.
Ну так сам же весь алгоритм расписал, и все понятно : 2 счетчика, на один подаются считаемые импульсы, на другой - таймерные кварцованные, стартуются и останавливаются одновременно. А если на АВР, так это все вместо железки реализуется внутри МК программно. Программа - пара страничек ассемблера. Делов-то.