Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PIC18F4680, непонятки с тактированием
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
Aaron
Доброго времени суток!
Немного лирики: возникла необходимость написать крупный проект под PIC18F4680, до этого с пиками работал более 5 лет назад - простенькие программки однокнопочные, писались в MPASM либо MikroC. Сейчас попробовал MPLAB IDE, MikroC - не понравилось, ибо давно сижу в Eclipse. Настроил для компиляции связку Eclipse+SDCC+PICkit2. На всякий случай поставил C18 compiler, пока не пробовал его.
А теперь к делу: в схеме стоит генератор, на входе OSC1 прямоугольные импульсы уровня 5В, частота 14,75МГц.
Написал простенький проект, всё компилируется - пытаюсь просто дёргать ножками (кому интересно, могу выложить makefile).
Перепробовал все возможные конфигурации тактирования - реакция нулевая, ножки не дёргаются. При этом:
EC (external clock - мой вариант, т.к. генератор) - на OSC2 полная тишина;
HS, HSPLL (extarnal crystal) - на OSC2 вижу 14,75МГц в обоих случаях;
RC - на OSC2 тишина;
IRCIO7 (internal RC) - на OSC2 тоже тишина! Вот этого я вообще не понимаю!

Посмотрите и объясните, пожалуйста, где в такой простой программе может быть ошибка?

Вот конфигурационные регистры (при компиляции проверял конфиг регистры выходного файла PICkit2 программатором, всё компилируется нормально):
Цитата
#pragma config OSC = EC // EC with OSC2 as divide by 4 clock out
#pragma config FCMEN = ON // fail-safe clock monitor
#pragma config IESO = ON // internal-ext. OSC switch
#pragma config PWRT = OFF // power-up timer
#pragma config BOREN = BOACTIVE // brown-out reset
#pragma config BORV = 2 // brown-out voltage choose: 4.5V/4.2V/2.7V/2.0V
#pragma config WDT = OFF // watchdog timer
#pragma config WDTPS = 128 // WDT postscaler = 1:X
#pragma config MCLRE = ON // MCLR enable
#pragma config LPT1OSC = OFF // low power timer1 OSC
#pragma config PBADEN = OFF // PORTB pins configured as analog (ON) / digital (OFF) on Reset
#pragma config DEBUG = OFF // background debug
#pragma config XINST = OFF // enhanced instruction set CPU
#pragma config BBSIZ = 4096 // Boot Block Size
#pragma config LVP = ON // Low-voltage programming
#pragma config STVREN = ON // stack overflow-underflow reset
#pragma config CP0 = OFF // code protection block X
#pragma config CP1 = OFF
#pragma config CP2 = OFF
#pragma config CP3 = OFF
#pragma config CPB = OFF // boot block code protection
#pragma config CPD = OFF // Data EEPROM code protection
#pragma config WRT0 = OFF // write protection blocks
#pragma config WRT1 = OFF
#pragma config WRT2 = OFF
#pragma config WRT3 = OFF
#pragma config WRTC = OFF
#pragma config WRTB = OFF
#pragma config WRTD = OFF
#pragma config EBTR0 = OFF // table read protection blocks
#pragma config EBTR1 = OFF
#pragma config EBTR2 = OFF
#pragma config EBTR3 = OFF
#pragma config EBTRB = OFF


Вот сам простенький код:
Цитата
void main (void) {
// Set all interrupts default values
INTCON = 0x00;
INTCON2 = 0x00;
INTCON3 = 0x00;

// disable all interrupts
PIE1 = 0x00;
PIE2 = 0x00;
PIE3 = 0x00;

// 0xFF = set all pins as inputs
TRISA = 0xFF;
TRISB = 0xFF;
TRISC = 0xFF;
TRISD = 0xFF;
TRISE = 0xFF;

ADCON1 = 0x0F; // set all ANx channels as Digital I/O
CVRCON = 0x00; // reset AN settings
// CMCON = 0x07; // reset other AN settings
ECCP1CON = 0x00; // Capture/Compare/PWM off (reset ECCP1 module)

// clear output data latches
PORTA = 0x00;
PORTB = 0x00;
PORTC = 0x00;
PORTD = 0x00;
PORTE = 0x00;

// clear output data latches - alternate method
LATA = 0x00;
LATB = 0x00;
LATC = 0x00;
LATD = 0x00;
LATE = 0x00;

// clear all interrupt requests
PIR1 = 0x00;
PIR2 = 0x00;
PIR3 = 0x00;

// clear all interrupt priorities
IPR1 = 0x00;
IPR2 = 0x00;
IPR3 = 0x00;

// clear reset control register
RCON = 0x00;

// set unused edge chip pins as digital outputs
TRISA = 0x0C;
TRISB = 0x06;
while (1) {
PORTA = 0xFF;
PORTA = 0x00;
};
}
evc
Цитата
1. LP Low-Power Crystal
2. XT Crystal/Resonator
3. HS High-Speed Crystal/Resonator
4. HSPLL High-Speed Crystal/Resonator
with PLL enabled
5. RC External Resistor/Capacitor with
FOSC/4 output on RA6
6. RCIO External Resistor/Capacitor with I/O
on RA6
7. INTIO1 Internal Oscillator with FOSC/4 output
on RA6 and I/O on RA7
8. INTIO2 Internal Oscillator with I/O on RA6
and RA7
9. EC External Clock with FOSC/4 output
10. ECIO External Clock with I/O on RA6

Цитата
EC (external clock - мой вариант, т.к. генератор) - на OSC2 полная тишина;
HS, HSPLL (extarnal crystal) - на OSC2 вижу 14,75МГц в обоих случаях;
RC - на OSC2 тишина;
IRCIO7 (internal RC) - на OSC2 тоже тишина! Вот этого я вообще не понимаю!

В RC режиме и не будет на выходе ничего, для этого режма нужны внешний резистор с конденсатором.
IRCIO7 - нет такого режима, если вы имели ввиду INTIO2, тогда на RA6 и RA7 ничего и не будет, они работают как входы/выходы.
Вы включили FCM и отключили Power-up Timer. Очень возможно, что при включении, микроконтроллер автоматически переключается на внутренний генератор.
При этом - отметьте!, в OSCCON это никак не отразится.

ПП То, что ножки не дергаются, скорее всего не имеет отношения к тактировании. Посмотрите периферию (компаратор, АЦП и т.д.) и если нужно отключите ее.
Ruslan1
Если в симуляторе работает, а в железе нет- то скорее всего проблемы в железе (сама схема или программирование).

1. Убедитесь что работает в симуляторе.
2. Прошейте в режиме отладки и пройдите по шагам, пикКит2 это должен уметь.
Aaron
Ruslan1 - вы очень помогли косвенно ))) Ещё раз потыркался по программатору насчёт его возможностей - увидел кнопочку "Hold Device in Reset", снял - всё работает. Вот уж глупые косяки бывают, когда что-то новое в руки берёшь... ССЗБ ))) Тему можно закрывать!

evc, названия доступных значений я смотрел по документу PIC18_Config_Settings.pdf скачанному с сайта Microchip. По крайней мере, SDCC компилятор эти названия распознаёт!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.