Гелиостат на pic16f877 + много, много всякой хрени на 1 мк. - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: ivan_fd 
Форум Picbasic.ru » Программирование МК » PicBasicPro » Гелиостат на pic16f877 + много, много всякой хрени на 1 мк. (затруднение с командой pot)
Гелиостат на pic16f877 + много, много всякой хрени на 1 мк.
chiper Дата: Ср, 14.07.2010, 03:00  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 108
Репутация: 4   ±
Замечания:   ±
На сайте с 14.07.2010

Статус: Offline

Здрасте! Всем огромное спасибо за помощь в реализации моего прошлого проекта для "Шаг в будущее" =) получил 2 место + направели в Лондон!

Теперь что бы не терять время решил начать новую научную работу....

новая научка сочитает в себе pic16f877 + LCD + 2 драйвера для двигателей + несколько комутируемых реле....

вот счас пишу программку по техоньку и попутно развожу дорожки на печатной плате да бы не получилось так как в прошлый раз))) (запара со счётом импульсов)

Счас вот я сталкнулся на данном этапе с такой проблемой:

существует в PBP такая команда как pot - она представляет собой некое подобие АЦП. при помощи этой команды я хочу сравнивать сопротивления двух фоторезиюков, и в зависимости от разницы сопротивлений вращать двигатель в разные стороны (менять палярность через драйвер).

прошу проверить правельно ли я замутил?)

драйвер коммутируется с портов c4 и с5

резистивные датчики (как положено через конденсаторы) подвешены к выводам a1 и a2 .

Code
  
b0 var byte
b1 var byte
c0 var byte
start:
pot 1,255,b0
pot 2,255,b1
if b0 = b1 then start
if b0 > b1 then mnogo
if b0 < b1 then malo
mnogo:
c0 = b0 - b1
if c0 > 10 then left
goto start

left:  
portc.4 = 1
pause 30
portc.4 = 0
goto start:

malo:
c0 = b1 - b0
if c0 > 10 then right
goto start

right:
portc.5 = 1
pause 30
portc.5 = 0
goto start
return

Сразу возникает вопрос почему я не использую для этой цели АЦП - отвечаю.... в pic16f877 4 канала АЦП, а таких таких гелиостатов мне надо 2 - следовательно надо 4 канала АЦП, но кроме этого вскоре мне понадобится ещё один канал для вольтметра . по этому надо реализовывать оба гелиостата только через pot, а вольтметр на АЦП.

сомнение в программе у меня вызывает только эти 2 строчки

Code
pot 1,255,b0
pot 2,255,b1

действительно-ли pot1 - это a1, а pot2 - это a2 ???

Заранее спасибо

Добавлено (14.07.2010, 03.00.07)
---------------------------------------------
Всё понял... pot только с портиками B работает =)

Теперь ещё вопрос возник, кто то видел реализацию этого - http://forum.mirmasterov.com/viewtopic.php?f=58&t=524 на PBP ???

покажите пример пожалуйста ! очень надо. мне достаточно только измерительной части этой программы, данные всёравно я буду на LCD выводить )


Как бы ты хорошо не паял, твой девайс на микроконтроллере без прошивки будет просто куском железа.
ЯНДЕКС Дата: 14.07.2010
ADMIN Дата: Ср, 14.07.2010, 04:39  |                                                                                                                Сообщение # 2
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Добрый день!
Во-первых, очень хотелось бы, чтобы вы поделились своим проектом, написав хотя бы статью, в раздел Статьи на сайте. Раз уж вам здесь помогли, то, может быть, стоит порадовать форумчан своим творением. Не прошу выкладывать код, считая, что это, возможно и коммерческий проект, но идею и результат с фотографиями, по-моему, стоит выставить на обозрение. Вам решать. Во-вторых, PIC16F877 имеет 8-канальный АЦП.

В третьих, команда POT работает с любым портом:

pot porta.4, 255, b0
или

pot portc.3, 255, b1

или как то еще. Главное сконфигурировать порт на вход, сделать его цифровым вводом.

terrarus Дата: Ср, 14.07.2010, 11:41  |                                                                                                                Сообщение # 3
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 542
Репутация: 16   ±
Замечания:   ±
На сайте с 21.08.2008

Статус: Offline

Сомневаюсь я однако... научный работник, а так не дружит с русским языком:
Quote (chiper)
...Здрасте...направели...новая научка сочитает...комутируемых реле.... счас....по техоньку ....да бы не получилось....запара...фоторезиюков...правельно ли я замутил?)...
драйвер коммутируется с портов c4 и с5...всёравно.

Аккуратней ,милейший, нужно с русским ... не достоин он такого.


Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
Сообщение отредактировал terrarus - Ср, 14.07.2010, 16:58
chiper Дата: Чт, 15.07.2010, 01:46  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 108
Репутация: 4   ±
Замечания:   ±
На сайте с 14.07.2010

Статус: Offline

1 По поводу проекта - обязательно выложу когда появится свободное время! Спасибо за подсказку по поводу pot !

2 я пока ещё не научный сотрудник)) а абитуриент 2011 =)

3 с русским языком у меня действительно проблемы . Математика была как то ближе к сердцу в начальных классах smile вот теперь результат на лицо.

Добавлено (14.07.2010, 18.27.38)
---------------------------------------------
http://www.picbasic.ru/publ....-1-0-66

можете ознакомиться с статьёй =)

Добавлено (15.07.2010, 01.46.31)
---------------------------------------------
Подскажите как заставить обе эти подпрограммы работать одновременно???

Code
start:

pot 5,255,b0
pot 4,255,b1
if b0 = b1 then start
if b0 > b1 then mnogo
if b0 < b1 then malo
mnogo:  
c0 = b0 - b1  
if c0 > 30 then left  
if c0 < 30 then  portc.4 = 0 : portc.5 = 0
goto start
left:   
portc.4 = 1  
portc.5 = 0  
goto start  
malo:  
c0 = b1 - b0  
if c0 > 30 then right  
if c0 < 30 then portc.4 = 0 : portc.5 = 0
goto start
right:
portc.5 = 1  
portc.4 = 0
goto start

Code
start2:
pot 7,255,b00
pot 6,255,b11
if b00 = b11 then start2
if b00 > b11 then mnogo2
if b00 < b11 then malo2
mnogo2:  
c00 = b00 - b11  
if c00 > 30 then left2  
if c00 < 30 then  portc.6 = 0 : portc.7 = 0
goto start2
left2:   
portc.6 = 1  
portc.7 = 0  
goto start2
malo2:  
c00 = b11 - b00  
if c00 > 30 then right2  
if c00 < 30 then portc.6 = 0 : portc.7 = 0
   
right2:
portc.7 = 1  
portc.6 = 0

goto start2

по отдельности они работают идеально =) а вот немогу докумекать как сделать что бы они работали вместе.... в Delphi как то лучще соображаются подобные вещи smile


Как бы ты хорошо не паял, твой девайс на микроконтроллере без прошивки будет просто куском железа.
holyuser Дата: Чт, 15.07.2010, 01:58  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 233
Репутация: 5   ±
Замечания:   ±
На сайте с 12.12.2007

Статус: Offline

Quote (chiper)
с русским языком у меня действительно проблемы

smile

"Да будь я
и негром преклонных годов
и то,
без унынья и лени,
я русский бы выучил
только за то,
что им
разговаривал Ленин."

© Владимир Владимирович Маяковский (7 (19) июля 1893 — 14 апреля 1930) — русский советский поэт

ADMIN Дата: Чт, 15.07.2010, 02:17  |                                                                                                                Сообщение # 6
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

За статью - молодец! Быть может, какой-то маленький вундеркинд наткнется, додумает малость и сотворит нечто необычное, типа синхрофазотрона или чего-нибудь в этом роде. good
Ладно, что это -
Quote
как заставить обе эти подпрограммы работать одновременно???
?
Это подпрограммы одного МК или двух? Что должна делать программа,устройство. Напиши хотя бы общее ТЗ или комментарии к подпрограммам.
chiper Дата: Чт, 15.07.2010, 11:25  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 108
Репутация: 4   ±
Замечания:   ±
На сайте с 14.07.2010

Статус: Offline

Спасибо smile

Да, это программы одного МК pic16f877

Кака я уже писал программа для моего нового проекта, именно эти 2 участка программы для управления 2х электродвигателей через 2 драйвера. На выводах сканируемых командами pot у меня висят 4 фоторезистора.

В суме 2х подпрограмм, устройство будет следить за ориентацией солнца в 2х плоскостях. а двигателями будет вращаться платформа на которой закреплены 4 фоторезистора в след за солнцем.

каждый из этих 2х участков программы управляет 1 двигателем через 1 драйвер.

вот мне надо что бы эти программы работали одновременно в одном микроконтроллере НЕЗАВВИСЯ от друг друга.

просто до этого ни разу не реализовал подобного )) а тут у меня в добавок много goto ...

подскажите если не трудно как их запустить в одном контролере)

Когда закончу с меня как паложено статья )))


Как бы ты хорошо не паял, твой девайс на микроконтроллере без прошивки будет просто куском железа.
Сообщение отредактировал chiper - Чт, 15.07.2010, 11:33
holyuser Дата: Чт, 15.07.2010, 14:29  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 233
Репутация: 5   ±
Замечания:   ±
На сайте с 12.12.2007

Статус: Offline

Quote (chiper)
подскажите если не трудно как их запустить в одном контролере

Примерно так:
Code
...
task VAR BIT
...
task = 0
...
begin:
task = ~ task
IF task = 0 THEN

pot 5,255,b0  
pot 4,255,b1  
if b0 = b1 then begin  
if b0 > b1 then mnogo  
if b0 < b1 then malo  
mnogo:   
c0 = b0 - b1   
if c0 > 30 then left   
if c0 < 30 then  portc.4 = 0 : portc.5 = 0  
goto begin  
left:    
portc.4 = 1   
portc.5 = 0   
goto begin   
malo:   
c0 = b1 - b0   
if c0 > 30 then right   
if c0 < 30 then portc.4 = 0 : portc.5 = 0  
goto begin  
right:  
portc.5 = 1   
portc.4 = 0  

ELSE

pot 7,255,b00  
pot 6,255,b11  
if b00 = b11 then begin  
if b00 > b11 then mnogo2  
if b00 < b11 then malo2  
mnogo2:   
c00 = b00 - b11   
if c00 > 30 then left2   
if c00 < 30 then  portc.6 = 0 : portc.7 = 0  
goto begin  
left2:    
portc.6 = 1   
portc.7 = 0   
goto begin  
malo2:   
c00 = b11 - b00   
if c00 > 30 then right2   
if c00 < 30 then portc.6 = 0 : portc.7 = 0  
goto begin   
right2:  
portc.7 = 1   
portc.6 = 0  

ENDIF

GOTO begin
END
chiper Дата: Чт, 15.07.2010, 15:22  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 108
Репутация: 4   ±
Замечания:   ±
На сайте с 14.07.2010

Статус: Offline

Огромнейшый человеческий спасибос!!!

работает идеально!
даже лучше чем хотелось бы!

проэмулировал HEX в ISIS работает без сучка и задоринки!

практически этот участок программы будет базовым в моём проекте)

Добавлено (15.07.2010, 15.22.15)
---------------------------------------------
Огромное спасибо! РАБОТАЕТ!

через 20 часов даже репутацию подыму wink


Как бы ты хорошо не паял, твой девайс на микроконтроллере без прошивки будет просто куском железа.
Форум Picbasic.ru » Программирование МК » PicBasicPro » Гелиостат на pic16f877 + много, много всякой хрени на 1 мк. (затруднение с командой pot)
Страница 1 из 11
Поиск: