Большой Воронежский Форум

Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел.
Вернуться   Большой Воронежский Форум » Компьютеры и все, что с ними связано » »Радиолюбитель
Программирование микроконтролеров,ремонт аудио/видео/бытовой техники,полезные устройства для дома,телефония, обсуждение статей журнала Радио

Ответ
 
Опции темы
Старый 21.10.2010, 15:56   #601   
Форумец
 
Аватар для Butik
 
Сообщений: 36
Регистрация: 19.10.2010
Возраст: 57

Butik вне форума Не в сети
Спасибо конечно... Я знаю что работает порт 3 ТОЛЬКО на ввод... Но во первых в даташите написано что он работает на ввод независимо от конфигурации TRISIO, во вторых я его не использую.. и самое ГЛАВНОЕ что у меня нет никаких проблем с ассемблером...
Мой вопрос заключается в том чтоб корректно это все написать в микроси... А ассемблерный код я привел просто для иллюстрации ...
  Ответить с цитированием
Старый 21.10.2010, 20:30   #602   
КваДраНутыЙ
 
Аватар для VRTP
 
Сообщений: 1,435
Регистрация: 29.05.2010

VRTP вне форума Не в сети
Цитата:
Сообщение от Butik Посмотреть сообщение
и самое ГЛАВНОЕ что у меня нет никаких проблем с ассемблером...
Мой вопрос заключается в том чтоб корректно это все написать в микроси... А ассемблерный код я привел просто для иллюстрации ...
Сам пытаюсь на Си подсесть,а по отзывам народа,там есть засады.
  Ответить с цитированием
Старый 21.10.2010, 21:49   #603   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Ничего себе опус. Если Вы занимаетесь этим время от времени и у Вас нет времени ПЫчитать (???) оригиналы от производителя, прислушайтесь хотя бы к тем кто их читает. Вот теперь проехали.

По делу.
Цитата:
На счет рекомендации Microchip -Вот фрагмент программы на асемблере- работает без всяких sleep- при чем работает железобетонно!!!! проверено и в симуляторе и в железе вопреки всем рекомендациям!
Про "железобетон" не надо, так можно, но профессионал так делать не станет. В DS на PIC12F629 (DS41190G page 23) написано:
Цитата:
3.2.2 INTERRUPT-ON-CHANGE
......... The user, in the Interrupt Service Routine, can clear the interrupt in the following manner: a) Any read or write of GPIO. This will end the mismatch condition. b) Clear the flag bit GPIF. A mismatch condition will continue to set flag bit GPIF. Reading GPIO will end the mismatch condition and allow flag bit GPIF to be cleared....... Note: If a change on the I/O pin should occur when the read operation is being executed (start of the Q2 cycle), then the GPIF interrupt flag may not get set.
Это значит, что возможна такая ситуация когда сигнал на входе изменит свое состояние, а прерывание НЕ ВОЗНИКНЕТ! В жизни это, например, может выглядеть так - имеется датчик о сердцебиении больного: 1 - сердце бьется, 0 - не бьется. PIC12F629 должен своевременно поймать это изменение и оповестить. Разработчик решил, что это можно сделать на прерывании IOC, вместо INT, заложившись на то, что сигнал никогда не изменится в начале цикла Q2 при чтении GPIO. Microchip предупредил, разработчик игнорировал, прерывание НЕ ВОЗНИКЛО, контроллер не оповестил, последствия.....! И что? Рассказываем в суде про "железобетон"?
Или, жмем кнопки на GPIO , а они на десятый раз не срабатывают? Кто виноват? Конечно кнопки, их же китайцы делали! Если такое возможно, то может лучше так не делать?


Цитата:
Сообщение от Butik Посмотреть сообщение
...... как мне написать чтоб прерывание работало...
Вы сами все уже написали, прямо как в DS:

Цитата:
Сообщение от Butik Посмотреть сообщение
Теперь в микроси - вот так РАБОТАЕТ!!!!!

void interrupt()
{
if(INTCON.GPIF){ // если сработало
GPIO.F4=1; // читаем GPIO, убираем неоднозначность
Delay_us(500);
GPIO.F4=0; // читаем GPIO, убираем неоднозначность
INTCON.GPIF = 0 ; // сбрасываем флаг
}
}
......
void main() {
do {
init() ;
} while(1);
}
Цитата:
Сообщение от Butik Посмотреть сообщение
а вот так- без init в основном цикле - НЕ РАБОТАЕТ!!!
.......
void main() {
do {

} while(1);

}
А где тут у Вас init()? Он должен быть внутри main().
Может так?
Код:
void main() {
  init();
  do {
 
    }  while(1);
}
Цитата:
мне нужна не задержка а импульс
А получился импульс из задержки, да еще в прерывании. А потом Вы захотите отловить IOC еще на одном выводе, а он придет во время Delay_us(500), после которого у Вас GPIO.F4=0; // читаем GPIO, убираем неоднозначность, потом сброс флага и вуаля - отлов изменения в пролете . А потом Вы захотите отловить INT и если он придет перед Delay_us(500), то обработка INT будет отложена как минимум на 500 мкс. Ну и т.д.......
  Ответить с цитированием
Старый 21.10.2010, 22:53   #604   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от VRTP Посмотреть сообщение
Сам пытаюсь на Си подсесть,а по отзывам народа,там есть засады.
Какой народ? Какие отзывы?
Си - это стандарт. Поэтому засады не в Си, а в реализациях компиляторов для МК, разработчики которых пытаются втиснуть всю мощь стандарта Си в ограниченные возможности микроконтроллеров. А что в ассемблере нет засад? Пожалуйста, вот одна - ОС Linux и Windows писаны на Си и (ИМХО) на данный момент уже никто в мире не в состоянии написать ОС подобного уровня на чистом ассемблере.
  Ответить с цитированием
Старый 22.10.2010, 10:00   #605   
КваДраНутыЙ
 
Аватар для VRTP
 
Сообщений: 1,435
Регистрация: 29.05.2010

VRTP вне форума Не в сети
Цитата:
Сообщение от petrd Посмотреть сообщение
Какой народ? Какие отзывы?
Си - это стандарт. Поэтому засады не в Си, а в реализациях компиляторов для МК,
Тогда такая просьба,не могли бы Вы создать проект для МикроС с этой "шапкой"
processor 12F675
#include <P12F675.INC>


__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT

errorlevel -302



;*********************************************
;регистры для посылок
;*********************************************
#define fix11_K 0x20
#define hop14_K 0x21
#define hop13_K 0x22
#define hop12_K 0x23
#define hop11_K 0x24

#define but_K 0x25
#define fix23_K 0x26
#define fix22_K 0x27
#define fix21_K 0x28
#define hop24_K 0x29
#define hop23_K 0x2a
#define hop22_K 0x2b
#define hop21_K 0x2c
;************************************************* *
; буфер для отправки
;************************************************* *
#define but_out 0x2d
#define fix3_out 0x2e
#define fix2_out 0x2f
#define fix1_out 0x30
#define hop4_out 0x31
#define hop3_out 0x32
#define hop2_out 0x33
#define hop1_out 0x34

;*********************************************
;регистры для посылок
;*********************************************
#define fix3_S 0x35
#define fix2_S 0x36
#define fix1_S 0x37
#define hop4_S 0x38
#define hop3_S 0x39
#define hop2_S 0x3a
#define hop1_S 0x3b

#define but_S 0x3c
#define fix3_S2 0x3d
#define fix2_S2 0x3e
#define fix1_S2 0x3f
#define hop4_S2 0x40
#define hop3_S2 0x41
#define hop2_S2 0x42
#define hop1_S2 0x43

;*************************************************
; временные регистры
;*************************************************
#define Reg_0 0x44
#define Reg_1 0x45
#define Reg_2 0x46
#define Reg_3 0x47
#define Reg_4 0x48
#define Reg_5 0x49
#define Reg_6 0x4a

#define registr_STATUS 0x4b

;*********************************************
; обзываем выводы
;*********************************************
#define P1 1 ;Светодиод
#define P2 0 ;Светодиод
#define TX 2 ;Выход
#define RX 3 ;Вход
#define TX_ON 4 ;Светодиод
#define BUT 5 ;Кнопка
;*********************************************

#define bank0 bcf STATUS,RP0
#define bank1 bsf STATUS,RP0
;************************************************* ******************************************
;************************************************* ******************************************
;************************************************* ******************************************
ORG 0x0000
;************************************************* ******************************
BSF STATUS,RP0 ; переносим из последней ячейки установку для
call 3FFh ; внутреннего генератора
movwf OSCCAL
BCF STATUS,RP0

;************************************************* ******************************
start


bsf STATUS,RP0
clrf ANSEL ;выключаем АЦП
bcf STATUS,RP0

movlw 0x07
movwf CMCON ; Настраиваем все пины как цифровые входы-выходы


clrf GPIO
bsf STATUS,RP0

movlw b'00101000' ;Настроить GPIO,RX: GP0,GP2,GP4,GP5-выход, GP1,GP3 -вход.
; 0-выход 1-вход
movwf TRISIO

movlw b'00100000'
movwf WPU

bcf STATUS,RP0
clrf GPIO

;************************************************* ***************

;************************************************* ********************
; СТАРТ

и банально по моргать диодом
(что бы в нем посмотреть уже знакомое)наверное так легче будет понять что,да как.
  Ответить с цитированием
Старый 22.10.2010, 12:40   #606   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от VRTP Посмотреть сообщение
Тогда такая просьба,не могли бы Вы создать проект для МикроС с этой "шапкой"
........
и банально по моргать диодом
Как-то так, биты конфигурации в MikroC в коде не пишутся, их надо установить самому в Project->Edit Project:
Код:
void main() {
asm {
       bsf STATUS, RP0;
       call 0x3FF;
       movwf OSCCAL;
       bcf STATUS, RP0;
    }
 ANSEL = 0;         // все выводы цифровые I/O
 CMCON = 0x07;      // компаратор отключен
 NOT_GPPU_bit = 0;  // разрешить подтяжку входов внутренними резисторами
 WPU1_bit = 1;      // GP1 - будет подтянут внутренним резистором (даже без этого оператора)
 GPIO = 0;
 TRISIO = 0x02;     // GP3, GP1 - входы
 
 for(;;)
  {
   // выходы GP0, GP2, GP4, GP5 моргают
   GPIO = ~GPIO;
   delay_ms(500);
   GPIO = ~GPIO;
   delay_ms(500);
  }
}
  Ответить с цитированием
Старый 22.10.2010, 17:01   #607   
Форумец
 
Аватар для Butik
 
Сообщений: 36
Регистрация: 19.10.2010
Возраст: 57

Butik вне форума Не в сети
Цитата:
Сообщение от petrd Посмотреть сообщение
так можно, но профессионал так делать не станет
.... Ну не знаю не знаю...Например... подобный алгоритм довольно часто применяется в различных схемах импульсно-фазового управления- например тиристорами или симисторами.. где скажем напряжение сети или какой либо иной задающий импульсный сигнал постоянной частоты и длительности подается на один из входов контроллера и там отслеживается прерывание по изменению уровня на этом входе, то есть происходит синхронизация с сетью.. а затем формируется импульс управления тиристором(если нужна задержка- то применяется прерывание от таймера..)Насколько я знаю подобный алгоритм применен в устройствах выпускаемых промышленно- например-wwwточкаshetale.ru/protectточкаhtm
Если это скажем синхронизация с сетью- то как Вы уже я надеюсь догадались- там изменение уровня происходит с частотой полупериода сети. А загонять каждые 10 миллисекунд контроллер в sleep .... не знаю.. лично я такого не совсем понимаю..Sleep режим хорош скажем для опроса клавиатуры какого нибудь домофона... когда его там нажимают раз в час или даже реже (если конечно к этому домофону не крестный ход в день святого Валентина))))
  Ответить с цитированием
Старый 22.10.2010, 17:55   #608   
КваДраНутыЙ
 
Аватар для VRTP
 
Сообщений: 1,435
Регистрация: 29.05.2010

VRTP вне форума Не в сети
Цитата:
Сообщение от petrd Посмотреть сообщение
Как-то так, биты конфигурации в MikroC в коде не пишутся, их надо установить самому в Project->Edit Project:
Вот по этому я и просил ПРОЕКТ,что бы его открыть,и вникнуть.Сам пытался создавать,но постоянно выходил фуфел.После чего(в очередной раз) плевался на Си,и забывал до нового желания освоить этот язык.Спасибо за отклик,но я остался на прежнем месте.Наверное не мое
  Ответить с цитированием
Старый 22.10.2010, 21:37   #609   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от Butik Посмотреть сообщение
.... Ну не знаю не знаю...Например... подобный алгоритм довольно часто применяется в различных схемах импульсно-фазового управления- например тиристорами или симисторами.. где скажем напряжение сети или какой либо иной задающий импульсный сигнал постоянной частоты и длительности подается на один из входов контроллера и там отслеживается прерывание по изменению уровня на этом входе, то есть происходит синхронизация с сетью.. а затем формируется импульс управления тиристором(если нужна задержка- то применяется прерывание от таймера..)Насколько я знаю подобный алгоритм применен в устройствах выпускаемых промышленно- например-wwwточкаshetale.ru/protectточкаhtm
Если это скажем синхронизация с сетью- то как Вы уже я надеюсь догадались- там изменение уровня происходит с частотой полупериода сети. А загонять каждые 10 миллисекунд контроллер в sleep .... не знаю.. лично я такого не совсем понимаю..Sleep режим хорош скажем для опроса клавиатуры какого нибудь домофона... когда его там нажимают раз в час или даже реже (если конечно к этому домофону не крестный ход в день святого Валентина))))
С одной стороны, этим одним из входов может быть не IOC, а INT, прерывание от которого не имеет подобного свойства. И даже если это IOC, то проблем с данным прерыванием в случае грамотного написания программы для работы с сетью здесь не возникнет. Сигнал сети можно считать детерминированным и переход через ноль происходит примерно каждые 10 мс. Хочу еще раз обратить внимание - проблема с IOC может возникнуть только в момент чтения порта, поэтому отловив IOC, последующие почти 10 мс порт можно читать, т.е. можно определить временной интервал справа-слева от ожидаемого перехода, в течении которого нельзя читать порт, тем самым избежать проблем с IOC. Опять же диммер штука не настолько критическая, поэтому пропуск какого-то перехода можно списать на сетевой мусор. А загонять в слип устройство работающее с сетью ради экономии энергии большого смысла нет. А вот если на вход поступают импульсы, время прихода и длительность которых заранее не известны (в т.ч. от кнопок), вот тогда можно получить проблемы с IOC.
А теперь главное - такая фигня с IOC присуща не всем контроллерам. В 1997 г. Microchip выпустила AN566 про IOC, где нет упоминании про Q2. В книге Ульриха (моя 2002 г) упоминается про Q2 только в контексте PIC16C71/73/74/773/774. А вот DS41190G на PIC12F629 (собственно про него мы и говорим) в котором это упоминается имеет редакцию 2010 г. И мне кажется такая штука с Q2 у всех PIC12 и обычных PIC16F. А вот у PIC18 такого уже нет, этот узел там сделан немного иначе и все равно для них в DS (PIC18F4550) пишут:
Цитата:
The interrupt-on-change feature is recommended for wake-up on key depression operation and operations where PORTB is only used for the interrupt-on-change feature. Polling of PORTB is not recommended while using the interrupt-on-change feature.
Наверное, стоит учитывать многолетние рекомендации производителя, он все же это не для себя пишет.
  Ответить с цитированием
Старый 22.10.2010, 21:44   #610   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от VRTP Посмотреть сообщение
Вот по этому я и просил ПРОЕКТ,что бы его открыть,и вникнуть.....
Проект для MikroC PRO. Распакуйте в корень диска С. В железе не глядел, если будут проблемы посмотрю.
Вложения
Тип файла: rar PIC12F675.rar (8.4 Кб, 68 просмотров)
  Ответить с цитированием
Старый 23.10.2010, 04:47   #611   
КваДраНутыЙ
 
Аватар для VRTP
 
Сообщений: 1,435
Регистрация: 29.05.2010

VRTP вне форума Не в сети
Цитата:
Сообщение от petrd Посмотреть сообщение
Проект для MikroC PRO. Распакуйте в корень диска С. В железе не глядел, если будут проблемы посмотрю.
Большое человеческое спасибо,буду вникать.
  Ответить с цитированием
Старый 23.10.2010, 14:30   #612   
Форумец
 
Аватар для Butik
 
Сообщений: 36
Регистрация: 19.10.2010
Возраст: 57

Butik вне форума Не в сети
Цитата:
Сообщение от petrd Посмотреть сообщение
С одной стороны, этим одним из входов может быть не IOC, а INT, прерывание от которого не имеет подобного свойства
Вообще то в классическом случае прерывание по INT происходит либо по переднему либо по заднему фронту синхронизирующего сигнала... То есть если это напряжение сети, то это частота 50Гц(20мсек), а часто требуется100гц(10мсек)...
Правда никто не запрещает сделать например так-

if(INTCON.INTF){
........................
INTCON.INTF = 0;
OPTION_REG.INTEDG =~ OPTION_REG.INTEDG;
}

..хотя я лично подобную конструкцию в железе не проверял...и будет ли она работать надежней IOCB?
  Ответить с цитированием
Старый 23.10.2010, 15:13   #613   
Форумец
 
Аватар для Butik
 
Сообщений: 36
Регистрация: 19.10.2010
Возраст: 57

Butik вне форума Не в сети
Господа.. я вот кстати смотрю тут многие любители конструирования различных термостатов и тому подобной техники..
А кто нибудь может поделиться ссылочкой на проект или схемку несложного термостата только не на DS18B20, а на термопаре?
  Ответить с цитированием
Старый 23.10.2010, 16:44   #614   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от Butik Посмотреть сообщение
Вообще то в классическом случае прерывание по INT происходит либо по переднему либо по заднему фронту синхронизирующего сигнала... То есть если это напряжение сети, то это частота 50Гц(20мсек), а часто требуется100гц(10мсек)...
Правда никто не запрещает сделать например так-

if(INTCON.INTF){
........................
INTCON.INTF = 0;
OPTION_REG.INTEDG =~ OPTION_REG.INTEDG;
}

..хотя я лично подобную конструкцию в железе не проверял...и будет ли она работать надежней IOCB?
Работает, см. пост #563.
P.S. Если вставляете код, используйте, пожалуйста, ТЕГИ.
  Ответить с цитированием
Старый 23.10.2010, 23:18   #615   
Registered User
 
Аватар для romchik77
 
Сообщений: 391
Регистрация: 16.11.2008

romchik77 вне форума Не в сети
Цитата:
Сообщение от Butik Посмотреть сообщение
Господа.. я вот кстати смотрю тут многие любители конструирования различных термостатов и тому подобной техники..
А кто нибудь может поделиться ссылочкой на проект или схемку несложного термостата только не на DS18B20, а на термопаре?
видел но на AVR , а чем вам не нравится цифровой
  Ответить с цитированием
Старый 24.10.2010, 11:38   #616   
Форумец
 
Аватар для Butik
 
Сообщений: 36
Регистрация: 19.10.2010
Возраст: 57

Butik вне форума Не в сети
Цитата:
Сообщение от romchik77 Посмотреть сообщение
а чем вам не нравится цифровой
А если нужно температуру регулировать от 100 до 400???
  Ответить с цитированием
Старый 30.10.2010, 11:55   #617   
Форумец
 
Аватар для Butik
 
Сообщений: 36
Регистрация: 19.10.2010
Возраст: 57

Butik вне форума Не в сети
Цитата:
Сообщение от petrd Посмотреть сообщение
Еще примерчик с ШИМ. Понятное дело, что яркость светодиода напряжением сильно не нарегулируешь. А вот при помощи ШИМ можно, а человеческий глаз свое дело сделает. Кнопкой на RA0 яркость светодиода можно увеличивать, а кнопкой на RA1 - уменьшать. Все достаточно просто. Схема ниже.
А чтоб яркостью управлять не кнопками а потенциометром? Так можно?
  Ответить с цитированием
Старый 30.10.2010, 12:10   #618   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от Butik Посмотреть сообщение
А чтоб яркостью управлять не кнопками а потенциометром? Так можно?
Можно. Для этого неплохо иметь МК с АЦП, но если АЦП нет, а очень хочется, то можно и на компараторе с таймером.
  Ответить с цитированием
Старый 09.11.2010, 18:43   #619   
Форумец
 
Сообщений: 7
Регистрация: 09.11.2010

DELTA-S вне форума Не в сети
На mikroPascale для PIC сдесь можно получить консультацию?. Или сдесь собрались те кто пишет на СИ?
  Ответить с цитированием
Старый 09.11.2010, 19:02   #620   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от DELTA-S Посмотреть сообщение
На mikroPascale для PIC сдесь можно получить консультацию?
Смотря что спрашивать будете.
  Ответить с цитированием
Старый 10.11.2010, 06:39   #621   
Форумец
 
Сообщений: 7
Регистрация: 09.11.2010

DELTA-S вне форума Не в сети
Тогда попытаюсь описать свою проблему.
Стандартная процедура цифрового термометра на DS1820.Я решил добавить в него режим термостата.То есть при достижении например температуры +35 гр. на ножке 20 порта D появляеться "1".Сделал проект в ПРОТЕУСЕ. На ножку подключил светодиодик.Теперь при достижении температуры больше чем +35 градусов начинает мигать светодиод. А должен гореть постоянно. Вот эта и есть моя проблема.Почему мигает а не горит постояно.Не могу понять в чем дело.Если температура меньше +35 то светодиод перестает мигать.

Листинг программы:

Procedure TERM(var m:Word); //Процедура счета Температуры

var i, j1, j2 : byte;
text : array[10] of char;
tmp_sign : byte;
t1,t2 :word;
begin
text := 'TEMP';
Lcd_Out(3, 1, text);
Lcd_Chr(3, 10, 223); // 'degree' character

Ow_Reset(PORTA, 4); // onewire reset signal
Ow_Write(PORTA, 4, $CC); // issue SKIP ROM command to DS1820
Ow_Write(PORTA, 4, $44); // issue CONVERT T command to DS1820
Delay_us(120);
i := Ow_Reset(PORTA, 4);
Ow_Write(PORTA,4, $CC); // issue SKIP ROM command to DS1820
Ow_Write(PORTA,4, $BE); // issue READ SCRATCHPAD command to DS1820
j1 := Ow_Read(PORTA, 4); // get result
j2 := Ow_Read(PORTA, 4); // get result

if j2 = $FF then
begin
tmp_sign := '-'; // temperature sign
j1 := j1 or $FF; // complement of two
j1 := j1 + $01;
end
else
tmp_sign := '+';

j2 := (j1 and $01)*5; // get decimal value
j1 := j1 shr 1; // get temp value


ByteToStr(j1, text); // whole number
Lcd_Chr(3, 5, tmp_sign);
Lcd_Chr(3, 6, text[1]);
Lcd_Chr(3, 7, text[2]);
Lcd_Chr(3, 8, '.');

if j1>35 then // ВОТ СДЕСЬ УСЛОВИЕ НА ВКЛЮЧЕНИЕ ВЕНТИЛЯТОРА
portd:=$02;

ByteToStr(j2, text); // decimal
Lcd_Chr(3, 9, text[2]);

Delay_ms(500);

end;

Буду рад если поможете с этой проблемой
  Ответить с цитированием
Старый 10.11.2010, 06:58   #622   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от DELTA-S Посмотреть сообщение
Тогда попытаюсь описать свою проблему.
Стандартная процедура цифрового термометра на DS1820.Я решил добавить в него режим термостата.То есть при достижении например температуры +35 гр. на ножке 20 порта D появляеться "1".Сделал проект в ПРОТЕУСЕ. На ножку подключил светодиодик.Теперь при достижении температуры больше чем +35 градусов начинает мигать светодиод. А должен гореть постоянно. Вот эта и есть моя проблема.Почему мигает а не горит постояно.Не могу понять в чем дело.Если температура меньше +35 то светодиод перестает мигать.
Какой контроллер? Приведенного кода мало, покажите всю программу.
  Ответить с цитированием
Старый 10.11.2010, 07:09   #623   
Форумец
 
Сообщений: 7
Регистрация: 09.11.2010

DELTA-S вне форума Не в сети
Контроллер PIC16F877
Остальная часть программы тут не причем.На порт D выводиться сигнал только из процедуры ТЕРМОМЕТРА ничего ольше к порту D необращаеться.Единствено привожу конфигурацию порта D может сдесь неправильно сконфигурировал.

ADCON1 := $01; //Готовим Порт А как аналоговый с внешней опоркой
TRISA := $FF; //Порт А назначаем как входной
PORTA := 0; //Очищаем его
TRISB := $00; //Порт Б назначаем как выходной
PORTB := 0; //чистим его
TRISC := $F0; //Порт С назначаем как выходной C0
PORTC := 0; //чистим его
TRISE := $07; //конфигурирум порт E и порт D
PORTE := 0; //Очищаем его
TRISD := $00; //Порт D назначаем как
PORTD := 0;
INTCON := 0; //сброс всех прерываний
  Ответить с цитированием
Старый 10.11.2010, 07:34   #624   
Форумец
 
Сообщений: 7
Регистрация: 09.11.2010

DELTA-S вне форума Не в сети
PETRD спасибо.

Вы действительно были правы.Была еще одна команда обращения к порту D в основном теле программы, я за неё забыл.Посколько веду отладку программы по процедурам.Проблема устранена.Теперь все работает как положенно.

Теперь осталось написать условие на выключение.
  Ответить с цитированием
Старый 10.11.2010, 16:49   #625   
Форумец
 
Сообщений: 7
Регистрация: 09.11.2010

DELTA-S вне форума Не в сети
Вот еще одна проблема.
Есть строковая константа название месяцев.В зависимости от нажатия кнопок выводиться текстовая константа которая соответствует порядковомуи номеру "J"
На дисплей выводится буква "F" независимо от значения "J"
Еслия вместо instance[j] напишу instance[2] то все выводиться правильно и на дисплее пишется "МАР" Почему программа не воспринимает значение "J" не могу понять, может кто подскажет.


const //объявление констант

instance: array [0..11] of string [4] =('ЯНВ','ФЕВ','МАР','АПР','МАЙ','ИЮН','ИЮЛ','АВГ', 'СЕН','ОКТ','НОЯ','ДЕК');



Procedure MONTH;
var J, : byte; //Объявление переменных в процедуре
str: string[4];

begin
J:=0;

if (Button(PORTC,6,1,0))then //Проверяем кнопку ножка RA5 Если нажата,
BEGIN Sound_Play(1000, 100); // Выводим звук
j :=j-1; //
end;

if (Button(PORTC,7,1,0))then //Проверяем кнопку ножка RA4 Если нажата,
BEGIN Sound_Play(1000, 100); // Выводим звук
j :=j+1; //
end;

Lcd_out(2,6,instance[j]);

end;
  Ответить с цитированием
Старый 10.11.2010, 19:58   #626   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от DELTA-S Посмотреть сообщение
Вот еще одна проблема..........
Всем кто в таком виде выкладывает код и Вам тоже говорю - отформатируйте свой код тегами! И аккуратнее с копипаст, а то кнопки одни, комментарии к ним другие, где правда-то? А вот с этим:
Код:
var J, : byte;
код и компилироваться не будет. Думаю Вы меня поняли.

Далее:
1. А есть разница между "j' и "J" ?
2. А кнопки нажимаются? Звук есть?
3. А может это - "область видимости и время жизни переменной"? В Си, например, на этот случай может пригодиться волшебное слово static.
  Ответить с цитированием
Старый 11.11.2010, 07:34   #627   
Форумец
 
Сообщений: 7
Регистрация: 09.11.2010

DELTA-S вне форума Не в сети
[QUOTE='petrd;13213550']
отформатируйте свой код тегами! И аккуратнее с копипаст, а то кнопки одни, комментарии к ним другие, где правда-то?

Я не профи поэтому не понимаю ваш лексикон.Что такое теги.И скопирарованием кусков кода у меня тоже все в порядке.
Не понял вас насчет кнопок. Кнопки разные!!!. И подключены к разным ножкам порта и коментарии соответственно разные. Откуда вы взяли что кнопки одни и тежи.
1. Разницы между "j' и "J" никакой. Я пишу код малыми буквами а микропаскаль иногда сам их переименовыевает в заглавные.
2.Кнопки нажамаються и звук есть.
3. var J, : byte; - этот код компилироваться не будет.Сдесь была еще обьявлена одна переменная я ее удалил а запятую забыл, что бы не загружать вас лишними переменными.Так получилось потому что код копировал из программы а на форуме уже его редактировал.
4. В микропаскале я такой команды не знаю - static

Я так и не понял где моя ощибка в программе- если не брать ошибки в синтаксисе в.Ведь компилятор никакой ошибки не выдает.
  Ответить с цитированием
Старый 11.11.2010, 10:07   #628   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от DELTA-S Посмотреть сообщение
Я не профи поэтому не понимаю ваш лексикон.Что такое теги.
Это не про профи, это про культуру и уважение, здесь - http://bvf.ru/forum/misc.php?do=bbcode. Когда пишете сообщение для удобства пользования тегами сверху есть быстрые кнопки.

Цитата:
Сообщение от DELTA-S Посмотреть сообщение
И скопирарованием кусков кода у меня тоже все в порядке.
А вот это:
Код:
if (Button(PORTC,6,1,0))then  //Проверяем кнопку ножка RA5
....
if (Button(PORTC,7,1,0))then //Проверяем кнопку ножка RA4
Так про какую ножку все-таки речь RC6 или RA5? RC7 или RA4?

Цитата:
Сообщение от DELTA-S Посмотреть сообщение
Я так и не понял где моя ошибка в программе.....
Исходя из того, что j и J одна и таже переменная и объявлена она только в одном месте - в процедуре MONTH, то по идее эта переменная может принимать только 3 значения - 0 (не нажато), 255 (нажата RC6), 1(нажата RC7). Попробуйте сделать ее глобальной.
  Ответить с цитированием
Старый 11.11.2010, 12:50   #629   
Форумец
 
Сообщений: 7
Регистрация: 09.11.2010

DELTA-S вне форума Не в сети
Да не думал что кто то будет обращать на коментированный текст.
Просил помощи в решении определенной задачи а мне тут указывают на то что написано в коментарии.
Прощу прощения что побеспокоил и тихо ухожу из этого форума.
  Ответить с цитированием
Старый 11.11.2010, 13:06   #630   
Форумец
 
Сообщений: 1,525
Регистрация: 19.02.2009
Возраст: 52
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от DELTA-S Посмотреть сообщение
Да не думал что кто то будет обращать на коментированный текст.
Просил помощи в решении определенной задачи а мне тут указывают на то что написано в коментарии.
Прощу прощения что побеспокоил и тихо ухожу из этого форума.
Нет слов.
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind