Отговори на тема  [ 132 мнения ]  Отиди на страница Предишна  1, 2, 3, 4, 5, 6, 7, 8, 9  Следваща
Въпрос за някои особености на PIC16F527 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: Въпрос за някои особености на PIC16F527
Какво и е на паметта? Просто флоат аритметиката не е за тоя чип. Ей сега пробвах да компилирам само тоя ред с Протон - 361 думи програма и 20 байта + 4 за флоат променливата. Излизат към 30% рам и флаш.


Сря Сеп 02, 2015 7:55 am
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 17, 2005 5:07 pm
Мнения: 813
Местоположение: Сливен
Мнение Re: Въпрос за някои особености на PIC16F527
Ето примерче със overflow на таймера .. и това при условие ,че няма да надвишиш 16 бита distance :)
Впрочем като ти гледам кода може и без прекъсване да минеш ... просто в while(input(ECHO)) {} проверяваш таймера дали е превъртял и събираш с 255 .
И между другото сложи едно unsigned пред int16 distance; ей така за ползване на още 32767 стойности на disntace ;).
Код:
#include <main.h>

int16 distance;          // Defining variables

// Defining the pins

#define trig pin_b4     // Change as you wish, can use any pin in the MCU
#define echo pin_b5     // Change as you wish, can use any pin in the MCU
#define ALL_OUT 0
#define ALL_IN 0xff

#INT_TIMER0
void timer0_isr()
{
   distance+=0xff;

}

void main()
{

setup_adc(ADC_OFF); 
set_tris_b( 0x32 );    //PIN 5-INPUT  0b00100000
 

delay_ms(1000);                              // Boot-up delay, for troubleshooting

setup_timer_0(T0_INTERNAL);     // initiating timer

enable_interrupts(GLOBAL);    // enable GLOBAL INTERRUPTS


while(true)
{

output_high(trig);                         // ping the sonar
delay_us(20);                            // sending 20us pulse
output_low(trig);


while(!input(ECHO))                       // wait for high state of echo pin
{}

set_timer0(0);                           // setting timer zero
distance=0;
enable_interrupts(INT_TIMER0);         //ENABLE TIMER0 INTERRUPTS;
while(input(ECHO))                       // Wait for high state of echo pin
{}
disable_interrupts(INT_TIMER0);          // DISABLE t0 INTERRUPTS
// time=get_timer0();                       // Getting the time

distance+=get_timer0();

//distance=distance*0.028 + 1.093 ;             // Calculating the distance
                           

if(distance<300)
{
OUTPUT_LOW(PIN_B6);
OUTPUT_LOW(PIN_B7);
}

if(distance>299 && distance<500)
{
OUTPUT_HIGH(PIN_B6);
OUTPUT_LOW(PIN_B7);
}

if(distance>499 && distance<600)
{
OUTPUT_LOW(PIN_B6);
OUTPUT_HIGH(PIN_B7);
}



if(distance>600 )
{
OUTPUT_HIGH(PIN_B6);
OUTPUT_HIGH(PIN_B7);
}
                                     
                                         
delay_ms(500);


}
}

_________________
Код:
while(true);


Сря Сеп 02, 2015 8:52 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: Въпрос за някои особености на PIC16F527
Аве няма смисъл. Дори и две превъртания на таймера да хване, с тая сметка няма да му се получава повече от 20 като резултат. 65535 * 0.028 = 1834.98 ...

Все едно виждам програма писана за PC а не за PIC. На компютър ще работи пирфектно - и даже няма да заема повече от 0.00001% от рам-та :)


Сря Сеп 02, 2015 9:56 am
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Нед Юли 22, 2007 8:57 pm
Мнения: 607
Местоположение: Белград
Мнение Re: Въпрос за някои особености на PIC16F527
Не ми трябват тези флоати. Те са, за да се получи резултатът в см и да се визуализира на дисплей. Аз ще пресетвам с опитна проверка - трябва ми точност 5 см.
Само дайте някакъв пример за проверка препълването на TMR0 за CCS. И на всяко препълване ще добавя 255 към distance. Така ще си разширя на пракрика TMR0. Сега се усетих, че при 8-битов брояч, тези стойности 300, 400 нямат смисъл и получавам random стойности на практика. Затова и не работи. Няма как да достигне 300.

_________________
http://www.szrefekt.com


Сря Сеп 02, 2015 11:27 am
Профил WWW
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 17, 2005 5:07 pm
Мнения: 813
Местоположение: Сливен
Мнение Re: Въпрос за някои особености на PIC16F527
Е нали ти го дадох примера един пост по горе .. точно твоя код преработен с прекъсване и добавяне на 255 :)

_________________
Код:
while(true);


Сря Сеп 02, 2015 11:39 am
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Сря Фев 04, 2015 8:11 pm
Мнения: 610
Мнение Re: Въпрос за някои особености на PIC16F527
Що ми се струва ,че този пик няма прекъсване за таймера?

На колко време се равняват тези 5см и каква е "далекобойността"? С какъв клок работи пика?


Сря Сеп 02, 2015 11:48 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение Re: Въпрос за някои особености на PIC16F527
Ами в цикли не знам но във време на 0.1/330 най общо.


Сря Сеп 02, 2015 1:49 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение Re: Въпрос за някои особености на PIC16F527
А сега видях къде пингваш, ти сигурен ли си че тоя код е за твоят случай а не за модул? Как ще разклатиш пиезото с единичен импулс и то униполярен? Дори и да излъчва нещо едва ли ще го чуеш.


Сря Сеп 02, 2015 1:55 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Нед Юли 22, 2007 8:57 pm
Мнения: 607
Местоположение: Белград
Мнение Re: Въпрос за някои особености на PIC16F527
Извинявай и благодаря, velioman. Не съм догледал и мислех, че това е кодът, който аз съм постнал.
Компилирах го ще работи - РАМ е на 85%.

Тони, този код е за модул. За моя случай ще се наложи промяна. Пак ще трябва да мисля как ще стане с РАМ-а, че този контролер хич го няма - за едно тъпо Led blinking е на 30%.

Не мога да измисля какво още да вкарам в РОМ, за да освободя памет(68 байта общо има)

_________________
http://www.szrefekt.com


Последна промяна E1 на Сря Сеп 02, 2015 3:58 pm, променена общо 1 път



Сря Сеп 02, 2015 3:41 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение Re: Въпрос за някои особености на PIC16F527
За това не ти трябва рам, колко таймера имаш в това животно, най-лесното е с таймер, обаче .. няма да е съвсем хардуерно, идеята е да вържеш излъчвателя между два пина през кондензатори, така че да го клатиш биполярно, но най-добре е ако си направиш външен драйвер. На 5 V няма да изкараш кой знае каква мощност, т.е. ехото ще е слабо. От моя опит 8-10 импулса са ОК, имаш и една друга особенност, след като ги спреш пиезото ще продължи да излъчва известно време, това ти определя минималното разстояние. Ако искаш да мериш много близо това може да ти е пробелм, има решения и софтуерни и хардуерни, най-добре и двете. Още по проблемно става ако излъчвателя и применика са в едно. Според мен за да не се наказваш най-добре да сложиш един чип отвън и да работиш през него, цената не е висока и ще ти спести много мъки. Реално няма как да го направиш да работи много добре само с един PIC, с някой по развит, примерно някой силабс изпозлвайки неговите операционни .. но и тма имаш проблем с драйването на излъчвателя.


Сря Сеп 02, 2015 3:56 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Нед Юли 22, 2007 8:57 pm
Мнения: 607
Местоположение: Белград
Мнение Re: Въпрос за някои особености на PIC16F527
И тук е проблемът, че клиентът не иска външни драйвери. Защо два кондензатора? Няма ли да стане с 1? На всичкото отгоре ще съм на 3V. Имаш ли графика как приблизително да се подават импулсите към пиезото, за да излъчва? Само смяна +/- ли на пиновете? Гледах подобни схеми и виждам, че там свързват пиезото директно без кондензатор.

_________________
http://www.szrefekt.com


Сря Сеп 02, 2015 4:01 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение Re: Въпрос за някои особености на PIC16F527
Зависи какъв ти е драйвера, варианти много, кондензаторите за да получиш хубави двуполярни импулси.Ето нещо просто което съм използвал и работи, и как изглежда ехото в различни случаи. Това мери ехо до човек, по конкретно до главата, но резултата е подобен във всички случаи. Не помня вече всичко, беше преди 10 години, не мога да намеря и картинка на сигналите, знам че имам някъде. Два канала са защото имам един излъчвател и два приемника и с тях правя триангулация, която решава някои от проблемите котио хич не бха малко.


Прикачени файлове:
driver 1.jpg
driver 1.jpg [ 11.07 KiB | Прегледано 4382 пъти ]
with_glasses.jpg
with_glasses.jpg [ 182.44 KiB | Прегледано 4382 пъти ]
object_on _left.jpg
object_on _left.jpg [ 185.55 KiB | Прегледано 4382 пъти ]
object_behind.jpg
object_behind.jpg [ 180.65 KiB | Прегледано 4382 пъти ]
Сря Сеп 02, 2015 6:06 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение Re: Въпрос за някои особености на PIC16F527
п.с. имай в предвид че тоя драйвер се хранеше на 10 V, със читав усилвател с фиксирано усилване трудно приемах ехо от разстояние над 3-4 м, проблема е динамиката, т.е. ако усивлането е много голямо ми прецаква по близкото ехо, а варианта с който меря изисква да мога да извадя обвивната крива. Но дори да се анстрахираме от това, променливо усилване си е все така желателно. С твойте 3 V не знам какво ще се получи.


Сря Сеп 02, 2015 6:12 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Нед Юли 22, 2007 8:57 pm
Мнения: 607
Местоположение: Белград
Мнение Re: Въпрос за някои особености на PIC16F527
Кодът по някаква причина не работи. Сега ще го тествам с друг тип контролер.

_________________
http://www.szrefekt.com


Сря Сеп 02, 2015 6:39 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение Re: Въпрос за някои особености на PIC16F527
Хм, съмнява ме да е контролера, а и кода е една страница. Ти как го започна тоя проект в CCS-а, изпозлва ли WIzarda за да ти конфигурира регистрите, най-вече осцилатори и WDT, ааа и по спомен, имаше някакво дърво с конфигурирането на Timer 1 май, не се сещам вече но помня че по едно време конфигурирах Timer 1 ръчно, нещо с прескалера беше, но и това е било преди толкова години че .. сигурно вече е оправено.

п.с. сега като се замисля може и с таймер 0 да е било и шернатия с WDT прескалер.

п.с.2. по едно време май имаше версии при които #int_timer0 не работеше, трябваше да изпозлваш #int_rtcc кога защо не помня, то и двете са едно и също прекъсване.


Сря Сеп 02, 2015 6:46 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 132 мнения ]  Отиди на страница Предишна  1, 2, 3, 4, 5, 6, 7, 8, 9  Следваща

Кой е на линия

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


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

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