Отговори на тема  [ 35 мнения ]  Отиди на страница 1, 2, 3  Следваща
Поредната Глупава Идея :) 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Пет Май 18, 2012 9:14 pm
Мнения: 64
Мнение Поредната Глупава Идея :)
Здравейте , пак се допитвам до вас с надеждата да одарите едно рамо :)
Започнах да си правя един проект за умна стая в която да контролирам разни работи през компа и от тук идват леките ми ядове..
Снабдих се със Промишлен контролер с който да си играя а именно ето този .
Изображение
Снимах го до Кодовата брава за която ми помогнахте доста със сорса :)..та и нея контролирам с този контролер. както се вижда на снимката
си има 16 изходи и входове.
Направих си и моя програма с която да го управлявам това нещо посредством ком порта: с помоща на доста четене ..накратко това е програмата.Изображение
Та както се вижда опитвам се да пускам разни работи през компа .Това успях да го направя и тествам.. Работата е сега ,че искам да направя обратна връзка на това което виждате примерно вкл. ми е плейсташана и аз да получавам информация от самият обект към виртуалната ми среда. Пробвах с микроконтролера и Входовете директно през изхода пуснах една обратна връзка и се получава работата .. но аз не искам да е така искам да се опитам да го направя с микроконтролер.
Измислих ето това:
Изображение
Бутоните заместват примерно релета или някакъв друг вид контакт нарисувал съм ги така просто с цел експеримента.
Та схемата ще я направя нямам проблем с това комуникацията ми ще е по Rs232 или ще увелича броят терминали като сложа Rs485(незнам все още)...
С 2 думи на този виртуален терминал искам да ми пише инфото от съответният бутон примерно.
00000000 (8 нули ) когато не са натиснати (важно е да чета и 0 лите като състояние)
10000000 първи бутон натиснат...
101 ...... първи и 3 ти бутон натиснат..
Надявам се да ме разбирате..
Искам този микроконтролер само да праща информация. а не и да обработва.. за това изход RC6/Tx съм го вързал към RX на терминала..
проца ще го движа на 20мгх.
с хиляди търсения из гоогле стигнах само до това:
Код:
#include <16F877A.h>
#fuses HS, NOWDT, NOPUT, NODEBUG, NOLVP, NOBROWNOUT, NOCPD, NOPROTECT, NOWRT
#use delay(clock = 20000000)

#use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7, ERRORS)

Знам ,че трябва да опиша в програмата кой изходи на проца ще използвам като входове..
и че да съставя 2 функции според зависи състоянието на бутона...,но малко съм бос даже доста в програмирането
Повярвайте ми изровил съм страшно много информация ..и не можах да намеря нещо според моя интерес.
И ви моля да няма коментари от сорта глупав си и прочие.. ако можете да ми помогнете или да ми давате насоки аз ще пробвам ще мъча но да сътвориме едно просто софтче :)

_________________
Инж.Тодор Димитров  гр./Ямбол / 24г.
Последен Проект...http://www.vbox7.com/play:c1e9997504


Сря Дек 12, 2012 8:32 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 01, 2009 4:01 pm
Мнения: 1438
Мнение Re: Поредната Глупава Идея :)
Не са две функции а две команди. На определено време взимаш PORTA и го слагаш в ТХREG.
Код:
MOVF   PORTA, W
MOVWF  TXREG


Сря Дек 12, 2012 10:31 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: Поредната Глупава Идея :)
Не казвам че не ти е правилна схемата ама по удачно би било : 1. бутоните да са на порт Б и 2. бутоните да са към маса а резисторите към +5V(дето му се вика още пулъп). Всъщност такива пулъпи има и вградени на порт Б.
УАРТ-а по принцип след инициализация автоматично взема контрол върху пиновете (RC6 и RC7). Този процесор няма аналогови функции там, така че не ти трябва никаква конфигурация на порт С. В твоя случай трябва да настроиш единствено регистрите TXSTA и BAUDCON. След което, както колегата каза, четеш порта (инвертираш го ако искаш при натиснат бутон да ти дава 1 ако си ги вързал както казвам) и го записваш в TXREG. Цялото това нещо са 20-тина инструкции на асемблер, че дали не и по-малко.


Чет Дек 13, 2012 11:53 am
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Пет Май 18, 2012 9:14 pm
Мнения: 64
Мнение Re: Поредната Глупава Идея :)
Направих така както ми казахте и смених входовете и инветирах масата със захранванетона пуллуп резисторите Само се чудя като ги има вградени в микроконтролера дали е необходимо да ги слагам и от вън .. или от имане глава не боли :)
Ето схеми4ката утре ще почета малко уроци по софтуерната част. и ще ви покажа какво съм скопосал..
Изображение
Момчета каква е разликата между 877 и 877А 2 рият има нещо + но какво не можах да разбера..

_________________
Инж.Тодор Димитров  гр./Ямбол / 24г.
Последен Проект...http://www.vbox7.com/play:c1e9997504


Пет Дек 14, 2012 12:14 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 01, 2009 4:01 pm
Мнения: 1438
Мнение Re: Поредната Глупава Идея :)
Ползвай си вътрешните пулъпи, освен ако не искаш да имаш повече чаркаляци по платката.

877 няма компаратори, 877А има два компаратора и има малко повече варианти на клока на АЦП'то.


Пет Дек 14, 2012 12:34 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: Поредната Глупава Идея :)
Имах предвид че няма анлогии на RC6 и RC7 където е уарт-а. Честно казано, препоръчвам външни пулъпи независимо че има вградени. Освен това за да ги ползваш трябва да ги включиш - на тоя процесор мисле че беше от OPTIONREG. Сега не ме питай що препоръчвам външни...


Пет Дек 14, 2012 12:56 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Пет Май 18, 2012 9:14 pm
Мнения: 64
Мнение Re: Поредната Глупава Идея :)
Мисля ,че имам известен напредък с доста мъки разбира се :) ето какво сътворих.
Идеята е Тези бутони когато ги натисна да ми пише на терминала примерно кой бутон е натиснат..
Написах този код:
Код:
#include <16f877.h>
#use delay(clock=20M)
#use RS232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)




Void main() {
while (true){

if (input (pin_b0)) {
printf ("1");
delay_ms (1000);
}
if (input (pin_b1)){
printf ("2");
delay_ms (1000);
}
if (input (pin_b2)){
printf ("3");
delay_ms (1000);
}
if (input (pin_b3)){
printf ("4");
delay_ms (1000);
}
if (input (pin_b4)){
printf ("5");
delay_ms (1000);
}
if (input (pin_b5)){
printf ("6");
delay_ms (1000);
}
if (input (pin_b6)){
printf ("7");
delay_ms (1000);
}
if (input (pin_b7)){
printf ("8");
delay_ms (1000);
}
}
}

и ефекта стана но става само когато съм вързал схемата така:
Изображение
Натиснал съм произволни бутони а не поредни и се получи но проблема е ,че не мога да инвертирам нивата . ако ги вържа като пуллуп схемата постоянно праща на терминала високи нива..
Та как мога да ги инвертирам смисъл проца да ги чете обратно :)
Когато схемата е вързана така просто ги изрежда през 1 сек. всичките бутони... без да съм натиснал аз нещо.. Къде бъркам :?: :?:
Изображение

_________________
Инж.Тодор Димитров  гр./Ямбол / 24г.
Последен Проект...http://www.vbox7.com/play:c1e9997504


Съб Дек 15, 2012 5:59 pm
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Чет Сеп 28, 2006 4:24 pm
Мнения: 320
Местоположение: Варна
Мнение Re: Поредната Глупава Идея :)
Не, че разбирам ама пробвай така да видим :)

if ((!input(pin...)))


Съб Дек 15, 2012 7:04 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 01, 2009 4:01 pm
Мнения: 1438
Мнение Re: Поредната Глупава Идея :)
Процесора прави каквото му казваш да прави, т.е. да изпраща байт, когато конкретния извод е с високо ниво. Накарай го да праща когато нивото е ниско. И 1 секунда прекалено голямо изчакване да се сканират всички бутони.


Нед Дек 16, 2012 1:25 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Чет Мар 19, 2009 8:33 pm
Мнения: 804
Мнение Re: Поредната Глупава Идея :)
CarBeta написа:
Процесора прави каквото му казваш да прави, т.е. да изпраща байт, когато конкретния извод е с високо ниво. Накарай го да праща когато нивото е ниско. И 1 секунда прекалено голямо изчакване да се сканират всички бутони.


Да прав е колегата!

Нещо такова :
Код:
#include <16f877.h>
#use delay(clock=20M)
#use RS232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)




Void main() {
while (true){

if ( !input (pin_b0)) {
printf ("1");

}

if (!input (pin_b1)){
printf ("2");

}
if (!input (pin_b2)){
printf ("3");

}
if (!input (pin_b3)){
printf ("4");

}
if (!input (pin_b4)){
printf ("5");

}
if (!input (pin_b5)){
printf ("6");

}
if (!input (pin_b6)){

}
if (!input (pin_b7)){

}

delay_ms (20);

}
}


if (input (pin_b7)) - Ако пинБ7 е = 1
if (!input (pin_b7)) -Ако пинБ7 НЕ Е = 1


Нед Дек 16, 2012 2:31 pm
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Пет Май 18, 2012 9:14 pm
Мнения: 64
Мнение Re: Поредната Глупава Идея :)
Да получи се благодаря :) , сега като го вързах терминала след МАКС232 ми показва не числа а други неща това е нормално нали ,като закачих осцилоскопа ми дава различни сигнали значи всичко е точно така ли е :) и другият ми въпрос така както съм написал програмата ако натисна примерно 3 бутона едновременно според вас ще получа ли цялата информация .. понеже на симулацията ми забива програмата и ... не мога да разбера. какво ще стане ако ги натисна 3 едновременно :)

_________________
Инж.Тодор Димитров  гр./Ямбол / 24г.
Последен Проект...http://www.vbox7.com/play:c1e9997504


Нед Дек 16, 2012 4:23 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 17, 2005 5:07 pm
Мнения: 813
Местоположение: Сливен
Мнение Re: Поредната Глупава Идея :)
Ако ги натиснеш едновременно ще получиш поредицата на тези числа/бутони според реда им на сканиране в while цикъла :)

_________________
Код:
while(true);


Пон Дек 17, 2012 9:12 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: Поредната Глупава Идея :)
Такааа... Принципа ти е следния - четеш си постоянно целия порт Б, инвертираш го - ако нямаш натиснат бутон, резулатат ще ти е 0, изчакваш 5-10 милисекунди, пак го прочиташ и го сравняваш с предния резултат, ако съвпадат, приемаш че имаш валидно събитие. Иначе ще получаваш десетки отчитания на един и същ бутон/и. Аз си имам готов модул бутони който се държи точно като нормална клавиатура - подава си еднократно натиснатия бутон, след което изчаква известно време и ако е задържан пак го подава, пак чака ама по малко и ако все още е натиснат го подава само че с по малко изчакване и така нататък. Извеждането към терминала не е задължително да е ASCII - може да си е просто прочетения байт от порта, а после вече от него си вадиш битовете и т.н.


Пон Дек 17, 2012 10:16 am
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Пет Май 18, 2012 9:14 pm
Мнения: 64
Мнение Re: Поредната Глупава Идея :)
Здравейте :) имах малко проблеми със този код който използвах понеже когато пиша програмата след това на Визуал басик.. която дефакто да ми визуализира състоянието на даден обект.. срещнах доста голяма трудност.. както каза "Carbeta" напиши по сложен код тук а във ВБ по лесен.. не го послушах и усетих какво е имал предвид. Малко пипнах кода с 300 та мъки и го направих така ,че да ми праща 2 състояния за отделен бутон за да може после по лесно да настроя програмата на ВБ.
Та ето кода:
Код:
#include <16f877.h>
#use delay(clock=20M)
#use RS232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
int Button1;
int Button2;
int Button3;
int Button4;
int Button5;
int Button6;
int Button7;
int Button8;




Void main() {
while (true){

       
        switch( Button1 )
        {
          case 1:
          if (!input(PIN_B0))
          {
            putc('2');
            Button1 = 0;
          }
          break;
     
          case 0:
          if (input(PIN_B0))
          {
            putc('3');
           Button1 = 1;
          }
          break;
        }
         
          switch( Button2 )
        {
          case 1:
          if (!input(PIN_B1))
          {
            putc('4');
            Button2 = 0;
          }
          break;
     
          case 0:
          if (input(PIN_B1))
          {
            putc('5');
           Button2 = 1;
          }
          break;
      }
        switch( Button3 )
        {
          case 1:
          if (!input(PIN_B2))
          {
            putc('6');
            Button3 = 0;
          }
          break;
     
          case 0:
          if (input(PIN_B2))
          {
            putc('7');
           Button3 = 1;
          }
          break;
          }
switch( Button4 )
        {
          case 1:
          if (!input(PIN_B3))
          {
            putc('8');
            Button4 = 0;
          }
          break;
     
          case 0:
          if (input(PIN_B3))
          {
            putc('9');
           Button4 = 1;
          }
          break;
          }
           switch( Button5 )
        {
          case 1:
          if (!input(PIN_B4))
          {
            putc('A');
            Button5 = 0;
          }
          break;
     
          case 0:
          if (input(PIN_B4))
          {
            putc('B');
           Button5 = 1;
          }
          break;
          }
           switch( Button6 )
        {
          case 1:
          if (!input(PIN_B5))
          {
            putc('C');
            Button6 = 0;
          }
          break;
     
          case 0:
          if (input(PIN_B5))
          {
            putc('D');
           Button6 = 1;
          }
          break;
          }
           switch( Button7 )
        {
          case 1:
          if (!input(PIN_B6))
          {
            putc('E');
            Button7 = 0;
          }
          break;
     
          case 0:
          if (input(PIN_B6))
          {
            putc('F');
           Button7 = 1;
          }
          break;
          }
           switch( Button8 )
        {
          case 1:
          if (!input(PIN_B7))
          {
            putc('J');
            Button8 = 0;
          }
          break;
     
          case 0:
          if (input(PIN_B7))
          {
            putc('H');
           Button8 = 1;
          }
          break;
          }
}
}
   

Обаче... Винаги има едно главно НО :)
Изображение
Забелязах ,че когато пусна програмата получавам веднага някакви битове примерно съм натиснал 3 бутона едновременно..
Според вас мога ли да го оправя това или да го прежаля :) като тези битове се пращат за по малко от сек .. само леко трепти праща и се оправя...

_________________
Инж.Тодор Димитров  гр./Ямбол / 24г.
Последен Проект...http://www.vbox7.com/play:c1e9997504


Вто Дек 18, 2012 12:18 am
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Пет Май 18, 2012 9:14 pm
Мнения: 64
Мнение Re: Поредната Глупава Идея :)
Момчета най-накрая постигнах успеха който искам :) Направих и клипче да видите и 2 те програми как се държат.
ако имате забележки споделете да ги отстраня . Както и мнения по въпроса :)
http://www.vbox7.com/play:90930052c2

_________________
Инж.Тодор Димитров  гр./Ямбол / 24г.
Последен Проект...http://www.vbox7.com/play:c1e9997504


Сря Дек 19, 2012 11:57 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 35 мнения ]  Отиди на страница 1, 2, 3  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 5 госта


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

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни