BASCOM AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Ответить
Мучитель микросхем
Сообщения: 465
Зарегистрирован: Ср июн 21, 2006 08:24:32
Откуда: Лисичанск
Re:

Сообщение Radan »

Gryphon писал(а):Здравствуйте дорогие форумчане!
Меня интересуют следующие ворпросы по BASCOM-AVR:
6. Можно-ли в BASCOM сделать подключение AVR c PC по USB (без преобразователей)
http://bascomavr.3bb.ru/viewtopic.php?id=254
http://bascom.at.ua/publ/usb_termometr_ ... 8/1-1-0-30
Контактная информация:
Реклама
Встал на лапы
Сообщения: 84
Зарегистрирован: Пт апр 16, 2010 12:30:03

Сообщение dhouse »

Подскажите "чайнику", можно ли в BASCOM обратиться к порту не явно (PORTB.2=...), а по переменной (PORTB.X=...)?
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 442
Зарегистрирован: Пт авг 29, 2008 09:22:37

Сообщение dimon-790 »

dhouse писал(а):можно ли в BASCOM обратиться к порту не явно ...
можно , например вот так.
Вложения
ALIAS.rar
(252 байт) 309 скачиваний
Все мы работаем по методу Робинзона Крузо – ждем пятницу.
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки

Сообщение Секретный кот »

Можно-то можно, вот очень жаль что алиасы нельзя адресовать подобным способом, например:

Код: Выделить всё

a(1) Alias PORTB.1
a(2) Alias PORTD.2
a(3) Alias PORTC.3

For i=1 To 3
Set a(i)
Next i
Вот это было бы очень ценно.
Даже остановленные часы два раза в сутки показывают правильное время.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Сообщения: 84
Зарегистрирован: Пт апр 16, 2010 12:30:03

Сообщение dhouse »

Спасибо Dimon-790 и Секретному коту за ответ. Я как раз имел в виду вариант Секретного кота, чтобы обращаться к портам, как к переменным. Жаль, что так сделать нельзя, придется городить CASE-ми и IF-ами...
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки

Сообщение Секретный кот »

dhouse писал(а):придется городить CASE-ми и IF-ами...
А мне приходится циклы "разворачивать" из-за того, что например массив нагрузок оказался разбросанным по разным портам :(

P.S. Оказывается, с этой проблемой многие уже сталкивались:
http://mcselec.com/index2.php?option=co ... pic&t=4041
http://mcselec.com/index2.php?option=co ... pic&t=2462
http://mcselec.com/index2.php?option=co ... pic&t=7481
Последняя ссылка любопытна тем, что автор утверждает, что такой вариант адресации якобы работал в версиях до 1.11.9.4.
Даже остановленные часы два раза в сутки показывают правильное время.
Контактная информация:
Реклама
Родился
Аватара пользователя
Сообщения: 18
Зарегистрирован: Вс апр 18, 2010 16:43:08
Откуда: Улан-Удэ

Сообщение Intel_agent »

Всем привет, требуется помощь в коде bascom'a, mega8 такт 4 мега
требуется создать три таймера с временными интервалами 10, 30 и 3 минут(ы) соответственно, запуск которых производится последовательно после отработки каждого, но запуск первого возможен только при получении высокого уровны по входу INT0
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки

Сообщение Секретный кот »

Intel_agent писал(а):Всем привет, требуется помощь в коде bascom'a
А сам код-то чего забыли прицепить :)))
Даже остановленные часы два раза в сутки показывают правильное время.
Контактная информация:
Родился
Аватара пользователя
Сообщения: 18
Зарегистрирован: Вс апр 18, 2010 16:43:08
Откуда: Улан-Удэ

Сообщение Intel_agent »

Так в том-то и проблема, что не могу никак разобраться как реализовать такие временные промежутки
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки

Сообщение Секретный кот »

Код: Выделить всё

Wait сколько_нужно_секунд
Например, 30 минут это Wait 1800.
Даже остановленные часы два раза в сутки показывают правильное время.
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 347
Зарегистрирован: Сб дек 13, 2008 09:03:43
Откуда: г.Советская Гавань

Сообщение ВНН »

Если делать тупо то
Обработка int
Запретить прерывание
for i=0 to 10
wait 60
next i
чото делаеш

for i=0 to 30
wait 60
next i


for i=0 to 3
wait 60
next i
чото делаеш

разрешить прерывание

Но лучше все делать по таймеру
Я тоже белый и пушистый и также как и Вы ловлю мышей.
С уважением ВНН.
Встал на лапы
Сообщения: 84
Зарегистрирован: Пт апр 16, 2010 12:30:03

Сообщение dhouse »

Знатоки 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 раз.
Мучитель микросхем
Аватара пользователя
Сообщения: 497
Зарегистрирован: Ср дек 10, 2008 21:24:28
Откуда: Алтайский край, Барнаул

Сообщение max50 »

На 8-ой странице есть пример и схема на тане2313 и LCD. http://radiokot.ru/forum/viewtopic.php? ... &start=140
При желании можно переделать на светодиодный индикатор.
Того, кто не задумывается о далеких трудностях, ожидают близкие неприятности.
Встал на лапы
Сообщения: 84
Зарегистрирован: Пт апр 16, 2010 12:30:03

Сообщение dhouse »

Спасибо за ссылку. Но хочется написать самому, а не передрать чужое. Простые часы - неплохой проект для начала освоения МК (мигалки слишком просто). Если выйдет, попробую сделать простейший велоспидометр. Кстати, попутно вопрос знатокам: если на пин порта цепляется не кнопка, а питание +5 через геркон (подсчет замыканий) то:
1. Нужно установить на пине логический 0?
2. Подсчитывать количество появлений логической единицы за определенный интервал времени?
3. Пересчитать в скорость?
Родился
Аватара пользователя
Сообщения: 18
Зарегистрирован: Вс апр 18, 2010 16:43:08
Откуда: Улан-Удэ

Сообщение Intel_agent »

Секретный кот писал(а):

Код: Выделить всё

Wait сколько_нужно_секунд
Например, 30 минут это Wait 1800.
Да, это супер просто, НО, если не ошибаюсь при данном типе отсчета, все остальные действия по обработке будут выполняться только после окончания отсчета...
ВНН писал(а):Если делать тупо то
Обработка int
Запретить прерывание
for i=0 to 10
wait 60
next i
чото делаеш
...
разрешить прерывание

Но лучше все делать по таймеру
Тупо конечно тоже хорошо, но все-же большое желание сделать по таймеру, а то мало-ли...
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 347
Зарегистрирован: Сб дек 13, 2008 09:03:43
Откуда: г.Советская Гавань

Сообщение ВНН »

Правильно мыслиш , а то мало-ли..., а то мало-ли...
Работа с прерываниями http://www.decada.org.ru/project/lesson ... /index.php
Я тоже белый и пушистый и также как и Вы ловлю мышей.
С уважением ВНН.
Родился
Аватара пользователя
Сообщения: 18
Зарегистрирован: Вс апр 18, 2010 16:43:08
Откуда: Улан-Удэ

Сообщение Intel_agent »

Спасибо! Хороший учебничек, слегка пробежался, понятно написано даже для таких новичков как я :))
Ушел изучать 8)
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки

Сообщение Секретный кот »

ВНН писал(а):Если делать тупо то
Обработка int
Запретить прерывание
for i=0 to 10
wait 60
next i
И чем это лучше чем просто wait 600? :))
Даже остановленные часы два раза в сутки показывают правильное время.
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 347
Зарегистрирован: Сб дек 13, 2008 09:03:43
Откуда: г.Советская Гавань

Сообщение ВНН »

Ничем , только более читаемо и при изменение параметров задержки не нужно считать 60*min и все
Я тоже белый и пушистый и также как и Вы ловлю мышей.
С уважением ВНН.
Встал на лапы
Сообщения: 84
Зарегистрирован: Пт апр 16, 2010 12:30:03

Сообщение dhouse »

Вопрос по оператору $crystal в BASCOM. Написал свою программу часов для Attiny2313 без кварца. Во фьюзах отключил деление частоты на 8 (внутренняя частота вышла 8 MGz). Переполнение таймера выставил именно на эту частоту. Но если в программе ставлю $crystal=8000000, то при динамической индикации четко заметно мигание индикаторов. При установке меньшей величины, вплоть до $crystal=1000000 мигание совершенно не заметно. При этом на ход часов этот параметр не повлиял. Так что же делает оператор $crystal?
Ответить

Вернуться в «AVR»