Свежие обсуждения
Микроконтроллеры

Ликбез по С для микроконтроллеров PIC

1 57 64

dosikus: setup_oscillator( )
И вообще то 90 адрес имеет название OSCCAL.

И что писать? OSCCAL=0x1234 ? Компилятору это не нравится. Строчку OSCCAL(); он съедает (нашёл методом тыка), а что дальше? В справке ни слова нет про это.

В справке вот что про setup_oscillator( ) :
Availability: Only parts with a OSCCON register. В 630 такого регистра не имеется.

PS Вот понять не могу чего люди такие обозлённые кругом...
------------
Нашёл ответы на https://www.ccsinfo.com/forum/viewtopic.php?p=84423

 

Получается компилятор сам заносит куда надо калибровочную константу, надо только указать #fuses INTRC_IO, так ?

 

Left Radio: #fuses INTRC_IO, так ?
Да, заносит сам, можно так
#fuses INTRC

Ещё можно менять OSCCAL в любое время, но сначала сделать
#byte OSCCAL=0x90

Народ так делал генератор качающейся частоты.

 

Vladikas: В справке вот что про setup_oscillator( ) :
Availability: Only parts with a OSCCON register. В 630 такого регистра не имеется.

Гы .. чего то я пропустил что у тебя 630 , там не надо ничего:
Правильно будет так ....
Left Radio: Получается компилятор сам заносит куда надо калибровочную константу, надо только указать #fuses INTRC_IO, так ?

А про OSCCAL я тебе написал чтобы не путался .

Лучше посмотри асмовский листинг , в неи должно быть это:

0003: NOP
0004: CALL 3FF // Get the OSCCAL value in the W register.
0005: BSF 03.5 // Bank 1
0006: MOVWF 10 // Move W into the OSCCAL register at 0x90.
0007: MOVLW 00
0008: MOVWF 0A

 

Vladikas: Нашёл ответы на https://www.ccsinfo.com/forum/viewtopic.php?p=84423

 

Я OSCCAL указываю командой #rom 0x3FF = {0x3440} в самом конце листинга, причем изменять можно только вторую половину полубайта, первая должа біть всегда "34", т.к. по сути это команда возврата из функции с занесением значения в буфер W.
Если затереть константу, то МК не запустится, т.к. на второй (толи первой) командой в прошивке будет перейти по самому последнему адрессу (вызов функции с самого последнего адресса) и если там не будет команды возврата, то управление перейдет опять на первую строчку и так далее по циклу.
Если писать программу на ассемблере, то это можно упустить.

З.Ы. Меня обрадовал PICKit2: нажал кнопку "восстановить константу", он помигал и через минуту выдает точную константу

 

Подскажите пожалуйста, вот программирую PIC18F4685. а программа вываливается с ошибкой:

Byte of PIC programm memory at 000310 address
Value from device FF
Value from computer programm EA

А если например включаю АЦП или там таймеры вкл. выкл. то ошибка может возникать по другому адресу.
Гарантированно нет ошибки только если прога очень короткая и не доходит до адреса 000200.
Что это может быть? Программатор?
Пробывал другой 18F4685, аналогично

 

Сергей К: Я OSCCAL указываю командой #rom 0x3FF = {0x3440}
Это если константы в камне нету. А если есть, то можно случайно её запороть... Я на всякий пожарный сделал такую строчку и заремил её, цифры поставил свои, мало ли...

Кстати, если присваивать OSCCAL значения от 0 до 255, то они там будут не от 0 и не до 255. Точно границы не помню, но они чуть уже.

 

если не угадать числа, что МК будет работать от внутриниго генератора не строго на 4 МГц, будет небольшое отклонение и только.

 

Хотел попробовать загрузить минимальный и максимальный корректор, забыл. Завтра попробую, посмотрю частоты.

И может у кого будут идеи по поводу моего ЖК экранчика?
http://pro-radio.ru/docs/7079-2/