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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Moto_v3x
Потрогал лапой паяльник
Сообщения: 307
Зарегистрирован: Ср мар 31, 2010 11:45:58
Откуда: Славянск

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

Сообщение Moto_v3x »

svic
а так не пробовали
Config Portd.3 = Input
Аватара пользователя
svic
Друг Кота
Сообщения: 5837
Зарегистрирован: Ср ноя 17, 2010 23:10:55
Откуда: Ижевск LO66NU
Контактная информация:

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

Сообщение svic »

В смысле - использовать INT1? Нет, не пробовал. Собственно вопрос возник из-за того, что в "обучалке" в примере приведено, что при работе с этим прерыванием порт конфигурируется, как "Config PIND.2 = input", однако смутило то, что при этом в симуляторе баскома ID2 никак не реагирует и прерывание всё-равно остается на PD2. Пробовал и через DDRD.....
В начале жизнь мучает вопросами, в конце - ответами...
Аватара пользователя
Moto_v3x
Потрогал лапой паяльник
Сообщения: 307
Зарегистрирован: Ср мар 31, 2010 11:45:58
Откуда: Славянск

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

Сообщение Moto_v3x »

немного опечатался Portd.2
Аватара пользователя
svic
Друг Кота
Сообщения: 5837
Зарегистрирован: Ср ноя 17, 2010 23:10:55
Откуда: Ижевск LO66NU
Контактная информация:

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

Сообщение svic »

Спасибо, попробую!
В начале жизнь мучает вопросами, в конце - ответами...
Аватара пользователя
svic
Друг Кота
Сообщения: 5837
Зарегистрирован: Ср ноя 17, 2010 23:10:55
Откуда: Ижевск LO66NU
Контактная информация:

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

Сообщение svic »

Увы...
В начале жизнь мучает вопросами, в конце - ответами...
Аватара пользователя
Kill17
Открыл глаза
Сообщения: 63
Зарегистрирован: Вс май 30, 2010 20:27:33
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение Kill17 »

День добрый!

Подскажите как реализовать прием по софтовому Уарту, а передачу по железному нескольких байт ?
Аватара пользователя
Moto_v3x
Потрогал лапой паяльник
Сообщения: 307
Зарегистрирован: Ср мар 31, 2010 11:45:58
Откуда: Славянск

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

Сообщение Moto_v3x »

svic
А что вы хотите добится от INT0, если кнопку передача и педаль пропустить, то обработчик по более команд будет
Аватара пользователя
svic
Друг Кота
Сообщения: 5837
Зарегистрирован: Ср ноя 17, 2010 23:10:55
Откуда: Ижевск LO66NU
Контактная информация:

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

Сообщение svic »

Хм... Попробую поменять тактику...
----------
Действительно, прерывание только отнимало ресурсы - цикл DO и без него справляется.
Хорошая мысля всегда приходит опосля! :)) Спасибо!
И напоследок еще один маленький вопросик - транслятор напрочь игнорирует неопределенность 0/0 и просто деление на нуль. А как на это дело смотрит контроллер?
Последний раз редактировалось svic Чт ноя 22, 2012 19:04:19, всего редактировалось 3 раза.
В начале жизнь мучает вопросами, в конце - ответами...
Аватара пользователя
Kill17
Открыл глаза
Сообщения: 63
Зарегистрирован: Вс май 30, 2010 20:27:33
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение Kill17 »

поправлюсь, для приема посылки из 1-20 байт. Прием нужно сделать именно по софтовому УАРТу.
Сколько не пытаюсь, не выходит, с аппаратного в софтовый без проблем, а на оборот, что-то не получается.
SAU
Вымогатель припоя
Сообщения: 546
Зарегистрирован: Вс сен 10, 2006 00:04:03

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

Сообщение SAU »

Всем привет)

Помогите разобраться с динамической индикацией)
Вот код

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

$regfile = "attiny2313.dat"
$crystal = 4000000
$hwstack = 40
$swstack = 16
$framesize = 32
$prog &HFF , &HF4 , &HDB , &HFF                             ' generated. Take care that the chip supports all fuse bytes.

Dim Count As Byte
Dim Number1 As Byte
Dim Number2 As Byte
Dim Number3 As Byte
Config Portb = Output                                     

Config Pind.3 = Output                                     
Config Pind.4 = Output                                     
Config Pind.5 = Output                                     

Dig1 Alias Portd.3
Dig2 Alias Portd.4
Dig3 Alias Portd.5

Config Timer0 = Timer , Prescale = 64
On Timer0 Int_timer0

Enable Interrupts
Enable Timer0

Do

Loop

End

Int_timer0:

Reset Dig1 : Reset Dig2 : Reset Dig3                       

Incr Count : If Count > 3 Then Count = 1

If Count = 1 Then
 Portb = &B11010101
 Set Dig1
 End If

 If Count = 2 Then
 Portb = &B11010101
 Set Dig2
 End If

 If Count = 3 Then
 Portb = &B11010101
 Set Dig3
 End If
Return

Digits:                                                   

Data &B00010001 , &B11010111 , &B00100101 , &B10000101 , &B11000011 ' 0 1 2 3 4
Data &B10001001 , &B00001001 , &B11010101 , &B00000001 , &B10000001   ' 5 6 7 8 9     
                                             


Если пишу в порт одно число во все индикаторы- показывает правильно - в данном случае 7.Если пишу скажем 071

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


If Count = 1 Then
 Portb = &B00010001
 Set Dig1
 End If

 If Count = 2 Then
 Portb = &B11010101
 Set Dig2
 End If

 If Count = 3 Then
 Portb = &B11010111
 Set Dig3
 End If




То показывает какую-то хрень..Могут быть вообще не цифры(
Укажите на косяк, плз..
Вот схема
там на схеме не правильно выводы нарисованы..я вначале рисовал, потом на макете коммутировал как удобно..но в двоичном коде они правильно выдаются
Вложения
Индикация.GIF
(14.99 КБ) 463 скачивания
Аватара пользователя
amv2000
Опытный кот
Сообщения: 717
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

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

Сообщение amv2000 »

SAU писал(а):Помогите разобраться с динамической индикацией)

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

If Count = 1 Then
 Portb = &B11010101
 Set Dig1
 Waitms 2
 End If

А задержки ставить не надо, чего они (данные) сплошным потоком льются.
И есть код намного удачнее от edm2007

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

$regfile = "attiny2313.dat"                               ' тип МК
$crystal = 8000000                                          ' выбор кристала для расчета задержек

'******************************[Определение переменных и констант]************************************

Dim Count As Byte                                           ' переменная для индикации
Dim Number(3) As Byte                                    ' значения трех разрядов

'***************************************[Инициализация портов]**********************************************

Config PORTA.1 = Output                                ' светодиод

Config PORTB = Output                                   ' порт сегментов индикатора

Config PORTD.4 = Output                                ' первый разряд индикатора
Config PORTD.5 = Output                                ' второй разряд индикатора
Config PORTD.6 = Output                                ' третий разряд индикатора

'************************************[Инициализация прерываний]*****************************************

Config Timer0 = Timer , Prescale = 64              ' конфигурируем таймер индикации
On Ovf0 Refresh                                                  ' метка на прерывание индикации

'***********************************[Присвоение уникальных имен]*****************************************

Led Alias PORTA.1                                                    ' присваиваем имя светодиоду
 Dig1 Alias PORTD.4 : Dig2 Alias PORTD.5 : Dig3 Alias PORTD.6         ' и разрядам

'***********************************[Начало основной программы]******************************************

Enable Interrupts                                  ' разрешаем все прерывания
Enable Ovf0                                            ' и для индикации в частности

'----------

Number(1) = 4                                          ' выведем на индикатор 456
 Number(2) = 5
 Number(3) = 6

'----------

Do                                                            ' крутимся здесь, ожидая прерывание

Toggle Led                                              ' мигаем светодиодом
Wait 1

Loop

'************************[Процедуры обработки подпрограмм и прерываний]************************

Refresh:                                                      ' прерывание таймера Т0 (индикация)

Reset Dig1 : Reset Dig2 : Reset Dig3                ' гасим индикатор

Incr Count : If Count > 3 Then Count = 1            ' выбираем разряд для загрузки

PORTB = Lookup(number(count) , Digits)           ' закидываем в порт код цифры

Select Case Count                               ' и включаем соответствующий разряд индикатора
Case 1 : Set Dig1
Case 2 : Set Dig2
Case 3 : Set Dig3
End Select

Return                                                  ' выход из обработчика прерывания

'********************************************************[DATA]****************************************************

Digits:                                                     ' цифры

Data &B11111100 , &B01100000 , &B11011010 , &B11110010 , &B01100110       ' 0 1 2 3 4
Data &B10110110 , &B10111110 , &B11100000 , &B11111110 , &B11110110       ' 5 6 7 8 9

'*********************************************************************************************************************
SAU
Вымогатель припоя
Сообщения: 546
Зарегистрирован: Вс сен 10, 2006 00:04:03

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

Сообщение SAU »

ну у него в обработке прерывания таймера я тоже задержки не увидел..) Но вечером попробую его код..
Аватара пользователя
amv2000
Опытный кот
Сообщения: 717
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

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

Сообщение amv2000 »

SAU писал(а):вечером попробую его код..

Потом отпишитесь, а то уже интересно почему такая загагулина.
PS: Сейчас просмотрел снова код, действительно задержка Waitms нужна когда в главном цикле, а в прерывании нет.
SAU
Вымогатель припоя
Сообщения: 546
Зарегистрирован: Вс сен 10, 2006 00:04:03

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

Сообщение SAU »

В,общем, и с кодом edm2007 то же самое..Причем я пробовал ставить задержки и в обработке прерывания таймера, и в теле цикла do...loop - безрезультатно. :(
пробовал и в тело цикла вынести, как на его странице написано http://www.edm2007.narod.ru/startavr6.html

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

Do                                                                          ' основной цикл

PORTB = Lookup(number(1) , Digits)                   ' в первый разряд выводим 4
Set Dig1                                                                 ' зажигаем первый разряд
Waitms 2                                                               ' задержка
Reset Dig1                                                            ' гасим первый разряд

PORTB = Lookup(number(2) , Digits)                   ' во второй разряд выводим 5
Set Dig2                                                                 ' зажигаем второй разряд
Waitms 2                                                               ' задержка
Reset Dig2                                                            ' гасим второй разряд

PORTB = Lookup(number(3) , Digits)                   ' в третий разряд выводим 6
Set Dig3                                                                 ' зажигаем третий разряд
Waitms 2                                                               ' задержка
Reset Dig3                                                            ' гасим третий разряд
Loop                                                                      ' начинаем сначала

 


Фьзы выставлены правильно, с помощью калькулятора http://avr.roboforum.ru/calc.html?part=ATtiny2313 без делителя и с внутренним на 4 мгц

Пробовал перешивать другим программатором- все то же..Для управления анодами использованы кт361 с резисторами в базе по 1К
Кстати в протеусе выдает если цифры одинаковые- такие же как и в железе, если разные - то в протеусе одни (восьмерки), а на индикаторе другие..
В архиве исходник, прошивка и модель протеуса..даже и не знаю что думать :(
Вложения
Динамическая.rar
(16.21 КБ) 165 скачиваний
Аватара пользователя
amv2000
Опытный кот
Сообщения: 717
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

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

Сообщение amv2000 »

Подключаете не правильно, эмиттеры на землю и всё у Вас получится
Вложения
Динамическая.7z
(21.38 КБ) 179 скачиваний
SAU
Вымогатель припоя
Сообщения: 546
Зарегистрирован: Вс сен 10, 2006 00:04:03

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

Сообщение SAU »

amv2000 писал(а):Подключаете не правильно, эмиттеры на землю и всё у Вас получится

Вы будете смеяться, но в протеусе, да, все работает.а подключил свои кт361 эммитер на землю, коллектор на анод- даже не светятся..К тому же схему подключения брал отсюда..http://radiokot.ru/articles/30/
Индикатор у меня с общим анодом REC-S5361ASR-G вот даташит..http://www.google.by/url?sa=t&rct=j&q=& ... S5361ASR(C).pdf&ei=CtOvULXwF8n2sgbr0IGoDg&usg=AFQjCNESFzXcJ_oB6lWl53mDmEroBoZ31A&sig2=tixI7Uk4Ze1_wiP_DXfxjA
Последний раз редактировалось SAU Пт ноя 23, 2012 22:48:06, всего редактировалось 1 раз.
Аватара пользователя
amv2000
Опытный кот
Сообщения: 717
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

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

Сообщение amv2000 »

SAU писал(а):Вы будете смеяться, но в протеусе, да, все работает.

Ржу не могу :)) У Вас в протеусе с общим катодом, на самом деле с анодом определитесь или переделайте в протеусе.
SAU
Вымогатель припоя
Сообщения: 546
Зарегистрирован: Вс сен 10, 2006 00:04:03

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

Сообщение SAU »

COMMON ANODE это общий анод?
В общем нашел свою ошибку..Забыл, что общий анод управляется нулем- по привычке 1 управлял..
Вложения
Инд.png
(37.13 КБ) 482 скачивания
Последний раз редактировалось SAU Пт ноя 23, 2012 23:06:41, всего редактировалось 1 раз.
Аватара пользователя
amv2000
Опытный кот
Сообщения: 717
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

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

Сообщение amv2000 »

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

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

Сообщение edm2007 »

SAU писал(а):ну у него в обработке прерывания таймера я тоже задержки не увидел..)


amv2000 писал(а):Сейчас просмотрел снова код, действительно задержка Waitms нужна когда в главном цикле, а в прерывании нет


SAU писал(а):Причем я пробовал ставить задержки и в обработке прерывания таймера...


Вот именно по этой причине я никогда и не выкладываю исходные коды своих законченных творений. Потому как даже не попытавшись разобраться, начинают втыкать задержки, костыли и подпорки, а потом меня же упрекают в том, что мой код не работает. :tea: При всем этом стоит учесть, что в статье расписано все настолько подробно, что даже ребенок в состоянии понять. О какой задержке вообще может идти речь, если таймер настроен на срабатывание каждые 4 мс? Именно он и разряды зажигает, независимо от основной программы, и нужное время свечения каждого разряда определяет. В этом-то вся суть. Пока таймер независимо молотит и разряд горит, программа может выполнять другие действия, не мешая индикации. Это не тупое сидение в основном цикле, когда микроконтроллер бездарно топчется на одном месте, и ничего сделать не может. Я уж не говорю о том, что фраза "пробовал ставить задержки и в обработке прерывания" говорит о многом. И явно не в пользу автора. :wink:
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Ответить

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