Gryphon писал(а):Здравствуйте дорогие форумчане!
Меня интересуют следующие ворпросы по BASCOM-AVR:
6. Можно-ли в BASCOM сделать подключение AVR c PC по USB (без преобразователей)
Спасибо Dimon-790 и Секретному коту за ответ. Я как раз имел в виду вариант Секретного кота, чтобы обращаться к портам, как к переменным. Жаль, что так сделать нельзя, придется городить CASE-ми и IF-ами...
Всем привет, требуется помощь в коде bascom'a, mega8 такт 4 мега
требуется создать три таймера с временными интервалами 10, 30 и 3 минут(ы) соответственно, запуск которых производится последовательно после отработки каждого, но запуск первого возможен только при получении высокого уровны по входу INT0
Знатоки BASCOM! Просмотрите, пожалуйста, мой ПЕРВЫЙ В ЖИЗНИ код на микроконтроллер (ATTINY2313) и укажите на принципиальные ошибки. Проект банальный: часы. Порт В - на сегменты индикатора, порт d - на включения общего на индикаторе (через КТ315) и опрос 2-х кнопок. С настройками таймера не заморачивался, хотел просто понять логику работы...
$regfile = "AtTiny2313.dat"
$crystal = 1000000
Config Timer0 = Timer , Prescale = 1
Declare Sub My_led
Dim H As Byte , M As Byte , S As Byte
Dim T(4) As Byte
Dim Ncount As Word
Dim Q As Byte
Dim Tmp As Byte
Ncount = 0
H = 9
M = 55
S = 0
Config Portb = Output
Config Portd = Output
Config Pind.0 = Input
Config Pind.1 = Input
Config Debounce = 200
Set Pind.0
Pind.0 = 1
Set Pind.1
Pind.1 = 1
On Timer0 Pulse
Enable Interrupts
Enable Timer0
'************
Do
Debounce Pind.0 , 0 , H_ed , Sub
Debounce Pind.1 , 0 , M_ed , Sub
T(1) = H \ 10
T(2) = H Mod 10
T(3) = M \ 10
T(4) = M Mod 10
Call My_led
Loop
End 'end program
'************************
Sub My_led
For Q = 1 To 4
Select Case T(q)
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
Case 0 : Portb = &B11000000
End Select
Select Case Q
Case 1 : If T(1) <> 0 Then
Set Portd.2
Waitms 10
Reset Portd.2
End If
Case 2 : Tmp = S Mod 2
If Tmp = 0 Then Portb.7 = 0
Set Portd.3
Waitms 10
Reset Portd.3
Case 3 : Set Portd.4
Waitms 10
Reset Portd.4
Case 4 : Set Portd.5
Waitms 10
Reset Portd.5
End Select
Next Q
End Sub
'************************
Pulse:
Ncount = Ncount + 1
If Ncount => 31250 Then
Ncount = 0
S = S + 1
End If
If S > 59 Then
S = 0
M = M + 1
End If
If M > 59 Then
M = 0
H = H + 1
If H > 23 Then H = 0
End If
Return
'************************
H_ed:
Waitms 100
H = H + 1
If H > 23 Then H = 0
Return
'************************
M_ed:
Waitms 100
M = M + 1
If M > 59 Then M = 0
Return
Последний раз редактировалось dhouse Вт апр 20, 2010 13:56:02, всего редактировалось 1 раз.
Спасибо за ссылку. Но хочется написать самому, а не передрать чужое. Простые часы - неплохой проект для начала освоения МК (мигалки слишком просто). Если выйдет, попробую сделать простейший велоспидометр. Кстати, попутно вопрос знатокам: если на пин порта цепляется не кнопка, а питание +5 через геркон (подсчет замыканий) то:
1. Нужно установить на пине логический 0?
2. Подсчитывать количество появлений логической единицы за определенный интервал времени?
3. Пересчитать в скорость?
Да, это супер просто, НО, если не ошибаюсь при данном типе отсчета, все остальные действия по обработке будут выполняться только после окончания отсчета...
ВНН писал(а):Если делать тупо то
Обработка int
Запретить прерывание
for i=0 to 10
wait 60
next i
чото делаеш
...
разрешить прерывание
Но лучше все делать по таймеру
Тупо конечно тоже хорошо, но все-же большое желание сделать по таймеру, а то мало-ли...
Вопрос по оператору $crystal в BASCOM. Написал свою программу часов для Attiny2313 без кварца. Во фьюзах отключил деление частоты на 8 (внутренняя частота вышла 8 MGz). Переполнение таймера выставил именно на эту частоту. Но если в программе ставлю $crystal=8000000, то при динамической индикации четко заметно мигание индикаторов. При установке меньшей величины, вплоть до $crystal=1000000 мигание совершенно не заметно. При этом на ход часов этот параметр не повлиял. Так что же делает оператор $crystal?