www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

merjenje hitrosti s PIC 16F876

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
andrelinoge
Član
Član



Pridružen-a: Sob 13 Nov 2004 1:43
Prispevkov: 63
Aktiv.: 0.27
Kraj: vse od Murske Sobote pa do Maribora

PrispevekObjavljeno: Sob Nov 19, 2005 10:06 pm    Naslov sporočila:  merjenje hitrosti s PIC 16F876 Odgovori s citatom

Gradim majhnega robotka in bi za natančno vodenje moral vedeti hitrost vrtenja obeh koles. Kako bi to lahko rešil s PIC-em 16F876?
Razmišljal sem s kakim pošiljanjem pulzov in z interrupti samo mi jih nikakor ne uspe usposobiti.

Lahko pa bi naredil tahogeneratorčka. Ker imam malo prostora sem uporabil dva motorčka iz mobilnih telefonov. Potem bi samo izmeril napetost s PIC-em in ko bi vse skupaj umeril bi to lepo delovalo... Če bi dobil dovolj veliko napetost iz motorčkov. Trenutno dobim tam okrog 100 mV. Sem bolj kavbojski elektronik in bi prosil za kakšen nasvet, kakšen tranzistor oz. kaj naj uporabim, da bom zvečal napetost in če moram imeti še kake dodatne upore pri PIC-u da bo A/D vredu deloval.

Programiram v PCW C compiler-ju

Hvala lepa za upam da prijazno pomoč Smile
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Sob Nov 19, 2005 10:33 pm    Naslov sporočila:   Odgovori s citatom

Ce imajo kolesa luknje (ali pa lahko na os pritrdis en krog, v katerega sam zvrtas luknje), je opticni prekinjevalnik (kako se temu sploh rece pravilno ?) najbolj enostavna resitev. Alternativa temu je hallov senzor in magnetek. Tako bos imel manj izgub, kot z "generatorjem".
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
ql000
Član
Član



Pridružen-a: Pet 04 Nov 2005 9:00
Prispevkov: 17
Aktiv.: 0.07

PrispevekObjavljeno: Ned Nov 20, 2005 8:42 am    Naslov sporočila:   Odgovori s citatom

jaz sem imel podoben problem, ki sem ga rešil tako, da sem vzel eno staro miško in pobral ven fototranzistor (s tremi nogicami, ne tistega s štirimi, ker znoriš preden pogruntaš katera noga je za kaj!) in IR diodo. Za os motorja sem naredil kodirno kolo (kolo z luknjicami), ki sem jih zaradi večje natančnosti izrezal z laserjem iz eloksiranega Al. Potem, ko vse skupaj sestaviš, samo še pobiraš pulze na uC-ju. To ti je po mojem najboljša varianta, da signal iz tranzistorja pobiraš na pinu RA4 (mislim, da je pin za timer0, nisem čisto prepričan, poglej v datasheet), potem pa neredi interupt, ko je signal 1 (+5V), naj npr. poveča nek programski števec za ena. potem, ko ti bo to delalo si na konju!

P.S.
Pri vezju, ki sem ti ga na kratko opisal potrebuješ še komparator, zaradi tega, da dobiš lepe pulze.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
andrelinoge
Član
Član



Pridružen-a: Sob 13 Nov 2004 1:43
Prispevkov: 63
Aktiv.: 0.27
Kraj: vse od Murske Sobote pa do Maribora

PrispevekObjavljeno: Ned Nov 20, 2005 3:31 pm    Naslov sporočila:   Odgovori s citatom

Saj sam dajalnik impulzov mi ni toliko težava kot pa potem interrupti in program. Interruptov mi nikoli ni uspelo usposobiti. Rabil bi meritev za dve kolesi, torej predvidevam, da tudi dva možna interrupta. V PCW C imam, ko ustvarjam nov projekt, možnost čarovnika v katerem določim za interrupte "Port B any change on B4-B7" Nato mi samo napiše ta del kode:

#int_RB
RB_isr()
{

}


void main()
{

setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_spi(FALSE);
setup_counters(RTCC_INTERNAL,RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
enable_interrupts(INT_RB);
enable_interrupts(global);
}

Mislil sem, da zdaj lahko samo skopiram željeno kodo (recimo vklop oz. izklop neke nogice) v funkcijo RB_isr(). Vendar mi ni delovalo pa sem delal karkoli Confused
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
NeoTO
Član
Član



Pridružen-a: Pon 28 Mar 2005 19:19
Prispevkov: 2752
Aktiv.: 11.62
Kraj: Trzic

PrispevekObjavljeno: Ned Nov 20, 2005 5:22 pm    Naslov sporočila:   Odgovori s citatom

Kaj ti ni delovalo? Daj v interrupt proceduro napiš nek stavek, da ti npr. toggle-a en izhod na A portu, potem pa pripelji nek signal na pine porta B, pa glej če ti tista LED-ica utripa!.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
ql000
Član
Član



Pridružen-a: Pet 04 Nov 2005 9:00
Prispevkov: 17
Aktiv.: 0.07

PrispevekObjavljeno: Pon Nov 21, 2005 4:11 pm    Naslov sporočila:   Odgovori s citatom

npr.:

-narediš globalno spremenljivko, ki mora biti izven vsake funkcije:
int16 soft_counter;

soft_counter = 0; // jaz to vedno naredim, zihr je zihr

#int_RB
void counter_up(void)
{
if (input(pin na katerega voziš signal) == 1)
{
soft_counter++;
}
}


void main(void)
{
if (soft_counter == 100)
{
output_high(B7); // npr. prižgi ledico
soft_counter = 0; // reset soft števca
}
}


nekaj takega, sej logiko boš že pogruntal! Pa tako kot je NeoTO rekel, breadborad pa ledica pa se igraj!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
andrelinoge
Član
Član



Pridružen-a: Sob 13 Nov 2004 1:43
Prispevkov: 63
Aktiv.: 0.27
Kraj: vse od Murske Sobote pa do Maribora

PrispevekObjavljeno: Pon Nov 21, 2005 7:48 pm    Naslov sporočila:   Odgovori s citatom

Hvala zaenkrat. Bom probal. Vprašal pa bi medtem še nekaj. Se izvede Interrupt, če se pojavi sredi izvajanja ukaza delay_ms() ?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
NeoTO
Član
Član



Pridružen-a: Pon 28 Mar 2005 19:19
Prispevkov: 2752
Aktiv.: 11.62
Kraj: Trzic

PrispevekObjavljeno: Pon Nov 21, 2005 11:58 pm    Naslov sporočila:   Odgovori s citatom

Odvisno, kam delay_ms postaviš. Če ga postaviš v main proceduro, se bodo prekinitve brez problemov izvajale (svetujem ti, da se spoznaš z assemblerjem za PIC, ker ti bodo potem stvari veliko bolj jasne).
Če pa ga postaviš v interrupt, moraš vedeti, da se do konca izvajanja interrupt procedure vsi ostali interrupti začasno 'ugasnejo' in stvar ne deluje več tako kot bi morala.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 492 dni


Powered by phpBB © 2001, 2005 phpBB Group