Отговори на тема  [ 41 мнения ]  Отиди на страница 1, 2, 3  Следваща
LED isn`t Blinking! 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Авг 17, 2014 11:43 am
Мнения: 26
Мнение LED isn`t Blinking!
Здравейте!
Може ли да получа малко съдействие относно един прост код /за можещите/ и явно доста труден за начинаещите!
Прикачам кода.
Благодаря!


Прикачени файлове:
main1.cpp [7.36 KiB]
374 пъти
Нед Авг 17, 2014 12:30 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение Re: LED isn`t Blinking!
Погледнах го съвсем отгоре, както точно не ти работи. Начина по който е направнео приемането е доста баламски, не знам от какво му пращаш данни но е възможно да изтърваш единицата ако се предава и още нещо.


Нед Авг 17, 2014 1:48 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Авг 17, 2014 11:43 am
Мнения: 26
Мнение Re: LED isn`t Blinking!
ToHu написа:
Погледнах го съвсем отгоре, както точно не ти работи. Начина по който е направнео приемането е доста баламски, не знам от какво му пращаш данни но е възможно да изтърваш единицата ако се предава и още нещо.

Данни изпращам от RealTerm.Наистина е баламски направено приемането,но аз сега се уча и затова питам!


Нед Авг 17, 2014 2:48 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение Re: LED isn`t Blinking!
това за да работи трябва да изпращаш само символи без терминиране в ASCI формат, т.е. без /CR /LF


Нед Авг 17, 2014 3:15 pm
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Пет Юни 25, 2010 3:18 pm
Мнения: 363
Местоположение: Varna
Мнение Re: LED isn`t Blinking!
Май има и друг проблем - "InterruptHandlerLow()" ще изчисти RCIF, а DataRdyUSART() проверява точно него и никога няма дa излезе от while(!DataRdyUSART());.


Нед Авг 17, 2014 3:52 pm
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Пет Юни 25, 2010 3:18 pm
Мнения: 363
Местоположение: Varna
Мнение Re: LED isn`t Blinking!
Още нещо - RCREG е двойно буфериран.

п.п Ако не съм сбъркал сметките Delay10KTCYx(25) ще ти даде 0,02 секунди.


Последна промяна Stoimen на Нед Авг 17, 2014 4:40 pm, променена общо 1 път



Нед Авг 17, 2014 3:56 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение Re: LED isn`t Blinking!
Абе както казах аз го гледах по отгоре, но като цяло ми се видя дървено организирано както прекъсването така и приемането, това ти ли си го писал или е взет пример от някъде ... ако е пример не е много полезен за начинаещи.


Нед Авг 17, 2014 4:03 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Авг 17, 2014 11:43 am
Мнения: 26
Мнение Re: LED isn`t Blinking!
Ако използувам Ехо и връщам получените данни обратно в TXREG ,кодът работи идеално с терминала.Когато обаче се опитам да изпратя получените данни към PORTB и това да се индикира чрез мигане на LED,не става! Явно тука не мога да направя нещата както трябва. Относно Delay10KTCYx(25) сте прав,коригирах я.


Нед Авг 17, 2014 5:35 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение Re: LED isn`t Blinking!
Значе сега ти гледам майн-а само, преимайки че другото работи :
Първото което ми прави впечатление е че имаш
if(ReadUSART()=='1') // If the received data is equal to the 'A'
В коментара си написал ако е А но това работи ако си изпрати 1, и говорим за ASCI 1, или това е 0x31 , та не знам дали подаваш А или 1.
След това имаш
while(!DataRdyUSART());
къде го чистиш тоя флаг който проверяваш, очевидно тази функция връща дали ти е превършило четенто, но никъде в майна не го обработваш, т.е. това като се вдигне кое ще го свали ?
и след това имаш
PORTB == data; // The receive data is send to PORTB

това не е оператор за присвояване а сравнение, следва да бъде
PORTB = data; // The receive data is send to PORTB

Да не говорим че отварящите и затварящите скоби след while не са много на място, какво отварят и затварят?
Същото и за If имаш го, но отварящи и затварящи не са на място, би следвало да е нещо такова :
if(ReadUSART()=='1'){ // If the received data is equal to the 'A'
LED1_on(); // LED blinking
Delay10KTCYx(25); // Dealay 250K cycles
LED1_off();}


Нед Авг 17, 2014 6:04 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: LED isn`t Blinking!
И лед-а свети постоянно :)

след LED1_off(); има няколко наносекунди докато дойде LED1_on();

Та така де - за да мига трябва да има още един delay след офф ...

едит - то имало break - сори не го видях...


Нед Авг 17, 2014 6:20 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Авг 17, 2014 11:43 am
Мнения: 26
Мнение Re: LED isn`t Blinking!
ToHu написа:
Значе сега ти гледам майн-а само, преимайки че другото работи :
Първото което ми прави впечатление е че имаш
if(ReadUSART()=='1') // If the received data is equal to the 'A'
В коментара си написал ако е А но това работи ако си изпрати 1, и говорим за ASCI 1, или това е 0x31 , та не знам дали подаваш А или 1.
След това имаш
while(!DataRdyUSART());
къде го чистиш тоя флаг който проверяваш, очевидно тази функция връща дали ти е превършило четенто, но никъде в майна не го обработваш, т.е. това като се вдигне кое ще го свали ?
и след това имаш
PORTB == data; // The receive data is send to PORTB

това не е оператор за присвояване а сравнение, следва да бъде
PORTB = data; // The receive data is send to PORTB

Да не говорим че отварящите и затварящите скоби след while не са много на място, какво отварят и затварят?
Същото и за If имаш го, но отварящи и затварящи не са на място, би следвало да е нещо такова :
if(ReadUSART()=='1'){ // If the received data is equal to the 'A'
LED1_on(); // LED blinking
Delay10KTCYx(25); // Dealay 250K cycles
LED1_off();}

Уточнявам забележките:
1.Подавам А
2.PORTB = = data; //това е моя техническа грешка,коригирана е.
3.Относно скобите сте абсолютно прав за което благодаря.
4.За RCIF отново сте прав,но не знам как да го изчистя!
Ще съм благодарен за малко помощ!


Нед Авг 17, 2014 6:54 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение Re: LED isn`t Blinking!
Ами ... я кажи това на какво го пишеш, тия функции не ги виждам декларирани та явно са от компилатора, ама не ще да е CCS, поне аз не помня да изглеждат така.
Та от там ще зависи. Принципно най-добре бибило да си направиш твой флаг за приет байт, а да не говорим че е и добре да имаш ФИФО в което да мушкаш каквото дойде пък после да го обработваш, това за експериментите ти не е от занчение но в релания свят може да се окаже доста полезно.
След това, ти подаваш А но проверката ти е за 1, т.е. няма как да стане, А = 0х41 а 1 = 0х31 ... а да не забравяме че А и а не са един код едното е 0х41 а другото 0х61 .... и последно което писах и по горе, така както е написано не следва да имаш терминатори от сорта /r /n


Нед Авг 17, 2014 7:02 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: LED isn`t Blinking!
RCIF се чисти автоматично при прочитане на RCREG. Ако във фифо буфера има други байтове, се изчиства при прочитане на последния. Това ще рече че ако се получат два байта един след друг преди да си изчел първия, ще има две прекъсвания едно след друго, тъй като RCIF ще остане сетнат след първото четене и при излизане ще влезе веднага пак в прекъсване.


Нед Авг 17, 2014 7:42 pm
Профил ICQ
Ранг: Популярен
Ранг: Популярен

Регистриран на: Пет Юни 25, 2010 3:18 pm
Мнения: 363
Местоположение: Varna
Мнение Re: LED isn`t Blinking!
Пробвай с тази main. Това не изчиства проблема с двойно буферирания RCREG, но би трябвало да работи ако не въвеждаш символите много бързо.

Код:
void main(void)
{
   setpin();                                  // Init LED
   init_uart();                               // Init UART module
   while(1)                                   // Create Loop
   {
      while(!cUART_data_flg);                    // Wait for data              
      cUART_data_flg = 0;
      //data = ReadUSART();                        // Read data                   
      PORTB = cUART_char;                              // The receive data is send to PORTB
                  
      if(cUART_char=='1') {                        // If the received data is equal to the 'A'     
         LED1_on();                                 // LED  blinking
         Delay10KTCYx(250);                          // Dealay 250K cycles
         LED1_off();                                                   
      }               
                              
   }

}


Нед Авг 17, 2014 7:56 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: LED isn`t Blinking!
Е то дори и на 115kb има достатъчно време да се обработи един символ, преди да е пристигнал следващия.


Нед Авг 17, 2014 8:16 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 41 мнения ]  Отиди на страница 1, 2, 3  Следваща

Кой е на линия

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


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

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