Прошу помощи.
На Мега8 сделан датчик.МК спит,просыпается по таймеру(TIMER2),который работает в асинхронном режиме от часового кварца.Просыпается,шлёт через UART что там намерял и засыпает . Скорость UART-4800,частота МК-4 Мгц. Всё работает нормально,но код для 8-й меги маловат и хотел использовать 48 мегу,да и там ещё останется.Если у 8-й меги фьюзами можно поставить нужную частоту и вполне хватает точности,чтобы UART не мусорил,то у 48-й только 8Мгц,делитель на 8,да 128 кГц. Регистр делителя CLKPR не помогает. При изменение конфигурации битов этого регистра видно,что частота меняется,но данные приемник(радиоканал) не видит.Есть ли возможность настроить 48 мегу на точную работу с частотой 4МГц от внутреннего генератора?
Как заставить работать ATmega48 на частоте 4Мгц без внешнего кварца?
Сообщений 1 страница 11 из 11
Поделиться12017-02-09 18:24:51
Поделиться32017-02-09 19:09:35
В том то и дело,что ноги для внешнего кварца уже заняты часовым кварцем,который тактирует TIMER2.Но я вычитал в дш,что есть регистр,который может менять тактовую частоту на ходу.Выглядит это так:

Думал,что фьюзами ставим 8 МГц,отключаем делитель на 8,а потом,уже внутри кода включаем делитель на 2.
Но,либо я что-то не так делаю,либо точности установки частоты не хватает.
Поделиться42017-02-09 19:59:28
В код нужно добавить
Config Clockdiv = 2
Поделиться52017-02-10 05:54:52
В код нужно добавить
$map ' Получаем карту распределения памяти компилятором Bascom
$regfile = "m48pdef.dat" ' Используемый контроллер
$crystal = 8000000 ' 8 МГц
$framesize = 64 'размер области используемой и необходимой для преобразований
$hwstack = 64 ' Размер аппаратного стека
$swstack = 64 ' Размер программного стека$baud = 4800 'Так проще задействовать весь аппаратный модуль USART МК
'===============================================================================
'Устанавливаем делитель частоты МК
'===============================================================================Config Clockdiv = 2 '1; 2; 4; 8; 16; 32; 64' 128' 256
'===============================================================================
'Устанавливаем скорость трансляции USART
'===============================================================================
'4800 бод
Ucsr0a.u2x0 = 0
Ubrr0 = 51'9600 бод
' Ucsr0a.U2x0 = 0
' Ubrr0 = 25'19200 бод
' Ucsr0a.U2x0 = 0
' Ubrr0 = 12'250000 бод
' Ucsr0a.U2x0 = 0
' Ubrr0 = 0'-------------- Разрешаем работу необходимых прерываний ----------------------
' Enable Adc
' Enable Int0
' Enable Compare0a
' Enable Timer0
' Start Timer0
' Enable Urxc
'------------ Разрешаем работу всех включенных прерываний --------------------
' Enable Interrupts
'===============================================================================' Г Л А В Н Ы Й Ц И К Л
Главный_цикл:
'===============================================================================Print "Тест скорости USART"
Wait 1
'===============================================================================
Goto Главный_цикл
End
' П О Д П Р О Г Р А М М Ы
'===============================================================================
Поделиться62017-02-10 07:31:05
Всё работает нормально,но код для 8-й меги маловат и хотел использовать 48 мегу,да и там ещё останется.
Что-то изменилось в мире и я пропустил ? 
Отчего в ATMega48 стало памяти больше, чем в ATMega8 ? 
У перового 4 кБ, у второго - 8 кБ...
Может, речь идет о замене на ATMega328 ?
Поделиться72017-02-10 07:58:55
Отчего в ATMega48 стало памяти больше, чем в ATMega8 ?
У перового 4 кБ, у второго - 8 кБ...
Описа̀лся человек, с кем не бывает.
Поделиться82017-02-10 08:51:35
Nord
Не,в мире ничего не изменилось
. Просто я имел в виду,что код настолько мал,что мега8 для него слишком большая.Не мега8 мала для кода,а код маленький,чтобы использовать МК с большим флешем.Так понятней? 
Поделиться92017-02-10 09:07:20
NordНе,в мире ничего не изменилось . Просто я имел в виду,что код настолько мал,что мега8 для него слишком большая.Не мега8 мала для кода,а код маленький,чтобы использовать МК с большим флешем.Так понятней?
Уф...
А то я уже переживать начал... 
Отредактировано Nord (2017-02-10 09:07:43)
Поделиться102017-02-10 11:01:50
$crystal = 8000000 ' 8 МГц
В данном случае, МК тактируется от 4 МГц (8/2) поэтому должно быть
$crystal = 4000000 ' 4 МГц
Поделиться112017-02-10 14:46:27
В общем заработало вот так:
$regfile = "m48pdef.dat" $hwstack = 56 $swstack = 56 $framesize = 64 'делитель на 2 при тактировании от внутр.ген.8МГц Clkpr = &B1000_0000 Clkpr = &B0000_0001 'или так: 'Config Clockdiv = 2 'скорость UART,приблизительно $baud = 4500 Ubrr0 = 55 'обычный режим работы UART Ucsr0a.1 = 0
Оказалось,что нужно было немного подправить скорость работы UART в сторону уменьшения.Вполне возможно,что этот экземпляр 48-й меги имеет своих тараканов,так что нужно будет подбирать под каждый МК свою скорость UART.Может придется учитывать напряжение питания,температуру,помехи и проч. В дипе у меня нет 48-х,так что когда руки дойдут перепаять с переходника этот на другой экземпляр проверю и отпишу по результатам.
Большое спасибо всем,оказавшим помощь.