Отговори на тема  [ 58 мнения ]  Отиди на страница 1, 2, 3, 4  Следваща
Индикатор За скорости (сорс код проблем) 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Пет Май 18, 2012 9:14 pm
Мнения: 64
Мнение Индикатор За скорости (сорс код проблем)
ЗДравейте, днес цял ден се лутам с една глупост.. Правя си индикатор за скорости..
Та ето с 2 думи до къде съм стигнал..
Изображение
Идеята е проста когато съм на задна да ми пише "R" на таблото а на скоростният ми лост да свети нея буква..
когато съм на 1 ва да свети на таблото 1 ца а на лоста 1..
Така.. Почнах да пиша сорса и стигнах до това положение.
Код:
#include <16F873A.H>
#fuses XT, NOPROTECT, NOWDT, BROWNOUT, PUT, NOLVP
#use delay(clock=20000000)

#define BUTTONR  PIN_A0
#define BUTTON1  PIN_A1

#define LEDR     PIN_C2
#define LED1     PIN_C3
#define LEDA     PIN_B0
#define LEDB     PIN_B1
#define LEDC     PIN_B2
#define LEDD     PIN_B3
#define LEDE     PIN_B4
#define LEDF     PIN_B5
#define LEDG     PIN_B6
#define ON      0
#define OFF     1

void main()
{

set_tris_a(0x01);
set_tris_c(0x00); 
  int  LedStatus = OFF;
 
   while (TRUE)
   {   
      if (input(BUTTONR) == 1)
      {
          output_high(LEDR);
          output_low(LEDA);
          output_low(LEDB);
          output_low(LEDC);
          output_low(LEDE);
          output_low(LEDF);
          output_low(LEDG);
          LedStatus = ON;
            delay_ms(200);
           
      }
      else if (input(BUTTONR) == 0)
      {
           output_low(LEDR);
           output_high(LEDA);
           output_high(LEDB);
           output_high(LEDC);
           output_high(LEDE);
           output_high(LEDF);
           output_high(LEDG);
           LedStatus = OFF;
            delay_ms(200);   
      }
      if (input(BUTTON1) == 1)
      {
          output_high(LED1);
         
          output_low(LEDB);
          output_low(LEDC);
         
          LedStatus = ON;
            delay_ms(200);
           
      }
      else if (input(BUTTON1) == 0)
      {
           output_low(LED1);
       
           output_high(LEDB);
           output_high(LEDC);
           
           LedStatus = OFF;
            delay_ms(200);
           
      }
  }

}

обаче кода работи само до задната скорост "R" и става ето това.
Изображение
когато добавя и 2 рата част за 2 рият бутон а именно "1" както се вижда в сорса по-горе,цялата работа се бъгва...
Като натисна бутон 1 Си свети диод 1 но на 7 сегментният индикацията която описва цифрата 1 започва да мига...
Изображение
а като натисна бутон за задната скорост. 7 сегментният свети "R" но мига часта която описва 1...
Дано ме разбрахте правилно...
П.П не съм много в час с програмирането да си призная (то си и личи де :finga: ) чета и се уча..Та Момчета къде бъркам ?
Мислех да движа 7 сегментният със 7447 но като му видях таблицата за истиннос няма индикация за "H"-неутрална и "R"- задна... за това реших да ги "паля" отделно всеки диод на дисплея..

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


Чет Юни 27, 2013 8:40 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 25, 2005 11:41 am
Мнения: 1680
Мнение Re: Индикатор За скорости (сорс код проблем)
Направи една таблица (масив) със 7 стойности със съответната стойност за цифрата/буквата на индикатора (0 - Н, 1 - 1, ... 6 - r). Добави още един диод на RC0 за неутрал, премести 1 на RC1.... r на RC6 (за да ти е по-лесно със сорса). Бутоните ги сложи с активна '0'. После четеш PORTA , инвертираш, и стойността директно я изкарваш на PORTC, а с определяне на кой бит е сетнат ще ти е офсет за таблицата кой знак да изкараш на PORTB (може и switch - case ако така ти е трудно).

Постни схемата за Proteus и ще ти я драсна....


Чет Юни 27, 2013 9:48 pm
Профил ICQ WWW
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Пет Май 18, 2012 9:14 pm
Мнения: 64
Мнение Re: Индикатор За скорости (сорс код проблем)
http://www.speedyshare.com/UaNJV/skorosti.DSN
искаш да кажиш да направя една таблиза за истинност на възможните комбинации от 1 до 5 и Н И Р :) добре това ще го направя.. и ще пробвам да видя какво ще стане

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


Чет Юни 27, 2013 9:58 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Авг 23, 2005 12:02 pm
Мнения: 3070
Местоположение: София
Мнение Re: Индикатор За скорости (сорс код проблем)
И сложи един 4.7 килоомов резистор от MCLR към 5v.


Чет Юни 27, 2013 10:11 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Съб Фев 18, 2006 11:55 pm
Мнения: 1301
Местоположение: София
Мнение Re: Индикатор За скорости (сорс код проблем)
И не че е много фатално в случая ама ако кварца е 24МХз оправи и това:

#use delay(clock=20000000)

_________________
Някой ден и костенурките ще се научат да летят...


Пет Юни 28, 2013 12:52 am
Профил ICQ
Ранг: Популярен
Ранг: Популярен

Регистриран на: Вто Юни 27, 2006 11:13 am
Мнения: 381
Местоположение: Варна
Мнение Re: Индикатор За скорости (сорс код проблем)
даже за 24 трявва да е HS, да не говорим че са до 20
п.с. това реализирал ли си го физически или караш само на протеус?


Пет Юни 28, 2013 9:30 am
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Пет Май 18, 2012 9:14 pm
Мнения: 64
Мнение Re: Индикатор За скорости (сорс код проблем)
Карам за сега само на протеус.. проблем ли е ,че съм ги дал на 20МГХ? и какво имаш предвид трябва да е HS малко по подробно го убеснявайте :)

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


Пет Юни 28, 2013 9:55 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 03, 2005 2:21 am
Мнения: 12765
Местоположение: София
Мнение Re: Индикатор За скорости (сорс код проблем)
Конфигурацията на осцилатора трябва да е "HS".

И не се пише "убеснявайте". Правилното е "убисневуйти".


Пет Юни 28, 2013 11:15 am
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Пет Май 18, 2012 9:14 pm
Мнения: 64
Мнение Re: Индикатор За скорости (сорс код проблем)
Извинявам се за правописните грешки.. :oops:
Малко раздвижих проекта.. ще оправя и забележките които изказахте.
Ето как се държи сега програмата на симулация:
Клип:
http://img853.imageshack.us/img853/2563/gghxozeebmeweyexlcqgye.mp4
Справих се с проблема който имах по-горе ,но се появи този проблем който накрая се вижда а именно какво става ако се натиснат 2 бутона примерно..
Има ли някаква фунцкия или пример да ми дадете с който да изкл. "опцията" да бъдат натиснати 2 бутона смисъл да чете само един който е натиснат. (или много филми съм гледал :oops: )
Ето сорса кода както е сега. не съм променил само колегата както каза по горе това за кварца.
Код:
#include <16F873.h>
#fuses XT, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock=20000000)

#define LEDA     PIN_B0
#define LEDB     PIN_B1
#define LEDC     PIN_B2
#define LEDD     PIN_B3
#define LEDE     PIN_B4
#define LEDF     PIN_B5
#define LEDG     PIN_B6
#define ON      0
#define OFF     1
int ButtonR;
int Button1;
int Button2;
int Button3;
int Button4;
int Button5;
void main()
{
 
   ButtonR=1;
   Button1=1;
   Button2=1;
   Button3=1;
   Button4=1;
   Button5=1;

    while(true)
    {
   
   
        switch( ButtonR )
        {
          case 1:
          if (!input(PIN_A0))
          {
           output_high(PIN_C0);
           output_low(LEDA);
         output_low(LEDB);
          output_low(LEDC);
          output_low(LEDE);
          output_low(LEDF);
          output_low(LEDG);
         
         
           delay_ms(200);
            ButtonR = 0;
          }
          break;
     
          case 0:
          if (input(PIN_A0))
          {
           output_low(PIN_C0);
           output_high(LEDA);
           output_high(LEDB);
           output_high(LEDC);
           output_high(LEDE);
           output_high(LEDF);
           output_high(LEDG);
         
         
            delay_ms(200);   
           ButtonR = 1;
          }
          break;
        }
         
          switch( Button1 )
        {
          case 1:
          if (!input(PIN_a1))
          {
            output_high(PIN_C1);
            output_low(PIN_B1);
            output_low(PIN_B2);
            delay_ms(200);
            Button1 = 0;
          }
          break;
     
          case 0:
          if (input(PIN_a1))
          {
            output_low(PIN_C1);
            output_high(PIN_B1);
            output_high(PIN_B2);
            delay_ms(200);
            Button1 = 1;
          }
          break;
      }
       switch( Button2 )
        {
          case 1:
          if (!input(PIN_A2))
            {
            output_high(PIN_C2);
          output_low(LEDA);
          output_low(LEDB);
          output_low(LEDG);
          output_low(LEDE);
          output_low(LEDD);
           delay_ms(200);
           
            Button2 = 0;
          }
          break;
     
          case 0:
          if (input(PIN_A2))
            {
            output_low(PIN_C2);
           output_high(LEDA);
          output_high(LEDB);
          output_high(LEDG);
          output_high(LEDE);
          output_high(LEDD);
          delay_ms(200);
           
           Button2 = 1;
          }
          break;
          }
          switch( Button3 )
        {
          case 1:
          if (!input(PIN_A3))
          {
          output_high(PIN_C3);
          output_low(LEDA);
          output_low(LEDB);
          output_low(LEDG);
          output_low(LEDC);
          output_low(LEDD);
          delay_ms(200);
            Button3 = 0;
          }
          break;
     
          case 0:
          if (input(PIN_A3))
          {
          output_low(PIN_C3);
          output_high(LEDA);
          output_high(LEDB);
          output_high(LEDG);
          output_high(LEDC);
          output_high(LEDD);
          delay_ms(200);
           Button3 = 1;
          }
          break;
          }
         switch( Button4 )
        {
          case 1:
          if (!input(PIN_A4))
          {
          output_high(PIN_C4);
          output_low(LEDF);
          output_low(LEDG);
          output_low(LEDB);
          output_low(LEDC);
          delay_ms(200);
            Button4 = 0;
          }
          break;
     
          case 0:
          if (input(PIN_A4))
          {
          output_low(PIN_C4);
          output_high(LEDF);
          output_high(LEDG);
          output_high(LEDB);
          output_high(LEDC);
          delay_ms(200);
           Button4 = 1;
          }
          break;
          }
          switch( Button5 )
        {
          case 1:
          if (!input(PIN_A5))
          {
          output_high(PIN_C5);
          output_low(LEDA);
          output_low(LEDF);
          output_low(LEDG);
          output_low(LEDC);
          output_low(LEDD);
          delay_ms(200);
            Button5 = 0;
          }
          break;
     
          case 0:
          if (input(PIN_A5))
          {
            output_low(PIN_C5);
            output_high(LEDA);
            output_high(LEDF);
            output_high(LEDG);
            output_high(LEDC);
            output_high(LEDD);
            delay_ms(200);
           Button5 = 1;
          }
          break;
          }
    }
}


П.П измислих Когато колата не е на скорост. и никой от бутоните не е натиснат всичките диоди да мигат ,а на дисплея да свети постоянно "Н" Според вас възможно ли е и ако да каква фунцкия да използвам и ако може пример?
Благодаря предварително на отзовалите се. :mrgreen:

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


Пет Юни 28, 2013 1:43 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 01, 2009 4:01 pm
Мнения: 1438
Мнение Re: Индикатор За скорости (сорс код проблем)
При така написана програма е нормално това поведение. При натискане на бутон просто светваш нужните сегменти, приемайки на доверие, че останалите не светят, а при отпускане гасиш тия, които си светнал, пак приемайки на доверие, че останалите не светят. Задавай ниво на всички сегменти! Ако искаш да не реагира на повече от един бутон или каквото там искаш, трябва да си поиграеш още малко със софтуера!


Пет Юни 28, 2013 2:39 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 25, 2005 11:41 am
Мнения: 1680
Мнение Re: Индикатор За скорости (сорс код проблем)
Е аз малко понагоре поописах алгоритъма... Чети целия PORTA и го вкарай него в един switch-case, така ще отфилтрираш повече от един натиснат бутон и програмата ще стане 5-10 реда.


Пет Юни 28, 2013 2:54 pm
Профил ICQ WWW
Ранг: Популярен
Ранг: Популярен

Регистриран на: Чет Сеп 28, 2006 4:24 pm
Мнения: 320
Местоположение: Варна
Мнение Re: Индикатор За скорости (сорс код проблем)
За LED, които са на порт B не е ли по-лесно с една команда да ги сменяш ,за да спестиш писане :)
output_b(0xFF) - HIGH
output_b(0x0) - LOW


Пет Юни 28, 2013 7:50 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение Re: Индикатор За скорости (сорс код проблем)
Ами то по горе са му писали как да го направи най-лесно и ефективно и като код и като производителност. Варианта с аблица е най-оптималния,става ленсо, бързо и гъвкаво.


Съб Юни 29, 2013 12:18 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 03, 2005 2:21 am
Мнения: 12765
Местоположение: София
Мнение Re: Индикатор За скорости (сорс код проблем)
hacker4eto1 написа:
...Малко раздвижих проекта.. ще оправя и забележките които изказахте...


Според мен, ще е по-добре да дефинираш числата които искаш да се изписват на дисплея като състояние на порта. Например, 1 е съставено от сегменти "B" и "C", което при активно състояние на порта 0, съответства на 0xF9, 2 от A, B, D, E, G, което е 0xA4...

#define GEAR_1 0xF9
#define GEAR_2 0xA4

output = GEAR_1;


Съб Юни 29, 2013 12:31 am
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Пет Май 18, 2012 9:14 pm
Мнения: 64
Мнение Re: Индикатор За скорости (сорс код проблем)
Нещо не ми се получава искам сега да направя часта със това когато никой бутон не е натиснат диодите да мигат успявам да го постигна това но когато натисна някой от бутоните всички светят 8O 8O а не трябва да е така трябва да остане да свети само този диод на който му е натиснат бутона..
Код:
if (input(PIN_A0))
    if (input(PIN_A1))
    if (input(PIN_A2))
    if (input(PIN_A3))
    if (input(PIN_A4))
    if (input(PIN_A5))
      delay_ms(200); 
      output_high(Pin_c0);
      output_high(Pin_c1);
      output_high(Pin_c2);
      output_high(Pin_c3);
      output_high(Pin_c4);
      output_high(Pin_c5);
      delay_ms(200);   
      output_low(pin_c0);
      output_low(pin_c1);
      output_low(Pin_c2);
      output_low(Pin_c3);
      output_low(Pin_c4);
      output_low(Pin_c5);

вече все повече се убеждавам ,че програмирането не е з амен :) а ако е за мен то едни романи се пишат....
itso.t написа:
hacker4eto1 написа:
...Малко раздвижих проекта.. ще оправя и забележките които изказахте...


Според мен, ще е по-добре да дефинираш числата които искаш да се изписват на дисплея като състояние на порта. Например, 1 е съставено от сегменти "B" и "C", което при активно състояние на порта 0, съответства на 0xF9, 2 от A, B, D, E, G, което е 0xA4...

#define GEAR_1 0xF9
#define GEAR_2 0xA4

output = GEAR_1;

Колега как ли не го въртях това ... все ми дава грешка в реда output = GEAR_1; и по конкретно грешка
Expecting LVALUE such as a variable name or *expresion...
П.П знам ,че ми казвате кое как да стане ама явно не мога да ви разбера опитвам го но не се получава.. уценям ,че ме траете :)

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


Съб Юни 29, 2013 5:29 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 58 мнения ]  Отиди на страница 1, 2, 3, 4  Следваща

Кой е на линия

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


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

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