ariatas

PIC16F876A для вендингового автомата

13 сообщений в этой теме

ariatas    0

Подскажите  как можно запрограммировать PIC16F876A для модуля фиксации пролета предмета в вендинговом автомате:) Мне нужно знать как снять напряжение с аналогового порта, определить дельту между двумя измерениями, если оно превышает какое-то значение, то выставить напряжение на цифровой ножке микроконтроллера. Желательно бы на С для MPLab
 

Поделиться сообщением


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

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
Alex    484

А в чём конкретно трудности ? 
Как работать с АЦП - ищем в даташите на свой МК. Ну а сравнить - обычное условие (в Си - "if").
 

PIC16F876A - жирно будет для такой задачи. И по ресурсам, и по кол-ву ног.
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Vovka    23

Поддерживаю: например, PIC10F220 для этой задачи в самый раз! У него всего лишь 6 ног и встроенный генератор ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
солар    116
13 часа назад, ariatas сказал:

для модуля фиксации пролета предмета

Поставьте концевик. Будет считать пролетевший предмет. И никаких АЦП. Делов-то.

13 часа назад, Aleх сказал:

жирно будет для такой задачи

Надо полагать, задание на курсовой именно под такой мк.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ariatas    0
3 часа назад, солар сказал:

Поставьте концевик. Будет считать пролетевший предмет. И никаких АЦП. Делов-то.

У меня используются светодиоды и фотодиоды совместно с отражающей поверхностью. Устройство выглядит как у большинства снековых автоматов.

Просто я сам не владею C и у меня даже нет возможности установить необходимое ПО, поэтому и прошу помощи в достаточно простом вопросе для многих на этом форуме
И да, все условия, которые были выше нужно соблюсти:(

Скрытый текст


591f166b63a09_.thumb.jpg.09a13dc97eaa955f4c6543578401a052.jpg

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
солар    116

Хм, приятно удивлён.

Сузим задачу: если верно понял, то вам нужно измерить время, в течении которого нечто пролетает мимо свето/фотодиода. Так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ariatas    0

Не совсем, мне нужно измерить падение напряжение в момент пролета какого-то предмета. Т.е. подается какое-то напряжение, условно 5В, и в момент, когда предмет пролетает мимо диодов, происходит падение напряжения до 4-4,5В (в зависимости от того какая дельта у нас задана). 
Но самое главное, мне нужно сконфигурировать АЦП, запустить АЦП на измерение и остановить измерение после выполнения некоторого условия (изменение уровня)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
солар    116
#include <pic.h> 
#include "delay.h"    // временные задержки

void main(void)
{
// запрещаем все прерывания
GIE= 0;
// настройка портов
PORTA = 0b00000000;
TRISA = 0b00000001;  // RA0 - на вход

PORTC= 0b00000000;
TRISC= 0b00000000;
 
// настройка АЦП
// ADCS2:ADCS1:ADCS0 = 001
// CHS2:CHS1:CHS0 = 000 - канал 0 - AN0
// ADFM = 1 - левое выравнивание
// PCFG3:PCFG0 = 0001 - все входы аналоговые, опорное от Vcc
ADCON0 = 0b01000000;
ADCON1 = 0b00000000;
ADON = 1;      // Включить модуль АЦП - ADCON0[0]

while(1)
{
DelayUs(50);        // ждем согласно требования перед очередным преобразованием
ADGO = 1;            // запуск преобразования АЦП
while (ADGO == 1);    // ожидание завершения преобразования
// считываем АЦП и выводим на семисегментники
PORTC = ADRESH;
}
}

Условие останова не прописано, бо неизвестно.

wending.JPG

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Vovka    23
23 минуты назад, солар сказал:

ждем согласно требования перед очередным преобразованием

Возможно не совсем верно: может тут нужен цикл по ожиданию какого-то события

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IMXO    1 056
9 часов назад, ariatas сказал:

Не совсем, мне нужно измерить падение напряжение в момент пролета какого-то предмета. Т.е. подается какое-то напряжение, условно 5В, и в момент, когда предмет пролетает мимо диодов, происходит падение напряжения до 4-4,5В (в зависимости от того какая дельта у нас задана). 
Но самое главное, мне нужно сконфигурировать АЦП, запустить АЦП на измерение и остановить измерение после выполнения некоторого условия (изменение уровня)

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
солар    116
24 минуты назад, IMXO сказал:

АЦП тут нах не нужен.

+100500. Достаточно концевика.

 

37 минут назад, Vovka сказал:

может тут нужен цикл по ожиданию какого-то события

Читаем даташит и убеждаемся в том, что в программе прописано верно.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Vovka    23
8 часов назад, солар сказал:

Читаем даташит и убеждаемся в том, что в программе прописано верно.

При чем здесь даташит? Мое предположение касалось не работы с АЦП, а логики работы железки, которая до конца не ясна...

Поделиться сообщением


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас