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 команды надо отрубать АЦП.компаратор или что-то ЕЩЕ...ну не оставьте без внимания Друзья!
а в Idle пробовали ? Сколько жрать будет, с мегой 8 у меня близко к даташиту около 1ма.
Посмотрите даташит, чего там какие регистры отвечают за интересующие вещи и попробуйте напрямую без команд вписать, то что нужно.
_Vasilij_ писал(а):а в Idle пробовали ? Сколько жрать будет, с мегой 8 у меня близко к даташиту около 1ма.
Посмотрите даташит, чего там какие регистры отвечают за интересующие вещи и попробуйте напрямую без команд вписать, то что нужно.
И idle пробовал....не помогает , без команд эт как? в смысле ассемблерным кодом?
тама написано, отвечающий за это дело регистр называется MCUCR, состоит из 8 бит и пошло расписывать какой бит за что отвечает...вот так и конфигурируем то, что хочем
в баске
wallera писал(а):Даташит еще 3 раза перечитал и в переводе и в оригинале,
Тогда один раз понимаем.
Баском тем хорош, что можно управлять напрямую регистрами. Как показал _Vasilij_.
Если Вы не используете компаратор, не значит, что он выключен
Бит регистра ACSR ACD- Выключение компаратора( 0 — включен, 1 — выключен). При сбросе всё по нулям. Значит он у Вас по умолчанию включён.
Я работал с 48 мегой, там есть PRR , через который можно отключить всё в отдельности.
Вообще, попробуйте написать тестовую программу, где в самом начале вводите в повердаун. И экспериментируйте.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
_Vasilij_ и kip96 спасибо ....Значит после ресета по умолчанию например компаратор, Ацп.... может быть включен - принудительно отключаем . На тестовой программке и пробую.
всем привет!
пытаюсь запустить fast PWM в противофазе с наличием "мёртвого времени" на аттини 45 . Вроде работает,но скважность шима периодически дрейфует. подскажите где ошибка?
Здравствуйте. Хотел спросить, на семи сегментный индикатор вывожу температуру с датчика на 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 ' третий разряд индикатора
'********************************************[Присвоение уникальных имен]****************************************
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
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 ' третий разряд индикатора
'********************************************[Присвоение уникальных имен]****************************************
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
На Атмеге 8 задаю длительность импульса 1микросек, и паузу 1 микросек. Больше ничего нет, процессор загружен всего на 4%. Смотрю реальным цифровым осцилом на импульсы. Длительность показывает 2,5 микросек а паузу 5 микросек. В чем дело? Кварц использую внутренний Атмеги 8.
Я в этом деле делаю робкие шаги, мож чего не так понял.
Прогу пишу в ВАСКОМ АВР, потом прошиваю кристал с помощью "пони". Управление кнопками.
Вроде все.
$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
В общем есть задача прицепить к меге8515 4KB внешнего ОЗУ. Для этого нужно 12 линий адреса, первые восемь это порт A и четыре это порт C 0-3. Остаток порта C 4-7 мне нужен для софтового SPI. Чтото не как не получается перевести линии 4-7 в режим просто порта.
В настройка МК указано что всего 4KB внешнего ОЗУ.
Также пробовал на прямую через регистр SFIOR.XMM0-2 указывать какие порты не задействовать под ОЗУ. Не работает весь порт работает под ОЗУ. Может кто знает как сделать?
Только абсолютная пустота бездны принесёт мне покой.
Здравия желаю!
Вопрос к знающим людям. Встала острая необходимость в импульсах длительностью от 100 нан выше с регулировкой кнопками. Использовал функцию nop, срабатывает, но никак не соображу как сделать управление кнопками. Приходится постоянно перепрошивать кристал что бы изменить настройки. Кто сталкивался с такой проблемой.