АвторСообщение



Пост N: 1
Зарегистрирован: 11.10.20
Рейтинг: 0
ссылка на сообщение  Отправлено: 11.10.20 00:52. Заголовок: Трудно понять как работает PIC контроллер с timer1


Привет всем,

Я новичок, не могу понять как работает PIC контроллер и Timer1 с внешним кристалом.

PIC16F1936
Кристал на 32MHz для того чтобы считать время.

Если к ножкам 11 и 12 подключить кристал, нужен ли еще один кристал подключать к ножкам 9 и 10?

Вот код, подскажите пожалуиста, лава информации везде очень трудно от фильтровать что к чему.

#define _XTAL_FREQ 8000000

// CONFIG1
#pragma config FOSC = LP // Oscillator Selection (LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = ON // MCLR Pin Function Select (MCLR/VPP pin function is MCLR)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config CPD = OFF // Data Memory Code Protection (Data memory code protection is disabled)
#pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config CLKOUTEN = ON // Clock Out Enable (CLKOUT function is enabled on the CLKOUT pin)
#pragma config IESO = ON // Internal/External Switchover (Internal/External Switchover mode is enabled)
#pragma config FCMEN = ON // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)

// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config VCAPEN = OFF // Voltage Regulator Capacitor Enable (All VCAP pin functionality is disabled)
#pragma config PLLEN = ON // PLL Enable (4x PLL enabled)
#pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
#pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LVP = ON // Low-Voltage Programming Enable (Low-voltage programming enabled)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

#define SBIT_PS1 5
#define SBIT_PS0 4

unsigned char value = 0;
unsigned int timer1Count = 0;

#include <xc.h>

void __interrupt () isr(void)
{
if(PIR1bits.TMR1IF)
{
PIR1bits.TMR1IF = 0; // Clear timer interrupt flag
value = ~value;
timer1Count++;
TMR1H = 0x3C; // Load the time value(0xBDC) for 100ms delay
TMR1L = 0xAF;
}
}

void main(void)
{
TRISCbits.TRISC1 = 1;
TRISCbits.TRISC0 = 1;

//Timer1 Input Clock Prescale Select bits
//Prescaler 8 (1000000/31250/8 = 4 Hz)
T1CONbits.T1CKPS1 = 1;
T1CONbits.T1CKPS0 = 0;

T1CONbits.T1OSCEN = 1; //Timer1 Oscillator Enable Control bit
//External Clock
//T1CONbits.TMR1CS = 1;
T1CONbits.nT1SYNC = 0;//Timer1 External Clock Input Synchronization Control bit

T1CONbits.TMR1CS = 1; //Timer1 Clock Source Select bit //External clock from pin RC0/T1OSO/T1CKI (on the rising edge)

//T1CON = (1<<SBIT_PS1) | (1<<SBIT_PS0); // Timer0 with external freq and 8 as prescalar
TMR1H=0x3C; // Load the time value(0xBDC) for 100ms delay
TMR1L=0xAF;
TMR1IE=1; //Enable timer interrupt bit in PIE1 register
GIE=1; //Enable Global Interrupt
PEIE=1; //Enable the Peripheral Interrupt
//T1OSCEN = 1;

TMR1ON = 1; //Start Timer1

TRISBbits.TRISB0 = 0; //RB0 as Output PIN

while(1)
{
PORTBbits.RB0 = value;
}

return;
}

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 1 [только новые]





Пост N: 1
Зарегистрирован: 04.11.20
Рейтинг: 0
ссылка на сообщение  Отправлено: 04.11.20 12:47. Заголовок: В сообщении указано ..


В сообщении указано 32 МГц для кристалла. Это правильно? Или 32768 Гц?
По тексту программы указан осциллятор для МК на 8 МГц. К пинам 9,10. Вот это место:
#define _XTAL_FREQ 8000000
Теперь смотрим, что там делают со вторым таймером.
Это предустановка регистров таймера, чтобы получить 100 ms:
TMR1H = 0x3C; // Load the time value(0xBDC) for 100ms delay
TMR1L = 0xAF;
А вот указание использования таймера:
//Timer1 Input Clock Prescale Select bits
//Prescaler 8 (1000000/31250/8 = 4 Hz) _ прескалер 8, и расчет времени.
Собери простенький макет и поиграйся с этим.
Два кварца - это не страшно. Но, можно использовать внутренний осцилятор( если такой есть у этого МК), тогда можно обойтись одним, низкочастотным кварцем.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 8
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет



Создай свой форум на сервисе Borda.ru
Текстовая версия