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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

В том и дело. В первом случае весь МК будет работать на одной частоте вместе с таймером, а во втором часы и без конфигурации T1 прекрасно работают... Ибо он вообще никакой роли не играет... :dont_know:

Команда Config Clock = Soft делает следующее внутри МК:

ASSR = &B00001000 - асинхронный режим таймера Т2 (счет от внешнего кварца)
TCCR2 = &B00000101 - предделитель 128 - отсчет 1 секунды
TIMSK = &B01000000 - разрешение прерывания по переполнению T2

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

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

Сообщение dhouse »

Жалко, что нет книги "Bascom для чайников", мне она была бы очень полезна. Те книги, что я накачал в инете несколько сложны мне для восприятия, никогда раньше не занимавшегося электроникой (а обучалки типа помигаем светодиодом или опросим кнопку уже кажутся слишком легкими). Благодаря сайтам и форумам (особенно РАДИОКОТУ) я уже немного начал понимать и на практике потихоньку реализовывать свои знания. И персональное спасибо за советы в "трудную" минуту!
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Да это даже хорошо что нет книг где все-все разжевывается. Голова тоже работать должна. Хватит и кнопалок - мигалок для старта, а дальше недурно будет и даташит почитать и в регистрах поковыряться. :) Бездумное использование чужих примеров, это конечно вариант, но опыт - бесценен !!!
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

kip96 писал(а):A вот этот не пойдёт? Считает точно, я в железе на макетке делал, переводил на ЖК индикатор на 1820вг1
в архиве исходник, но было давно, туда ещё пытался ввести подсчёт периода.
Вообщем эт я учился, и пробывал. В железе на макетке работал.

Вот как раз в железе он и не работает. Проверял только что. На экране всякую хрень показывает. И по подключению: я так понимаю, младшая м/с - это та, которая подключена к правой части индикатора, старшая - та что к левой ?
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Да там подсчет неплохой. И счетчик и переполнения. Все работает. По крайней мере, лучше чем прерыванием считать.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение kip96 »

Забыл сказать, индикатор от кассового аппарата ЭКР2102, а там стоит буфер на ЛН2-ой перед ВГ1, соответственно все сигналы инвертируются.
А так завтра попробую подключить, попробую, мож-где не доглядел, давно это было :))
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

Да-да, как раз такой индикатор и применял. Только ЛН-ку выкусил и соединил дорожки, т.е. получилось напрямую, без инверсии. А если сигналы без инверсии, то в этом случае как надо доработать код?
ИМХО, надо переписать команду SHIFTOUT, и сигналы опроса (выборки кристалла = CS) младшей и старшей микросхем. Правильно?
И немного непонятно подключение и функции кнопок Kn и Knr. Я так понимаю, что кнопки подключены к PIND.0 и PIND.1. Надо с подтяжкой или без?
Вот ссылка на видео всего этого безобразия: http://xtrason.mylivepage.ru/file/2344/5790_%D0%92%D0%B8%D0%B4%D0%B5%D0%BE-0020.mp4
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

Вот еще ссылка на то как управлять м/с КР1820ВГ1: http://xtrason.mylivepage.ru/file/2344/5791_kr1820vg1.pdf
Помогите разобраться с управляющим кодом, плиз! :)
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение kip96 »

Для загрузки микросхемы в старшем и младшем режимах необходимо выполнить следующую последовательность действий:
установить на входе CS обеих схем уровень логического 0
записать 32 бита данных для «младшей» схемы
записать четыре бита для специальных сегментов младшей схемы и четыре бита управления: 1|1|1|1|P4|P3|P2|P1 (при подаче последней единицы обе микросхемы устанавливаются в младший режим, выводы COA/G обеих схем работают как входы генератора. Происходит синхронизация работы микросхем)
установить на входах CS обеих схем уровень логической 1
установить на входе CS «старшей» схемы уровень логического 0
записать 32 бита данных для старшей схемы
записать четыре бита для специальных сегментов старшей схемы и четыре бита управления: 0|0|0|0||P4|P3|P2|P1 (после этого вывод COA/G старшей схемы начитает работать как выход управления строкой А, а вывод COC/G – как выход встроенного генератора. Импульсы с выхода генератора старшей схемы поступают на вход генератора COA/G младшей схемы, и оба кристалла начинают работать синхронно от генератора старшей схемы)
установить на сходе CS установить уровень логической 1

Для

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

Ind:
Shiftout Dn , Cl , I , 0                                    'последовательная загрузка
Return

последнюю цифру надо заменить на 1, хотя может и ошибаюсь, поэксперементируйте.
0 – MSB shifted out first when clock goes low

1 – MSB shifted out first when clock goes high

2 – LSB shifted out first when clock goes low

3 – LSB shifted out first when clock goes high

Igor_67 писал(а):И немного непонятно подключение и функции кнопок Kn и Knr.

Напомню, что данный код не проект, а так, черновик, который я поигрался и бросил.
Кn должен был переключать между частотой и периодом, а Knr сам не пойму, может когда-то нужен был, да остался :dont_know:
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение kip96 »

Да, и матрицу переписать надо, проинвертировать

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

Dta:                                                        '  таблица с данными о цифрах зажигает по порядку : 1234567890
Data &HC0 , &HF9 , &HA4 , &HB0 , &H99 , &H92 , &H82 , &HF8 , &H80 , &H90 , &HF0 , &HFF , &H8C , &H8E , &HDC , &HE3 , &H94
'       0       1      2      3     4      5      6      7      8      9    Cs m  Cs St     P      F   14 n   15 u     o

Если по быстрому, то наверное так:

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

Ind:
I = Not I                                                   'инверсия
Shiftout Dn , Cl , I , 0 'последовательная загрузка
Return

З.Ы.
Опять сайт хондрит :kill:
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

А с сигналами установки/сброса битов выбора микросхем как быть? Тоже инвертировать или не надо?
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

Ну вот, после нескольких танцев с бубном на индикаторе: "000000.00". На входную частоту не реагирует. Почему? :dont_know:
Теперь код выглядит так:

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

$regfile = "attiny2313.dat"                                 'выбираем микроконтроллер
$crystal = 8000000                                          ' частота кварца

$lib "mcsbyte.lbx"
$lib "mcsbyteint.lbx"

Config Portb = Output

Signal Alias Pind.5
Kn Alias Pind.0
Knr Alias Pind.1
Dn Alias Portb.4                                            ' data (порт для данных на ЖК)
Cl Alias Portb.5                                            'clock (порт синхронизации на ЖК)
Csst Alias Portb.7                                          'старшая микросхема
Csml Alias Portb.6                                          'младшая микросхема

' обЪявляем переменные
Dim I As Byte
Dim Cifri(9) As Byte
Dim T As Byte
Dim A As Word
Dim Byte0 As Byte , Byte1 As Byte
Dim Overflow As Byte
Dim X As Byte
Dim Cnt As Word
Dim Fr As Long
Dim Flag As Bit                                             'переменные частотомера
Dim Ph As Word
Dim Pl As Word                                              ' переменные периода
Config Timer0 = Timer , Prescale = 1
Enable Interrupts
Enable Timer0

'**********************
Fmetr:                                                      ' начало программы частотометра
Cifri(1) = 13
Gosub Indicator
Stop Timer1
Config Timer1 = Counter , Edge = Rising , Noise Cancel = 1  ' включена фильтрация шумов
On Timer0 Tm0_intsub
On Timer1 Tm1_intsub
Counter1 = 0
Overflow = 0
Cnt = 31250
Flag = 0

'******Initial******
Start Timer0
Start Counter1

'*******Main Loop*****
Main:
Do

    If Flag = 1 Then
            X = Counter1
            Gosub Indicator
            Reset Flag
            Counter1 = 0
            Overflow = 0
            Cnt = 31250                                     ' значение подобрано для захвата за 1 секунду
            Start Timer0
            Start Counter1
     End If
     Debounce Kn , 0 , Pmetr
Loop

Pmetr:
Stop Counter1
Cifri(1) = 12

Config Timer1 = Timer , Prescale = 8
Enable Timer1

Aa:
Do
Gosub Indicator
Stop Timer1
Timer1 = 0
Bitwait Signal , Set
Start Timer1
Bitwait Signal , Reset
Stop Timer1
Ph = Timer1
Timer1 = 2
Start Timer1
Bitwait Signal , Set
Stop Timer1
Pl = Timer1
If Kn = 1 Then Gosub Fmetr
Debounce Knr , 0 , Reg , Sub
Select Case A
Case 1
Cifri(2) = 14
X = Ph
Case 2
Cifri(2) = 15
X = Pl
Case 3
Cifri(2) = 16
Fr = Ph + Pl
If Ph > 100 Then
   X = Ph \ 100
   Fr = Fr * Ph
Else
   Fr = Fr * Ph
   Fr = Fr \ 100
End If
End Select

Loop

'************************************************
'*******Counter1 Overflow Interrupt**************
 Tm1_intsub:                                                'переполнение counter1 - счетчик прешедших импульсов
Incr Overflow
Return

'***********Timer0 Zero Interrupt****************
Tm0_intsub:
         If Cnt <> 0 Then                                   ' отсчет одной секунды
                Decr Cnt
         Else
                Stop Counter1
                Stop Timer0
                Set Flag
         End If

Return

'************End of interrupt*********************
Indicator:
   Fr = Overflow * 65536                                    'количество импульсов умн. на кол. переполнений
   Fr = Fr + X                                              ' и плюс что ещё насчитали
   I = 0                                                    ' и разделяем значения на цифры
   While I < 7
      Incr I
      Cifri(i) = Fr Mod 10
      Fr = Fr / 10
   Wend
'Set Csst
'Set Csml
Reset Csst
Reset Csml
I = Lookup(cifri(1) , Dta)
Gosub Ind
I = Lookup( , Dta)
Gosub Ind
I = Lookup(cifri(3) , Dta)
Gosub Ind
I = Lookup(cifri(4) , Dta)
Gosub Ind
I = Lookup(10 , Dta)                                        'загрузка спец кода
Gosub Ind
'Reset Csst
'Reset Csml
'Set Csst
Set Csst
Set Csml
Reset Csst
I = Lookup(cifri(5) , Dta)
Gosub Ind
I = Lookup(cifri(6) , Dta)
I = I - &H80
Gosub Ind
I = Lookup(cifri(7) , Dta)
Gosub Ind
I = Lookup(cifri(8) , Dta)
Gosub Ind
I = Lookup(11 , Dta)                                        'загрузка спец кода
I = I + Cifri(9)                                            'и включение указательных спец символов
Gosub Ind
'Reset Csst
Set Csst
Return

Dta:                                                        '  таблица с данными о цифрах зажигает по порядку : 1234567890
Data &HC0 , &HF9 , &HA4 , &HB0 , &H99 , &H92 , &H82 , &HF8 , &H80 , &H90 , &HF0 , &HFF , &H8C , &H8E , &H89 , &HC7 , &H94
'       0       1      2      3     4      5      6      7      8      9    Cs m  Cs St     P      F   14 H   15 L     o

Ind:
'Shiftout Dn , Cl , I , 0                                    'последовательная загрузка
I = Not I
Shiftout Dn , Cl , I , 1
Return

Reg:
Incr A
If A > 3 Then A = 1
Return
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

Сдается мне еще надо сигналы Csst и Csml поменять местами, так как при касании пальцем входа, цифры меняются в старшем разряде, т.е. в самом левом. ИМХО это наводки и должен меняться младший разряд. Или я не прав?
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение kip96 »

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

'Set Csst
'Set Csml
Reset Csst
Reset Csml
I = Lookup(cifri(1) , Dta)
Gosub Ind
I = Lookup( cifri(2), Dta)
Gosub Ind
I = Lookup(cifri(3) , Dta)
Gosub Ind
I = Lookup(cifri(4) , Dta)
Gosub Ind
I = Lookup(10 , Dta)                                        'загрузка спец кода
Gosub Ind
'Reset Csst
'Reset Csml
'Set Csst
Set Csst
Set Csml
Reset Csst
I = Lookup(cifri(5) , Dta)
Gosub Ind
I = Lookup(cifri(6) , Dta)
I = I - &H80
Gosub Ind
I = Lookup(cifri(7) , Dta)
Gosub Ind
I = Lookup(cifri(8) , Dta)
Gosub Ind
I = Lookup(11 , Dta)                                        'загрузка спец кода
I = I + Cifri(9)                                            'и включение указательных спец символов
Gosub Ind
'Reset Csst
Set Csst
Return

cifri(2) похоже пропустил я :write:
первый символ-должна буква быть.
и замените-

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

 Fr = Overflow * 65536                                    'количество импульсов умн. на кол. переполнений
   Fr = Fr + X 

на fr=123456 и посмотрите как цифры ложаться.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение kip96 »

Всё! нашёл на работе другую папку.
Этот работает точно, На своей макетке проверил. На "пальце" ловит 49-50.
Ловите :)), изучайте.
З.Ы.
Проверял на своём, у Вас значит нужно опять в исходнике проинвертировать.
Вложения
freq.rar
(10.87 КБ) 227 скачиваний
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

Все переделал, работает! :)) Большое спасибо!!! :beer:
Теперь попробую подать образцовую частоту. Посмотрим, до скольки он меряет? По идее, должен свободно брать до 1МГц, хотя для моих целей вполне хватит и половины... :)) 8)
Цапу крутить надо!!! Ку или не ку?
dhouse
Встал на лапы
Сообщения: 84
Зарегистрирован: Пт апр 16, 2010 12:30:03

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

Сообщение dhouse »

Доброго дня! Хочу поделиться своим первым проектом на Bascom. Это светосинхронизатор для фотовспышки, срабатывающий на 1-й, 2-й или 3-й пых. В качестве фотодатчика - фототранзистор от старой шариковой мыши. Схема непосредственно фотоловушки взята с сайта http://www.osipoff.ru. По умолчанию синхронизатор настроен на срабатывание на 2-й пых. При включении питания (4,5 вольт) два раза мигает зеленый светодиод, показывая текущую настройку. При нажатии на кнопку настройка циклически меняется 3-1-2-3-1..., после чего зеленый светодиод мигает соответствующее количество раз. Эксерименты показали, что устанавливать фотодатчик внутрь корпуса не стоит (снижается чувствительность и перестает реагировать на отраженный свет), нужно вынести его снаружи корпуса. Так что оцените, подскажите, где ошибки (хотя устройство работает), но не сильно строго, все-таки первое изделие (не считая моргалок, кнопочек и LCD-дисплеев).

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

'**************************************************************************
'Светосинхронизатор для ведомой фотовспышки на срабатывание от 1 до 3 блика
'на  Attiny13
'Stetsenko S., 2011
'**************************************************************************
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 32
$swstack = 8
$framesize = 16
Config Portb.0 = Output                                     'выход на семистор, замыкающий синхроконтакт
Config Portb.2 = Output                                     'выход на светодиод
Config Portb.4 = Input                                      'вход сигнала с фотодатчика
Config Portb.1 = Input                                      'Кнопка
Portb.4 = 0
Set Portb.1
Config Int0 = Falling
On Int0 Knopka
Enable Interrupts
Enable Int0
Dim N_blink As Byte                                         'на какой блинк ведущей вспышки запускать ведомую
Dim N As Byte                                               'реально пришедших бликов
Dim Tmp As Byte                                             'временная переменная
N_blink = 2                                                 'устанавливаем по умолчанию срабатывать на 2-й блик
N = 0                                                       'число пришедших бликов устанавливаем в 0
Portb.2 = 0
Wait 2
For Tmp = 1 To N_blink                                      'поморгали светодиодом N_blink раз, хотя это и не обязательно
   Portb.2 = 1
   Waitms 500
   Portb.2 = 0
   Waitms 500
Next Tmp
Wait 1
Portb.2 = 1
Do
   While N < N_blink                                        'Пока не достигнуто число установленных бликов
     If Pinb.4 = 1 Then                                     'пришел очередной блик
       N = N + 1
       If N = N_blink Then                                  'если блик нужный
         Portb.0 = 1                                        'включаем теристор
         Waitms 200
         Portb.0 = 0                                        'выключаем теристор
       End If
         While Pinb.4 = 1 : Wend                            'ждем пропадения единицы от фотодатчика
     End If
   Wend
   N = 0                                                    'сброс количества пришедших бликов
Loop
End                                                         'end program

Knopka:
Portb.2 = 0                                                 'гасим светодиод, чтобы показать новое число бликов
Wait 2
N_blink = N_blink + 1                                       'изменяем установленное число бликов
If N_blink > 3 Then
N_blink = 1
End If
For Tmp = 1 To N_blink                                      'поморгали светодиодом N_blink раз, показав новое установленное значение
   Portb.2 = 1
   Waitms 500
   Portb.2 = 0
   Waitms 500
Next Tmp
Wait 2
Portb.2 = 1                                                 'снова включили светодиод после моргания
Gifr = 64                                                   'очистили стек прерываний
Return
Вложения
sinh_shema.JPG
Схема
(42.19 КБ) 322 скачивания
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение kip96 »

вместо этого

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

 While Pinb.4 = 1 : Wend                            'ждем пропадения единицы от фотодатчика

есть команда bitwait pinb.4,set , повторяющиеся куски программы оформить в подпрограммы, порты лучше обзывать как нибудь:

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

led alias Portb.2
, потом ежели чего, не придётся по всей программе искать где у Вас светодиод зажигается. :))
Все делают ошибки, только мудрецы - новые, а дураки - старые.
alfpk00
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Ср окт 11, 2006 12:14:13
Контактная информация:

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

Сообщение alfpk00 »

Всем привет!

Делаю тут себе кодовый замок на atmega8, с матричной клавиатурой 3х4.
Подскажите пожалуйста, как реализовать на BASCOM следующее:

1. Время на ввод каждой цифры кода - 2 сек.
2. Измерение времени, сколько нажата кнопка. Если меньше какого-то значения то одно действие, если больше - другое.


Зараннее благодарю.
Ответить

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