Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Знатокам Bascom-AVR и прочим спецам


Знатокам Bascom-AVR и прочим спецам

Сообщений 1 страница 10 из 10

1

Надо сделать контроллер скорости для управления девайсом
от девайса есть датчик скорости вращения
Необходимо чтобы устройство считало импульсы от датчика скорости
МК-ATinny13 
Приходится писать на Bascom-AVR есть некоторые трудности
1) сигнал поступает не одинаково за секунду может быть 32 ипм а может +- 15 имп это особенность контроллируемого устройства. мне требуется реагировать на 32 имп больше зажечь красн свет меньше зеленый.
2) или я чего то не понимаю или что то тут не так
$regfile = "attiny13f.dat"
Config Pinb.0 = Output
Config Pinb.2 = Output
Config Timer0 = Counter , Edge = Rising , Prescale = 8
Tcnt0 = 0
Do
If Tcnt0 >= 32 Then Set Portb.2
If Tcnt0 >= 64 Then Set Portb.0
Waitms 1
Reset Portb.0 : Reset Portb.2
Loop
end

счетчик работает от внутренего генератора а хотелось бы чтобы он считал импульсы из вне при чем работает когда на выводе timer0 лог 0
можно конечно и так оставить вприципе криво он но контролирует количество имп косвенно через появление лог 0 на выводе таймера к которому подключет датчик. Но может как нить есть способ переключить его на подсчет внеш импульсов за 1 сек.
помогите кто чем може

0

2

Может быть так?

$regfile = "attiny13f.dat"
$crystal = 1000000
Dim A1 As Byte , A2 As Byte , Count As Byte
Config Pinb.0 = Output
Config Pinb.2 = Output
Config Pinb.3 = Input
Red Alias Portb.0
Green Alias Portb.2
Bxod Alias Portb.3
A1 = 0

Enable Interrupts
Enable Timer0
On Timer0 Tim0_isr
Config Timer0 = Timer , Prescale = 64
'Tcnt0 = 0
Do
If Bxod = 1 And A1 = 0 Then
                        Incr Count
                        A1 = 1
End If
If Bxod = 0 And A1 = 1 Then A1 = 0

Loop

Tim0_isr:
Incr A2
If A2 >= 61 Then
           A2 = 0
           If Count >= 32 Then
                          Red = 1
                          Green = 0
          Elseif Count < 32 Then
                          Red = 0
                          Green = 1
          End If
         Count = 0
End If
Return
End

Время здесь приблизительное.

0

3

хм молчит хотя симулятор как обычно симулирует

0

4

$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 32
$swstack = 10
$framesize = 40
Config Pinb.0 = Output
Config Pinb.1 = Input
Config Pinb.2 = Output
Config Pinb.3 = Output
Config Pinb.4 = Output

Config Int0 = Rising
Enable Int0
Enable Interrupts

Dim Speed As Byte
Dim Speedb As Byte
On Int0 Int0_int

Do
Waitms 5
If Speed =< 3 Then Reset Portb.2 Else Set Portb.2
Speed = 0
Loop
Int0_int:
    Incr Speed
    Return
End

тоже симулятор работает как надло а вот в железе.
После включения питания проходит 5 ms после чего загороется красный свет и полный пипец и пофиг ему есть ли прерывание на PB1(int0)

0

5

Темный написал(а):

Do
Waitms 5
If Speed =< 3 Then Reset Portb.2 Else Set Portb.2
Speed = 0
Loop
Int0_int:
    Incr Speed
    Return

Speed = 0 при каждом проходе цикла, поэтому вероятность что она достигнет величины более 1 ничтожно мала.
Надо добавить таймер с известным периодом переполнения, и уже в его прерывании обнулять Speed.

0

6

Темный написал(а):

Do
Waitms 5
If Speed =< 3 Then Reset Portb.2 Else Set Portb.2
Speed = 0
Loop
Int0_int:
    Incr Speed
    Return

Speed = 0 при каждом проходе цикла, поэтому вероятность что она достигнет величины более 1 ничтожно мала.
Надо добавить таймер с известным периодом переполнения, и уже в его прерывании обнулять Speed.

0

7

Как сделать одной сторкой A=B+C+D ?
Тесть в одной строке несколько аргументов?

0

8

AlexandrM написал(а):

Как сделать одной сторкой A=B+C+D ?
Тесть в одной строке несколько аргументов?

Если я не ошибаюсь в Bascome этот вариант глючит. Лучше делать в две строки:
A=B+C
A=A+D
Работает на 100%

0

9

для чего нужен оператор data?как им пользоваться.хелп я читал.не понимаю.

0

10

это Bascom:
Data &HEF90% , &H0983% , &H0800% , &H0BAF% , &H0A00% , &H0500% , &H0600% , &H0700%
а это ASM:
.DB &HEF, &H90, &H09, &H83, &H08, &H00, &H0B, &HAF, &H0A, &H00, &H05, &H00, &H06, &H00, &H07, &H00
и то и другое массив данных.

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Знатокам Bascom-AVR и прочим спецам