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

Помогите Составить Программку


Yuriy86

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

Я думаю что для вас как опытных программистов это не составит никакого труда и вы это сделать за 5 мин. А для меня это пока сложно ...

Есть у меня в наличии PIC16f84A. Хочу чтобы вы помогли мне сделать следующую вещь, а именно написать программу.

Даже незнаю как правильно рассказать что я хочу.

К процессору подключить (RB0-RB5) 6 ключей которыми я имею управлять. Пока не знаю как именно должен управлять, поэтому нужно чтобы была возможность подправить порядок включения.

Вот как пример:

Начало

Команда 1: 01100100

Команда 2: 11101100

Команда 3: 00111000

Команда 4: 11111100

Команда 5: 01101100

Команда 6: 11101100

Команда 7: 00111000

Команда 8: 11110100

Команда 9: 01100100

Команда 10: 11101100

Команда 11: 10111000

Команда 12: 10111100

Переход на начало

Конец

Переход между командами осуществлялся при подаче импульса на (RA0)

post-138957-0-17912700-1303663865_thumb.jpg

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

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

  • Ответов 61
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

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

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

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

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

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

Заметьте сколько раз в тексте встречается слово "хочу" :D

Молодых и талантливых чрезвычайно много. Целеустремлённых и готовых довести дело до конца — гораздо меньше.

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

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

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

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

Где-то примерно так. Но я не написал инициализацию, поскольку PIC-и не использую. Возможно активные пользователи PIC-ов найдут огрехи в этой программке связанные с особенностями микроконтроллера, и поправят.

#define IN_PIN   RA0

unsigned char acmd[12] = { // массив наших команд
  0b01100100, 0b11101100, 0b00111000,  0b11111100,
  0b01101100,  0b11101100,  0b00111000,  0b11110100,
  0b01100100, 0b11101100, 0b10111000, 0b10111100 };
unsigned char in_old, in_new, ct=0;

void main(void) {
  in_new=IN_PIN;
  in_old=in_new;
  RB = acmd[ct]; // устанавливаем начальное состояние ключей, записываем в порт RB

  while(1) {
     	in_new=IN_PIN;
     	if  ( in_new != in_old ) { // произошло изменение состояния на входе
           	if ( in_new == 0 ) { // пойман спадающий фронт
            		ct++;
            		if ( ct>11 ) ct=0; 
            		RB = acmd[ct]; // устанавливаем очередную команду
            		delay(50MS); // выполняем подавление дребезга
           	}
           	in_old= in_new;
     	}   
  }
}

Пока ты жив, надежда есть.

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

        if  ( in_new != in_old ) { // произошло изменение состояния на входе
               if ( in_new == 0 ) { // пойман спадающий фронт

Проще так сделать

if  ( !in_new && in_old ){
...
...
}

Но суть, естественно, от этого не меняется :)

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

1000000000308A000428000084011F30830563004B

:02400E00F33F7E

:00000001FF

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

Если вы работаенте в протеусе то покажите в своиствах МК этот фаил, потом запустите симуляцию. А компилировать эту запись у вас не получится, потому-что она уже скомпилирована)))

Не цитируите полностью предыдущее сообщение!!!

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

Компилирою етот код

--------------------------------------------------

#define IN_PIN RA0

unsigned char acmd[12] = { // массив наших команд

0b01100100, 0b11101100, 0b00111000, 0b11111100,

0b01101100, 0b11101100, 0b00111000, 0b11110100,

0b01100100, 0b11101100, 0b10111000, 0b10111100 };

unsigned char in_old, in_new, ct=0;

void main(void) {

in_new=IN_PIN;

in_old=in_new;

RB = acmd[ct]; // устанавливаем начальное состояние ключей, записываем в порт RB

while(1) {

in_new=IN_PIN;

if ( in_new != in_old ) { // произошло изменение состояния на входе

if ( in_new == 0 ) { // пойман спадающий фронт

ct++;

if ( ct>11 ) ct=0;

RB = acmd[ct]; // устанавливаем очередную команду

delay(50MS); // выполняем подавление дребезга

}

in_old= in_new;

}

}

}

------------------------------------------------------

в результате имею от

1000000000308A000428000084011F30830563004B

:02400E00F33F7E

:00000001FF

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

Ну если получаете успешное завершение компиляции, то в коде явных ошибок нет, хотя логика работы неправильная. Причем тут подавление дребезга если у вас меандр идет на РА0.

Не цитируите полностью предыдущее сообщение!!!

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

В коде есть ошибки, для компилятора hi-tech я бы переделал примерно так на глаз

#include <htc.h>
#define IN_PIN   RA0
#define _XTAL_FREQ 4000000 

__CONFIG (LVPDIS & WDTDIS & MCLREN & UNPROTECT & HS);

const unsigned char acmd[12] = { // массив наших команд
  0b01100100, 0b11101100, 0b00111000,  0b11111100,
  0b01101100,  0b11101100,  0b00111000,  0b11110100,
  0b01100100, 0b11101100, 0b10111000, 0b10111100 };
unsigned char in_old, in_new, ct=0;

void main(void) {
  TRISA = 0xFF;
  TRISB = 0x00;

  in_new=IN_PIN;
  in_old=in_new;
  PORTB = acmd[ct]; // устанавливаем начальное состояние ключей, записываем в порт RB

  while(1) {
       in_new=IN_PIN;
       if  ( in_new != in_old ) { // произошло изменение состояния на входе
               if ( in_new == 0 ) { // пойман спадающий фронт
                       ct++;
                       if ( ct>11 ) ct=0; 
                       PORTB = acmd[ct]; // устанавливаем очередную команду
                       __delay_ms(50); // выполняем подавление дребезга
               }
               in_old= in_new;
       }   
  }
}

В сам алгоритм я не вникал, а только подправил явные ошибки в отношение компилятора hi-tech. Так же обычно на порту А висит аналоговая периферия, и ее надо отключать специальной командой, но в данном случае (PIC16f84A) ее вроде нету, даташит мне лень качать :)

Также предполагается, что используется кварц 4 МГц (подправите на нужный вам)

PS. Правильнее было бы импульсы входные ловить счетчиком, и по прерыванию совершать нужное действие.

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

Компилятор просит указать для какого микроконтроллера компилим.

Требуется в самое начало файла вставить директиву что-то вроде

#DEVICE PIC16f84A

Пока ты жив, надежда есть.

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

Так как здесь мало кто пользовался данным компилятором, подсказки будут вам медвежьей услугои, переидите на HI-Tech pic или MikroC.

Не цитируите полностью предыдущее сообщение!!!

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

судя по всему проще будет отдать готовый хекс, мой сишный исходник проигнорировали вообще :ph34r:

В прикрепленном архиве лежит протеусовский файл и хекс к нему, все настроено и работает, частоту следования импульсов измените на нужную, но учтите, что у вас дребезг на 50 мс настроен.

зы. программа рассчитана на работу с кварцем 4 МГц, для RC цепочки нужно изменить конфигурацию.

ззы. еще заметил ошибку

Команда 1: 01100100

означает что в нуле будут 1 и 0 биты порта, а не 6 и 7

Если хотите все-таки пользоваться CSS компилятором, то вот очень хорошая книжка

led_blink.rar

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

' timestamp='1303731264' post='899222']

судя по всему проще будет отдать готовый хекс, мой сишный исходник проигнорировали вообще :ph34r:

В прикрепленном архиве лежит протеусовский файл и хекс к нему, все настроено и работает, частоту следования импульсов измените на нужную, но учтите, что у вас дребезг на 50 мс настроен.

зы. программа рассчитана на работу с кварцем 4 МГц, для RC цепочки нужно изменить конфигурацию.

ззы. еще заметил ошибку

Команда 1: 01100100

означает что в нуле будут 1 и 0 биты порта, а не 6 и 7

Если хотите все-таки пользоваться CSS компилятором, то вот очень хорошая книжка

О, очень благодарен. Работает)

Здесь только. Hex, я уже не сможет сделать изменения?

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

И у меня заработало

# include <pic.h>
#include "delay.h"
#define IN_PIN   RA0
__CONFIG ( WDTDIS &  UNPROTECT & RC);


unsigned char acmd[12] = { // массив наших команд
  0b01100100, 0b11101100, 0b00111000,  0b11111100,
  0b01101100,  0b11101100,  0b00111000,  0b11110100,
  0b01100100, 0b11101100, 0b10111000, 0b10111100 };
unsigned char in_old, in_new, ct=0;

void main(void) {
TRISA = 1;
TRISB = 0;
  in_new=IN_PIN;
  in_old=in_new;
  PORTB = acmd[ct]; // устанавливаем начальное состояние ключей, записываем в порт RB

  while(1) {in_new=IN_PIN;

       if  ( in_new != in_old ) { // произошло изменение состояния на входе
               if ( in_new == 0 ) { // пойман спадающий фронт
                       ct++;
                       if ( ct>11 ) {ct=0;} 
                     PORTB = acmd[ct]; // устанавливаем очередную команду
                       DelayMs(50); // выполняем подавление дребезга
               }
               in_old= in_new;
       }   
  }
}

означает что в нуле будут 1 и 0 биты порта, а не 6 и 7
только не знаю для чего эти команды, потому ничего не исправлял))

Не цитируите полностью предыдущее сообщение!!!

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

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

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

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

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

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

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

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

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

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

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

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