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

Обсуждаем контроллеры компании Atmel.
wallera
Родился
Сообщения: 4
Зарегистрирован: Вс мар 24, 2013 19:38:23

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

Сообщение wallera »

kip96 писал(а):Читайте даташит. Посто в POWERDOWN мало. Про 128 не скажу, но как правило в повердаун много что ещё работает. К примеру "собака", супервизор( в котором опорка много жрёт), если АЦП включён, оять же опорка, порты остались включёнными, компаратор(по умолчанию включён), режим тактирования, опять же - схемное решение (может не контроллер жрёт) ну и т.д.
Вообщем- даташит Вам в помощь!
И тем не менее я мегу48 усыплял, что мог добиться - это 5uA против 0,4uA заявленных.

Ну примерно такой расклад:
Даташит еще 3 раза перечитал и в переводе и в оригинале,то что уважаемый kip96 посоветовал,к сведению принял, сразу....:
кроме процессора и подцепленного Usb-com порта , и часиков pcf8583 ни чего нет. АЦП ,компаратор не пользую, во фьюзах jtag и бурбраун отключены , все порты сделаны на вывод , акромя RX-компорта и int0(подперты в Uпит.)
на прерывание от часиков идут импульсы 1 Гц
ВачДог не пользую, тактирование внутренний RC генератор 1 mГЦ, питание 3.3V .
РЕЗУЛЬтАТ 3.5 миллиампера-расстраивает..
...что я не так делаю,иль что-то не доделал , мож как-то принудительно чрез ASM команды надо отрубать АЦП.компаратор или что-то ЕЩЕ...ну не оставьте без внимания Друзья!
_Vasilij_
Встал на лапы
Сообщения: 124
Зарегистрирован: Пт янв 25, 2013 02:48:32

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

Сообщение _Vasilij_ »

а в Idle пробовали ? Сколько жрать будет, с мегой 8 у меня близко к даташиту около 1ма.
Посмотрите даташит, чего там какие регистры отвечают за интересующие вещи и попробуйте напрямую без команд вписать, то что нужно.
wallera
Родился
Сообщения: 4
Зарегистрирован: Вс мар 24, 2013 19:38:23

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

Сообщение wallera »

_Vasilij_ писал(а):а в Idle пробовали ? Сколько жрать будет, с мегой 8 у меня близко к даташиту около 1ма.
Посмотрите даташит, чего там какие регистры отвечают за интересующие вещи и попробуйте напрямую без команд вписать, то что нужно.

И idle пробовал....не помогает , без команд эт как? в смысле ассемблерным кодом?
_Vasilij_
Встал на лапы
Сообщения: 124
Зарегистрирован: Пт янв 25, 2013 02:48:32

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

Сообщение _Vasilij_ »

wallera писал(а): без команд эт как?
да прям так и пишу, например мега8 , смотрим даташит раздел Power Management,
noname.GIF
(52.88 КБ) 606 скачиваний

тама написано, отвечающий за это дело регистр называется MCUCR, состоит из 8 бит и пошло расписывать какой бит за что отвечает...вот так и конфигурируем то, что хочем
в баске

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

MCUCR.7 = 1 ' записали в 7-й бит  "1" , чем разрешили слипмод
MCUCR.6 = 0
MCUCR.5 = 1  ' 3 бита выбора режима, здесь 011 - соответственно power-save
MCUCR.4 = 1

можно сразу одной строчкой

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

MCUCR = &B10110000 ' только последние 4 (где у меня 0) конфигурируют прерывания, хорошы бы тоже почитать, чего там нужно написать


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

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

Сообщение kip96 »

wallera писал(а):Даташит еще 3 раза перечитал и в переводе и в оригинале,

Тогда один раз понимаем. :))
Баском тем хорош, что можно управлять напрямую регистрами. Как показал _Vasilij_.
Если Вы не используете компаратор, не значит, что он выключен
Бит регистра ACSR ACD- Выключение компаратора( 0 — включен, 1 — выключен). При сбросе всё по нулям. Значит он у Вас по умолчанию включён.
Я работал с 48 мегой, там есть PRR , через который можно отключить всё в отдельности.
Вообще, попробуйте написать тестовую программу, где в самом начале вводите в повердаун. И экспериментируйте.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
wallera
Родился
Сообщения: 4
Зарегистрирован: Вс мар 24, 2013 19:38:23

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

Сообщение wallera »

_Vasilij_ и kip96 спасибо ....Значит после ресета по умолчанию например компаратор, Ацп.... может быть включен - принудительно отключаем . На тестовой программке и пробую.
Аватара пользователя
fasam
Родился
Сообщения: 8
Зарегистрирован: Пт мар 29, 2013 07:49:16

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

Сообщение fasam »

всем привет!
пытаюсь запустить fast PWM в противофазе с наличием "мёртвого времени" на аттини 45 . Вроде работает,но скважность шима периодически дрейфует. подскажите где ошибка?


$regfile = "attiny45.dat"
$crystal = 1000000
Config Portb = Output

Pllcsr = &B00000011 'РЕГИСТР ПОДКЛЮЧЕНИЯ СКОРОСТНОГО ШИМ ВКЛ '
Waitus 100 'ЖДЁМ 100МКС
Pllcsr = &B00000111 'ЗАПУСКАЕМ СКОРОСТНОЙ ШИМ
Tccr1 = &B11010011 ' РЕГИСТРЫ ТАЙМЕРА1 НАСТРОЕНЫ НА ШИМ
Gtccr = &B00000000
Dtps = &B11111111
Dtvala = &B00010001 ' МЕРТВОЕ ВРЕМЯ
Ocr1c = 254 ' РЕГИСТР СРАВНЕНИЯ
Ocr1a = 127 ' РЕГИСТР ШИМ

Do

Loop
End
_Vasilij_
Встал на лапы
Сообщения: 124
Зарегистрирован: Пт янв 25, 2013 02:48:32

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

Сообщение _Vasilij_ »

fasam, а точно это программное, может кварц внешний прицепить нужно или по питанию уплывает ?
Аватара пользователя
fasam
Родился
Сообщения: 8
Зарегистрирован: Пт мар 29, 2013 07:49:16

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

Сообщение fasam »

думаю это програмное,смотрел только симульку протеусом.
Вложения
fast PWM.7z
в архиве файлы баскома и протеуса
(24.98 КБ) 164 скачивания
cattus
Родился
Сообщения: 14
Зарегистрирован: Сб май 26, 2012 16:31:25

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

Сообщение cattus »

Здравствуйте. Хотел спросить, на семи сегментный индикатор вывожу температуру с датчика на ds18b20. Но периодически на индикаторе появляются нули...........
$regfile = "m8def.dat"
$crystal = 8000000
'*****************************************[Идикатор с общим анодом]****************************************'
'*****************************************[Определение переменных и констант]************************************

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



Dim W As Integer
Dim M1 As Integer
Dim M2 As Integer
Dim M3 As Integer

' *** Заводим переменные

Dim Byte0 As Byte
Dim Byte1 As Byte
Dim T As Single
Dim T1 As Integer
Dim T2 As Integer
Dim Ttemp As Integer
Dim Hh As Integer
Dim Mm As Integer
'***********************************************[Инициализация портов]*******************************************


Config 1wire = Portc.1 'определяем порт для подключения датчика

Config Portc.2 = Output ' светодиод для проверки температуры "+" или "-"

Config Portc.0 = Output ' светодиод для проверки подключения датчика

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

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

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

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

'********************************************[Присвоение уникальных имен]****************************************
Leg Alias Portc.2
Led Alias Portc.0 ' присваиваем имя светодиоду
Dig1 Alias Portb.3 : Dig2 Alias Portb.4 : Dig3 Alias Portb.5 ' и разрядам индикатора

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

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



Do
' крутимся здесь, ожидая прерывание
1wreset
If Err = 1 Then 'если при опросе небыло ответа ставим флаг ошибки
Toggle Led ' мигаем светодиодом
Wait 1
Else ' иначе, если ошибки не было, продолжаем опрос датчика

1wwrite &HCC ' Выдаем команду чтения ПЗУ
1wwrite &H44 ' Запуск измерения

Waitms 750 ' Ждем окончания преобразования

1wreset
1wwrite &HCC
1wwrite &HBE ' Команда чтения ОЗУ датчика


Byte0 = 1wread() ' Читаем нулевой байт

Byte1 = 1wread() ' Читаем первый байт

If Byte1 > 248 Then ' Проверка на отрицательность температуры
Byte0 = &HFF - Byte0
Byte1 = &HFF - Byte1
Leg = 0 'если "минусовая" погода то не горит светодиод

Else
Leg = 1 'если "плюсовая" погода то горит светодиод
End If

T1 = Byte0 / 16 ' Сдвигаем нулевой байт вправо на 4 бита (2*2*2*2=16)
T2 = Byte1 * 16 ' Сдвигаем первый байт влево на 4 бита (2*2*2*2=16)
T = T1 + T2
Hh = Fix(t) 'отсекаем от температуры все после запятой
Ttemp = T * 10 '
Mm = Ttemp Mod 10

W = Hh / 10
M1 = Abs(w)
M2 = W Mod 10
Number(1) = M1
Number(2) = M2
Number(3) = Mm

End If
Wait 1 ' ждем 1 секундy

Loop

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

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


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

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

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

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

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

Digits: ' цифры

Data &B11000000 , &B11111001 , &B10100100 , &B10110000 , &B10011001 ' 0 1 2 3 4
Data &B10010010 , &B10000010 , &B11111000 , &B10000000 , &B10010000 ' 5 6 7 8 9
cattus
Родился
Сообщения: 14
Зарегистрирован: Сб май 26, 2012 16:31:25

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

Сообщение cattus »

cattus писал(а):Здравствуйте. Хотел спросить, на семи сегментный индикатор вывожу температуру с датчика на ds18b20. Но периодически на индикаторе появляются нули...........
$regfile = "m8def.dat"
$crystal = 8000000
'*****************************************[Идикатор с общим анодом]****************************************'
'*****************************************[Определение переменных и констант]************************************

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



Dim W As Integer
Dim M1 As Integer
Dim M2 As Integer
Dim M3 As Integer

' *** Заводим переменные

Dim Byte0 As Byte
Dim Byte1 As Byte
Dim T As Single
Dim T1 As Integer
Dim T2 As Integer
Dim Ttemp As Integer
Dim Hh As Integer
Dim Mm As Integer
'***********************************************[Инициализация портов]*******************************************


Config 1wire = Portc.1 'определяем порт для подключения датчика

Config Portc.2 = Output ' светодиод для проверки температуры "+" или "-"

Config Portc.0 = Output ' светодиод для проверки подключения датчика

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

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

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

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

'********************************************[Присвоение уникальных имен]****************************************
Leg Alias Portc.2
Led Alias Portc.0 ' присваиваем имя светодиоду
Dig1 Alias Portb.3 : Dig2 Alias Portb.4 : Dig3 Alias Portb.5 ' и разрядам индикатора

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

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



Do
' крутимся здесь, ожидая прерывание
1wreset
If Err = 1 Then 'если при опросе небыло ответа ставим флаг ошибки
Toggle Led ' мигаем светодиодом
Wait 1
Else ' иначе, если ошибки не было, продолжаем опрос датчика

1wwrite &HCC ' Выдаем команду чтения ПЗУ
1wwrite &H44 ' Запуск измерения

Waitms 750 ' Ждем окончания преобразования

1wreset
1wwrite &HCC
1wwrite &HBE ' Команда чтения ОЗУ датчика


Byte0 = 1wread() ' Читаем нулевой байт

Byte1 = 1wread() ' Читаем первый байт

If Byte1 > 248 Then ' Проверка на отрицательность температуры
Byte0 = &HFF - Byte0
Byte1 = &HFF - Byte1
Leg = 0 'если "минусовая" погода то не горит светодиод

Else
Leg = 1 'если "плюсовая" погода то горит светодиод
End If

T1 = Byte0 / 16 ' Сдвигаем нулевой байт вправо на 4 бита (2*2*2*2=16)
T2 = Byte1 * 16 ' Сдвигаем первый байт влево на 4 бита (2*2*2*2=16)
T = T1 + T2
Hh = Fix(t) 'отсекаем от температуры все после запятой
Ttemp = T * 10 '
Mm = Ttemp Mod 10

W = Hh / 10
M1 = Abs(w)
M2 = W Mod 10
Number(1) = M1
Number(2) = M2
Number(3) = Mm

End If
Wait 1 ' ждем 1 секундy

Loop

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

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


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

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

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

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

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

Digits: ' цифры

Data &B11000000 , &B11111001 , &B10100100 , &B10110000 , &B10011001 ' 0 1 2 3 4
Data &B10010010 , &B10000010 , &B11111000 , &B10000000 , &B10010000 ' 5 6 7 8 9

С данным вопросом разобрался, если что отпишусь, чуть позже
TIP
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс июл 03, 2011 06:27:35

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

Сообщение TIP »

На Атмеге 8 задаю длительность импульса 1микросек, и паузу 1 микросек. Больше ничего нет, процессор загружен всего на 4%. Смотрю реальным цифровым осцилом на импульсы. Длительность показывает 2,5 микросек а паузу 5 микросек. В чем дело? Кварц использую внутренний Атмеги 8.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Чем задаете-то?
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
TIP
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс июл 03, 2011 06:27:35

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

Сообщение TIP »

edm2007 писал(а):Чем задаете-то?

Я в этом деле делаю робкие шаги, мож чего не так понял.
Прогу пишу в ВАСКОМ АВР, потом прошиваю кристал с помощью "пони". Управление кнопками.
Вроде все.

$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32
Config Pinc.1 = Input
Config Pinc.3 = Input
Config Pinc.4 = Input
Config Pinc.5 = Input
Config Pinb.1 = Input
Config Portb.6 = Output
Config Portd.4 = Output
Config Portd.1 = Output
Config Portd.0 = Output
Set Pinc.1
Set Pinc.3
Set Pinc.4
Set Pinc.5
Set Pinb.1
Plus Alias Pinc.5
Minus Alias Pinc.4
Plusp Alias Pinc.3
Minusp Alias Pinc.1
Pusk Alias Pinb.1
Gena Alias Portb.6
Genb Alias Portd.4
Dim Dlit As Integer
Dim Pausa As Integer
Dlit = 1
Pausa = 1
Do
If Plus = 0 Then
Gosub Pluus
End If
If Minus = 0 Then
Gosub Minuus
End If
If Plusp = 0 Then
Gosub Pluusp
End If
If Minusp = 0 Then
Gosub Minuusp
End If
If Pusk = 0 Then
Gosub Puusk
End If
Set Gena
Waitus Dlit
Reset Gena
Waitus Pausa
Loop
Pluus:
Waitms 500
Dlit = Dlit + 1
Return
Minuus:
Waitms 500
If Dlit = 1 Then
Return
Else
Dlit = Dlit - 1
End If
Return
Pluusp:
Waitms 500
Pausa = Pausa + 1
Return
Minuusp:
Waitms 500
If Pausa = 1 Then
Return
Else
Pausa = Pausa - 1
End If
Return

Puusk:
Waitms 500
Set Genb
Waitus Dlit
Reset Genb
Waitus Pausa
Return
End
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Почитайте в хелпе баскома о команде waitus. И там же о стандартном опросе кнопок командой debounce.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
TRIOD
Вымогатель припоя
Сообщения: 693
Зарегистрирован: Вт сен 15, 2009 16:23:06
Откуда: Москва

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

Сообщение TRIOD »

Доброе время суток.

В общем есть задача прицепить к меге8515 4KB внешнего ОЗУ. Для этого нужно 12 линий адреса, первые восемь это порт A и четыре это порт C 0-3. Остаток порта C 4-7 мне нужен для софтового SPI. Чтото не как не получается перевести линии 4-7 в режим просто порта.
В настройка МК указано что всего 4KB внешнего ОЗУ.
Также пробовал на прямую через регистр SFIOR.XMM0-2 указывать какие порты не задействовать под ОЗУ. Не работает весь порт работает под ОЗУ. Может кто знает как сделать?
Только абсолютная пустота бездны принесёт мне покой.
TIP
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс июл 03, 2011 06:27:35

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

Сообщение TIP »

Здравия желаю!
Вопрос к знающим людям. Встала острая необходимость в импульсах длительностью от 100 нан выше с регулировкой кнопками. Использовал функцию nop, срабатывает, но никак не соображу как сделать управление кнопками. Приходится постоянно перепрошивать кристал что бы изменить настройки. Кто сталкивался с такой проблемой.

Set Gena
nop
Reset Gena
nop
Loop
implex
Родился
Сообщения: 15
Зарегистрирован: Пт фев 17, 2012 23:19:13

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

Сообщение implex »

Подскажите пожалуйста, как на некоторое время перевести ножку RXd на вход или установить нолик при настроенном UART.
delf74
Родился
Сообщения: 4
Зарегистрирован: Пт май 03, 2013 06:17:18

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

Сообщение delf74 »

Для отключения аппаратного UART у mega8 можно использовать команду:
Ucsrb.3 = 0
затем делайте с портами, что хотите
Ucsrb.3 = 1 - снова включит UART
delf74
Родился
Сообщения: 4
Зарегистрирован: Пт май 03, 2013 06:17:18

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

Сообщение delf74 »

delf74 писал(а):Для отключения аппаратного UART у mega8 можно использовать команду:
Ucsrb.3=0

- влияет на TXD
для отключения RXD используйте:
Ucsrb.4=0
Ответить

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