Перейти к содержанию

crazz

Рекомендуемые сообщения

согласен... вообще есть смутные подозрения , что кварц вообще не на 10МГц.... при 1,059654298 сек отставание за сутки составит около 85 мин/сутки , а не на 3-4 как у ТС-а...

TMR1= (65536 - 50000) + TMR1;

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

только эту запись нужно обязательно смотреть в листинге асемблера , не все компиляторы ее адекватно компилируют....
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Hongfa для различных применений в Компэл. Большой выбор в наличии!

Компания HONGFA - это не только крупнейший в мире производитель электромеханических реле, но также производитель конденсаторов, вакуумных прерывателей, трансформаторов и низковольтного коммутационного оборудования. На складе КОМПЭЛ регулярно поддерживаются около 100 самых популярных позиций электромеханических реле. Реле Hongfa могут заместить многие изделия производства недоступных брендов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161


char ss, temp1, mm;

INTCON=0b11000000; // Настройка прерываний
OPTION=0b00000111; // Настройка TMR0
//CMCON=0b00000101; // используется только второй компаратор
//T1CON =0b00110001; // Настройка TMR1
T1CON =0b00110001; // Настройка TMR1 /1:8
TMR1IE=1;//Разрешение прерывания по переполнению TMR1

void interrupt isr(void)
{
if(T0IF) // при переполнение TMR0
{
T0IF=0; // сбрасываем флаг о его переполнение
}
if(TMR1IF) // при переполнение TMR1
{TMR1IF=0; // сбрасываем флаг
//TMR1= (65536 - 50000) + TMR1;//тут ошыбка не присваевается

TMR1H= 0x85;
TMR1L= 0xEE;//TMR1 65536-31250=34286


temp1++;

if (temp1 = 9)//
{
ss++;//секунды
temp1 = 0;
}
if (ss>59)
{
ss=0;
mm++;//минуты
}

}
}

кварц 10 мгц

10000000/4=

2500000/31250/8=10

проверьте так будет правилоно ?

Изменено пользователем luzik24
Ссылка на комментарий
Поделиться на другие сайты

Секреты депассивации литиевых батареек FANSO EVE Energy

Самыми лучшими параметрами по энергоемкости, сроку хранения, температурному диапазону и номинальному напряжению обладают батарейки литий-тионилхлоридной электрохимической системы. Но при длительном хранении происходит процесс пассивации. Разберем в чем плюсы и минусы, как можно ее избежать или уменьшить последствия и как проводить депассивацию батареек на примере продукции и рекомендаций компании FANSO EVE Energy. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

//TMR1= (65536 - 50000) + TMR1;//тут ошыбка не присваевается

Тут только две ошибки - в словах "ошЫбка" и "присваЕвается" :)

Что и куда не присваивается ? Какая ошибка и где ?

Эту строку можно и по-другому написать:

TMR1-=50000;

, но IMXO специально её расписал по пунктам, чтобы Вы поняли её назначение. Но, видимо не судьба...

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

компилятор HI-TECH ругается, когда так присваиваешь,

вот что получилось

void interrupt isr(void)
{
//char temp1;
if(T0IF)   // при переполнение TMR0
{
 T0IF=0;  // сбрасываем флаг о его переполнение
}
if(TMR1IF)  // при переполнение TMR1
{
temp1++;
TMR1H= 0x85;
TMR1L= 0xF7;
if (temp1 > 9)
{
ss++;
temp1 = 0;
}
if (ss>59)
{
ss=0;
mm++;
}
 TMR1IF=0;  // сбрасываем флаг
}
}

сейчас вроде не спешит

кварц у меня по частотомеру 9997425.

Я собираю устройство для контроля аквариума с lcd дисплеем. Контроль подсветки, аэратора, кормушки.

Ссылка на комментарий
Поделиться на другие сайты

Добавь еще функцию коррекции хода, каждые N сотен милисекунд добавлять или отнимать одну сотню милисекунд.

Число N можно рассчитать по тому насколько часы будут уходить за сутки.

Например, за сутки они уйдут на 2 секунды, значит за 24 часа = 24*60*60*10 = 864000 сотен милисекунд надо откорректировать время на 2*10 = 20 сотен милисекунд, или каждые 43200 сотен милисекунд надо будет добавить(если часы отстают) или отнять(если спешат) единицу из temp1. Точно так же, сверху в цикле где идут секунды можно добавить коррекцию в секундах за месяц. и если термостатировать кварц, то можно будет не беспокоится о точности хода часов годами.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

компилятор HI-TECH ругается, когда так присваиваешь
Так бы сразу и говорили, а то всё какими-то тайнами... :)

Добавьте это где-нибудь вначале программы :

#define TMR1 (*(unsigned int*)&TMR1L)

и компилятор Вас больше не будет материть :)

Ссылка на комментарий
Поделиться на другие сайты

void interrupt isr(void)

if(TMR1IF) // при переполнение TMR1
{
temp1++;
TMR1H= 0x85;
TMR1L= 0xF7;

}

так присваивать некорректно... с момента установки флага переполнения таймера и до момента его переустановки проходит время, причем разное из-за наличия других прерываний... это время нужно учесть при переустановке... наличие передделития тоже вносит погрешность и нужно стремится чтобы его коэф. был минимальный....
Ссылка на комментарий
Поделиться на другие сайты

а так ?

TMR1H= TMR1H+0x85;
TMR1L= TMR1L+0xF7;

ну я думаю изменять TMR1L через меню в самой программе на устройстве и добиться приемлимой точности . А с предделителем на 8 прерывание будет возникать всего 10 раз в секунду.

Ссылка на комментарий
Поделиться на другие сайты

А с предделителем на 8 прерывание будет возникать всего 10 раз в секунду.

ну вот что непонятно? если установлен предделитель на 8, это преращение таймера каждые 8 маш.циклов и угадать на каком маш.цикле произойдет переустановка таймера невозможно, это приводит к погрешности в отсчетах 1-8 маш.циклов при каждой предустановке....
Ссылка на комментарий
Поделиться на другие сайты

Когда присваиваешь значение таймеру предделитель сбрасывается и начинает считать сначала.

Неужели в ПИКах нет нужных режимов работы таймера, в котором он считал бы до нужного значения и сам сбрасывался?

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Неужели в ПИКах нет нужных режимов работы таймера

+1 !

спб, что напомнили... в модуле ССР1 есть такой режим... только руководстве по ПИКмикро описан скудно... но вполне приемлем к использованию... да и с флагами есть непонятка... ответ на вопрос5 ясности в этом не приносит... есть смутные подозрения, что сброс таймера1 нужно регистрировать по флагу CCP1IF вместо TMR1IF

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Добрый день, взялся осваивать пики, начал с 12f675. Но что-то не могу разобраться с портами ввода-вывода.

Листинг такой:

list      p=12F675            
#include <p12F675.inc>
__CONFIG   _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT

		ORG	0
		goto Begin

Begin		bcf STATUS,RP0
		movlw 7
		movwf CMCON	
		movlw B'111111'
		movwf GPIO
		bsf STATUS,RP0
		clrf TRISIO
		bcf STATUS,RP0
		End

Но в отладчике (MPLAB 8.92) в GPIO почему-то 0x20, Пихаю 111111, а запихивается почему-то 100000. Что я делаю не так?

Изменено пользователем Alex
тег [/CODE]
Ссылка на комментарий
Поделиться на другие сайты

АЦП отключите.

И что за число такое 1000000 ? Причём тут порты и число ? Порты - дискретные входы/выходы, там бывают только лог 1 или 0 (ну за исключением аналоговых сигналов).

Выражайтесь более конкретнее.

Добавлено

_________________________________________________________

А, это число в бинарном виде, понятно...

Вощем оключайте АЦП. И вывод в порты нужно делать после инициализации напрвлавления, а не до неё :)

Ссылка на комментарий
Поделиться на другие сайты

Да, заработалллооооо!!!! Спасибо!

list   p=12F675
#include <p12F675.inc>
__CONFIG   _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT
				 ORG 0
				 goto Begin
Begin		    bcf STATUS,RP0
				 movlw 7
				 movwf CMCON
				 bsf STATUS,RP0
				 clrf ANSEL
				 clrf TRISIO
				 bcf STATUS,RP0
				 movlw B'111110'
				 movwf GPIO
				 nop
				 End

Не обратил внимание на ANSEL(((

Изменено пользователем Zergius
Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

подскажите пожалуйста вот в прикрепленном файле распиновка микроконтроллера pic16f716, не могу сообразить куда вешать CLOCK и DATA от программатора, с английским туго а на перевод даташита гуглом у меня вечность уйдет

post-117296-0-56540900-1411219218.png

Не судите строго)

Ссылка на комментарий
Поделиться на другие сайты

Обычно они идут на RB6-RB7, даже не вчитываясь в даташит - всего два варианта подключения один из которых верный.

А если вчитываться, в даташите ближе к концу есть схема подключения ICSP-программатора, там написано черным по белому что куда соединять.

Ну и третья ссылка в гугле...

GND (VSS) Общий провод.

VDD (VCC) + напряжение питания.

MCLR' (VPP) Вход сброса микроконтроллера / вход напряжения программирования.

RB7 (DATA) Двунаправленная шина данных в режиме программирования.

RB6 (CLOCK) Вход синхронизации в режиме программирования.

Изменено пользователем Alexeyslav

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

спасибо большое разобрался

Собрал программатор на основе вот этой схемы http://cxem.net/mc/m.../mc/mc4-2.gif так как у меня ноутбук и сом порта нет пользуюсь преобразователем USB - RS232 соответственно уровни на выходе из него 5В поэтому немного ее переделал убрал стабилитроны уменьшил номиналы резисторов на входах порта, и добавил стабилизатор на 12 вольт. PICPgm видит этот программатор как Velleman-Kit K8048 а микроконтроллер не видит, пробовал два микроконтролера PIC16F74 и тот о котором выше PIC16F716 - не определились, на выходе Vpp 12в появляется при попытке автоопределения пика, на выводах data и clock появляется и пропадает 5 вольт ( судя по вольтметру при подключеном пике) напряжение питания (5в) тоже присутствует. в чем может быть проблема?

post-117296-0-24688100-1411231915_thumb.jpg

Не судите строго)

Ссылка на комментарий
Поделиться на другие сайты

Через конвертор USB-UART программироваться не будет, во-первых нужна инверсия(у RS-232 выходы инверсные) и во вторых из-за специфики USB-шины программирование в таком варианте возможно разве что со скоростью 100 бод и менее(и то, если программа будет на это рассчитана, на задержку между изменением состояния и прихода реального ответа). Иначе надо искать программатор который поддерживает такой конвертор и способен работать с ним в bit-bang режиме.

По шине USB данные передаются пакетами, пакеты формируются не чаще чем за 1 миллисекунду... поэтому реальный уровень на выходе контроллера программа может узнать только за милисекунду, но программы не в курсе такой подлянки и считывают сразу "что есть" и соответственно считывают в течении всей миллисекунды пока не придут реальные данные предыдущее значение - это ломает весь обмен данными с контроллером и соответственно программа решает что контроллер не подключен.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Вот такого я не ожидал.. и как мне теперь их шить, покупать пик кит? А есть возможность собрать юсб программатор без программирования?

Не судите строго)

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...