Отговори на тема  [ 17 мнения ]  Отиди на страница 1, 2  Следваща
Различни въпроси 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Яну 22, 2008 7:09 pm
Мнения: 7
Местоположение: София
Мнение Различни въпроси
Може ли някой да ми обясни точно работи тази функция.И как се "оразмерява" да работи в us, ms и s.


Последна промяна Mhz на Нед Фев 27, 2011 3:11 am, променена общо 2 пъти



Пет Фев 25, 2011 4:36 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение 
Почни малко по от далече - Платформа, IDE, компилатор, процесор и т.н.

_________________
Warriors of the Night, ASSEMBLER!!!


Пет Фев 25, 2011 4:50 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Яну 22, 2008 7:09 pm
Мнения: 7
Местоположение: София
Мнение 
ike написа:
Почни малко по от далече - Платформа, IDE, компилатор, процесор и т.н.

PIC16F84A
HI-TECH C
MPLAB
идеята е да управлявам 7 сегментен индикатор , правейки брояч от 0 до 9 секунди , ясно ми е всичко как трябва да стане , освен как да го направя да изчаква 1 секунда, а и като цяло искам да разбера как работи тази функция.


Пет Фев 25, 2011 5:02 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 25, 2005 11:41 am
Мнения: 1680
Мнение 
Mhz написа:
ike написа:
Почни малко по от далече - Платформа, IDE, компилатор, процесор и т.н.

PIC16F84A
HI-TECH C
MPLAB
идеята е да управлявам 7 сегментен индикатор , правейки брояч от 0 до 9 секунди , ясно ми е всичко как трябва да стане , освен как да го направя да изчаква 1 секунда, а и като цяло искам да разбера как работи тази функция.


Калкулира няколко цикъла, според тактовата честота и я пльосва 'inline' за да не се губи/пресмята и времето за викане на функция. От където пък следва, че ако я използваш на няколко места кодът ще нараства линейно на броя извиквания. Като цяло не е това подхода, защото така ще загубиш 1s процесорно време. Използвай таймер. Просто му проверявай стойността и при достигане на необходимата стойност сменяй цифрата и нулирай таймера.


Пет Фев 25, 2011 5:59 pm
Профил ICQ WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
Недай си боже и ако се обработват прекъсвания - тая 1 секунда става + Х микро/мили секунди, където Х е голямо неизвестно :)

Проверката на таймера пък също не е най-удачния вариант - прави се със запис на предварително изчислена стойност в таймера и той като се препълни да цъкне прекъсване. А ако сложи кварц 2.097152 MHz с таймер1 ще може да прави и 1 секунда точно. А 4.194304 MHz има да се продават - с него става 2 Hz.


Пет Фев 25, 2011 6:23 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 25, 2005 11:41 am
Мнения: 1680
Мнение 
Cekins написа:
Недай си боже и ако се обработват прекъсвания - тая 1 секунда става + Х микро/мили секунди, където Х е голямо неизвестно :)

Проверката на таймера пък също не е най-удачния вариант - прави се със запис на предварително изчислена стойност в таймера и той като се препълни да цъкне прекъсване. А ако сложи кварц 2.097152 MHz с таймер1 ще може да прави и 1 секунда точно. А 4.194304 MHz има да се продават - с него става 2 Hz.


Това е ясно Цекинс, ама сметнах, че ще го хвърлим много надълбоко.


Пет Фев 25, 2011 9:20 pm
Профил ICQ WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

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

От самото начало трябва да се свиква да се броят инструкциите :D


Пет Фев 25, 2011 11:17 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 25, 2005 11:41 am
Мнения: 1680
Мнение 
Cekins написа:
Че то плитко има ли? То тва да не е РС?

От самото начало трябва да се свиква да се броят инструкциите :D


Не е точно така. Обучението трябва да бъде последователно и методично, от по-лесно към по сложно. И да се повтарят нещата с цел получаване на трайни познания. Като съответно трябва да е съобразено с текущото ниво на развитие на мозъка в дадената област.


Съб Фев 26, 2011 12:42 pm
Профил ICQ WWW
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Яну 22, 2008 7:09 pm
Мнения: 7
Местоположение: София
Мнение 
От известно време се боря с Timer0 ама без успех ,
Код:
int Count=0;
int main(void)
{
TMR0=0;
T0CS=0;
T0SE=0;
PSA=0;
PS0=1;
PS1=0;
PS2=1;
while(1)
{
while(!T0IF);
T0IF=0;
Count++;
RB1=0;
if(Count==61)
{
Count=0;
}
}
}

Дайте някоя идея как да го направя да дели до 1hz ...
4Mhz ми е кварца


Съб Фев 26, 2011 5:52 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 13, 2007 12:12 pm
Мнения: 712
Мнение 
Ами това, което си написал върши работа, но за да го видиш визуално трябва лека преработка. :)
Код:
#include <pic.h>

__CONFIG(WDTDIS & XT & UNPROTECT);

int Count=0;

void main(void)
{

   TRISB    = 0;
   TMR0   = 0;
   T0CS   = 0;
   T0SE   = 0;
   PSA      = 0;
   PS0      = 1;
   PS1      = 0;
   PS2      = 1;
   while(1)
   {
      while(!T0IF);
      T0IF=0;
      Count++;       
      if(Count==61)
      {
         RB1=!RB1;
         Count=0;
      }
   }

}


Съб Фев 26, 2011 8:17 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 25, 2005 11:41 am
Мнения: 1680
Мнение 
И за да не разхищаваме процесорното време, аз бих го написал така:

Код:
  if (T0IF)
    {   
      T0IF=0;
      Count++;       
      if(Count==61)
        {
           RB1=!RB1;
           Count=0;
        }
    } 


Съб Фев 26, 2011 8:57 pm
Профил ICQ WWW
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Яну 22, 2008 7:09 pm
Мнения: 7
Местоположение: София
Мнение 
Сменям името на темата, защото мисля да задавам тук и други глупави въпроси. :) Та още един въпрос някаква конкретна формула за изчисляване на делението на честотата от кварца?И как тази програма да я вкарам като функция и да я викам примерно като ми трябва закъснение 1s?


Съб Фев 26, 2011 9:52 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Съб Дек 06, 2008 9:22 am
Мнения: 119
Местоположение: Пловдив
Мнение 
За TMR0:

Tover=(256-(TMR0)) x 1/Kpc x 4/Fosc

Fosc - е в Mhz

Променяйки стойността на регистъра TMR0 и/или коефициента на прескалера (Kpc), можеш да променяш времето са препълване на таймера.


Нед Фев 27, 2011 10:45 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Яну 22, 2008 7:09 pm
Мнения: 7
Местоположение: София
Мнение 
Добре как да изравня дължината на импулса и паузата... защото получавам дълъг импулс и къса пауза и обратното? Също как да го направя така че да го викам като функция като ми трябва закъснение 1 секунда?


Нед Фев 27, 2011 7:09 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Съб Дек 06, 2008 9:22 am
Мнения: 119
Местоположение: Пловдив
Мнение 
Я постни някакъв примерен код от това което пишеш за да ти помогнем практически. Принципно точно HI-Tech точно не съм ползвал но CCS и MicroC имат готови функции за време закъснение от ms и us.

Delay_ms(x);

Delay_us(x);

Като х може да има стойност до 65536.


Нед Фев 27, 2011 10:02 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 17 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

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


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

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