Отговори на тема  [ 140 мнения ]  Отиди на страница Предишна  1 ... 5, 6, 7, 8, 9, 10  Следваща
новобранец 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 01, 2009 4:01 pm
Мнения: 1438
Мнение 
head_up написа:
как, бре?! аз само го дебна да изтърве малко информация за това чудо и съм го патентовал като грък българско саламурено сирене!


:lol: :D
e това вече ме развесели ... :lol:


Вто Юли 27, 2010 12:26 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Мар 11, 2010 12:24 am
Мнения: 92
Мнение 
съжелявам за не пълната информация :) тръгнах да поствам и сорса, обаче го бях затрил малко( то така като всичко се прави на едно мчсто и за това информацията небеше пълна) :)
ето това е:

#include <16f690.h>
#include <stdio.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOCPD //Data EEPROM Code Protected
#FUSES NOPROTECT //Code protected from reads
#FUSES NOMCLR //Master Clear pin enabled
#FUSES PUT //Power Up Timer
#FUSES NOBROWNOUT //Reset when brownout detected
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_A5,rcv=PIN_A4,bits=8 )

void main()
{
int A=0;
set_tris_c(0x00);
set_tris_a(0xff);
while(true)
{
if(!input(PIN_A3))
{
delay_us(16);
A=!A;
}
if(A!=0)
output_c(0x01);
else
output_c(0x02);
}
}
Има бутон включен към А3 и 2 диода към С0 и С1, които трябва да сае превключват при натискане на бутона, но
не всеки път се превключва порт С при натискане на бутона. Понякога само премигва и като се отпусне бутона пак си свети същият диод и като напомпаш 2 3 4 пъти се превключва др и те така постоянно

@head_up не си чешам пръстите просто съм малко разсеян :) :lol:


Вто Юли 27, 2010 1:58 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение 
Не те разбрах добре какво искаш:
- при всяко натискане на бутона ВЕДНЪЖ да смениш светодиода
или
- докато е натиснат бутона през 16 микросекунди постоянно да сменяш светодиода ?

Добра практика е от време на време да се замисляш ТИ как би се проявил на мястото на процесора - какво би проверил, какво би си запомнил и т.н. После го напиши на някакъв език за програмиране.


Вто Юли 27, 2010 2:45 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Мар 11, 2010 12:24 am
Мнения: 92
Мнение 
когато натисна бутонът ако е светил 1 да светне 2 а 1 да изгасне при повторно натискане и отпуускане да изгасне 2 и да светне 1 и така :)
ами замислиям се , но явно не достатъчно:)


Вто Юли 27, 2010 2:49 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение 
zle написа:
... при повторно натискане и отпуускане ...


Това на кой ред от сорса да го търся ?


Вто Юли 27, 2010 2:53 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Мар 11, 2010 12:24 am
Мнения: 92
Мнение 
еми идеята беше такава поне аз така ги виждах нещата, когато бутонът се натисне А да инвертира съдържанието си ако е било 0 да стане 1 след това да се проверява дали е 0 и ако е нула да свети 1 ако е 1 да свети 2. Обаче явно нетябва да стане така


Вто Юли 27, 2010 3:03 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Дек 19, 2004 6:26 pm
Мнения: 1628
Местоположение: Сливен
Мнение 
Батето те подсеща, че никъде не чакаш да се отпусне бутона!
След като хванеш натиснат бутон и правиш нещо си, после или чакаш да
се отпусне, или поне докато не се отпусне просто нищо не правиш.


Вто Юли 27, 2010 3:55 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Мар 11, 2010 12:24 am
Мнения: 92
Мнение 
да разбрах :) малко късно но разбрах :) сядам да копая :)


Вто Юли 27, 2010 3:57 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
Не копай, а програмирай.


Вто Юли 27, 2010 7:54 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Мар 11, 2010 12:24 am
Мнения: 92
Мнение 
void main()
{
int A=0;
set_tris_c(0x00);
set_tris_a(0xff);
output_c(0x00);
while(true)
{
if(!input(PIN_A3))
A=!A;
delay_ms(16);

if(!input(PIN_A3))
if(A!=0)
output_c(0x01);
else
output_c(0x02);
if(input(PIN_A3))
delay_ms(16);
}
}

Имам чувството, че съм много глупав :). Ето какво правя проверявам дали бутонът е натиснат ако е натиснат А се инвертира чака се 16ms (някъде пишеше, че толко трябва за премахване на механичните трептения софтуерно), след това проверявам дали бутонът все още е натиснат ако е натиснат се проверява дали А=1 или А=0 и светва съответният диод след това проверявам дали бутонут е отпуснат ако е отпуснат се чака 16мс и пак почва от начало, отново се проверява дали е натиснат бутона ако А=1 става 0 и тн.. Ефектът е следния: Първоначално не свети нищо след това при пурвото натискане и отпускане светва 1 при повторно натискане обаче понякога вместо да се превключи да свети 2, 1 продължава да свети и само примигва 2 и така примерно 2,3,4...n поредни натискания и после превключва няколко пъти от 1 път и после пак така забозва без да превключва :). Извинявам се, че пълня с такива тъпи неща форума обаче ми се иска да мога поне с такива лесни работи да се оправям.

А и ако задържа бутона натиснат 2та диода мигат. Грешката отново е в мене обаче немога да зацепя къде.


Сря Юли 28, 2010 5:04 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
Значи ти трябва да го дебоунснеш и в двете посоки. Когато го засечеш натиснат дебоунсваш и чакаш да се отпусне и пак дебоунс. Ако ти се играе можеш да го докараш като клавиатурите. Ама там е малко по дълго.
Евентуално след като се отпусне, може да изчакаш малко повечко до следващо натискане. Тогава няма нужда от деб. след отпускане. Абе има много начини.


Сря Юли 28, 2010 7:17 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Мар 11, 2010 12:24 am
Мнения: 92
Мнение 
мерси :) сега ще пробвам :)


Сря Юли 28, 2010 7:34 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 2:23 pm
Мнения: 3714
Местоположение: Високо в планината
Мнение 
zle написа:

Имам чувството, че съм много глупав :)

Чувствата понякога лъжат!

zle написа:
Извинявам се, че пълня с такива тъпи неща форума обаче ми се иска да мога поне с такива лесни работи да се оправям.

Не са тъпи нещата. Имаш проблем, не можеш сам да го разрешиш- питаш. Ако не се откажеш, когато хората като дядо Боре, батеАз и т.н. погледнат репичките отдолу , ти ще обясняваш на младежи като теб сега как се прави това и онова. (мисля, че даже има рима, ако нема- удари ма!)

zle написа:
Грешката отново е в мене обаче немога да зацепя къде.

Грешката не е в теб, а в програмата. Просто ти си я направил :)
После има логическа грешка и в твърдението ти- как хем грешката е в теб, хем не знаеш къде е :?: ;)

Дерзай!

_________________
Хайде де!


Чет Юли 29, 2010 11:50 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
Бе покажете му на мочето бре, не го мъчете щото като гледам трудно ще се сети, а и май не ви вдява какво искате да кажете.

Има няколко варианта, това е най-простия, съответно неправилния, но стига за да вдянеш идеята.

if(!Input(PIN_A2))
{
delay_ms(10);
if(!input(PIN_A2))
{
while(input(PIN_A2))
A=!A;
delay_ms(10);
}
}

както казах това е най-неправиния начин, първо щото имаш while и ако е в по сложна програма може да си забиеш в тоя while и второ щото тоя метод гълта доста CPU безсмислено, в смисъл седиш в тия изчаквания. Абстрахирайки се от това какво става, чакаш да стане 0, изчакваш 10 мс и проверяваш дали пак си нула, т.е. дали не е отпуснат бутона, ако си пак 0, изчакваш да стане 1-ца, т.е. бутона да се отпусне при което инвертираш променливата и изчакваш още 10 мс.

Това за да стане аккто трябв аима два начина, прекъсване или стейт машина, пускаш еидн таймер да ти цъка и по него вземаш колко ти е родължил импулса, и дали е импулс или е смущение, и може да решиш какво да правиш, дали при отпускане м-у тия 10 мс да анулираш или пък ако е било само вдигане и пак сваляне да го приемеш за натиснат ....

Разбира се тук праивм уточнението че сигнала се генерира /имам в предвид изпълняваш/ чак при отпускане на бутона, може да се направи и само при натискането, това опитай сам да се сетиш как.


Чет Юли 29, 2010 12:39 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Мар 11, 2010 12:24 am
Мнения: 92
Мнение 
Мерси Тони. Прекъсване от таймера или порт Б предполагам, а стейт машина какво ще рече :)


Чет Юли 29, 2010 2:05 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 140 мнения ]  Отиди на страница Предишна  1 ... 5, 6, 7, 8, 9, 10  Следваща

Кой е на линия

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


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

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