Sari la conținut
ELFORUM - Forumul electronistilor

Exemple si notiuni de baza => Incepator


Marian

Postări Recomandate

Am si eu o intrebare legata de exemplul 3 ; codul ar fi acesta :

 

/*Header******************************************************/

 

void main() {

char TEST = 5; // Constant TEST = 5

enum outputs {RELAY = 3}; // Constant RELAY = 3

 

ANSEL = 0; // All I/O pins are configured as digital

ANSELH = 0;

PORTA = 0; // Reset port A

TRISA = 0xFF; // All portA pins are configured as inputs

PORTD = 0; // Reset port D

TRISD = 0b11110111; // Pin RD3 is configured as an output, while the rest are

// configured as inputs

 

OPTION_REG.F5 = 1; // Counter TMR0 receives pulses through the RA4 pin

OPTION_REG.F3 = 1; // Prescaler rate is 1:1

 

TMR0 = 0; // Reset timer/counter TMR0

 

do {

if (TMR0 == TEST) // Does the number in timer match constant TEST?

(PORTD.RELAY = 1); // Numbers match. Set the RD3 bit (output RELAY)

}

while (1); // Remain in endless loop

}

ma intereseaza in mod deosebit aceste linii:

 

OPTION_REG.F5 = 1; // Counter TMR0 receives pulses through the RA4 pin

OPTION_REG.F3 = 1; // Prescaler rate is 1:1

care ar fi sintaxa daca as vrea sa folosesc in loc de RA4 pinul RB4 sau orice alta intrare nefolosita ? este posibil sau RA4 este singura intrare ce poate fi desemnata ?

Link spre comentariu
  • Răspunsuri 102
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Marian

    53

  • Liviu M

    24

  • Mircea

    10

  • Vlad Mihai

    4

Top autori în acest subiect

Pentru microcontroller-ul despre care se vorbeste specific in acea carte, pentru pinul 6 sunt prezentate 3 functii:1.-Bitul 4 al portului A ( RA4 );2.-Intrarea timer-ului TMR0 ( T0CKI );3.-Iesirea pentru comparatorul C1 ( C1OUT );In codul prezentat se foloseste TMR0 deci RA4 este singurul port care poate fi desemnat acolo, a se consulta registrul Option_reg pentru acel uC pentru mai multe detalii.

Link spre comentariu

multumesc ! am inteles .

 

ar mai fi totusi ceva : la explicatiile privind registrul OPTION_REG exista aceste precizari :

 

 

T0CS - TMR0 Clock Select bit

0 - Pulses are brought to TMR0 timer/counter input through the RA4 pin.

1 - Timer uses internal cycle clock (Fosc/4).

 

 

daca in acest caz este folosit TMR0 , respectand cele de mai sus n-ar trebui ca sintaxa sa fie :

 

OPTION_REG.F5 = 0

Link spre comentariu

Scrie in exemplul dat de tine "OPTION_REG.F5 = 1; // Counter TMR0 receives pulses through the RA4 pin"adica impulsurile de ceas pentru incrementarea lui TMR0 sosesc de la o sursa externa de ceas prin pinul RA4.T0CS - TMR0 Clock Select bit1 - Pulses are brought to TMR0 timer/counter input through the RA4 pin - Folosire ceas exern prin Ra40 - Timer uses internal cycle clock (Fosc/4) - Folosire ceas intern .Asa ar fi corect pentru 16f887/877/628 etc. sau este vorba despre alt uc?

Link spre comentariu

Adica da.

Daca iuli09 a postat extrasul corect din data-sheet si se doreste clock extern pentru TMR0, atunci exemplul pare gresit si iuli09 are dreptate.

 

LE Despre ce controller e vorba?

Link spre comentariu

Este vorba despre PIC16F887 ( toata cartea respectiva se axeaza strict pe el ), iata un print din pdf-ul sau:

Posted Image

 

Am incadrat cu rosu functia apelata in cod, exemplul mi se pare totusi corect.

Link spre comentariu

Stai putin, nu am zis cele ce am spus sub forma acuzativa cumva la adresa ta, Doamne fere de asa ceva ca nu mi-as permite... :da A fost o mica confuzie la mijloc, dar pdf-ul ne scoate din incurcatura ca intotdeauna.

Link spre comentariu

Imi cer scuze, se pare ca am creat confuzie prin lipsa unor informatii esentiale : intr-adevar , este vorba despre PIC16F887 , microcontroller care sta la baza tuturor aplicatilor de pe acest site :

 

http://www.mikroe.com/products/view/285 ... ming-in-c/

 

la descrierea MCU , la capitolul "3.4 TIMER TMR0" se gaseste pasajul privind registrul OPTION_REG pe care l-am citat mai devreme :

 

 

T0CS - TMR0 Clock Select bit

0 - Pulses are brought to TMR0 timer/counter input through the RA4 pin.

1 - Timer uses internal cycle clock (Fosc/4).

 

Inteleg din datasheet-ul MCU mentionat mai sus de Marian ca de fapt lucrurile stau cam asa :

 

 

T0CS - TMR0 Clock Select bit

1 - Pulses are brought to TMR0 timer/counter input through the RA4 pin.

0 - Timer uses internal cycle clock (Fosc/4).

 

si este vorba de o eroare pe site ...

 

 

LE : le multumesc celor care mai avut rabdarea si bunavointa sa-mi raspunda !!!

Link spre comentariu

@marian: stiu ca n-ai avut "intentii rele", dar puteam sa ma abtin de la presupuneri care nu ajuta la nimic.@iuli09: cand ai dubii, primul loc in care te uiti e data-sheetul controlerului.

Link spre comentariu
  • 2 săptămâni mai târziu...
  • 2 săptămâni mai târziu...

Salutari tuturor.

 

Asa cum spuneam am in vizor un nou proiect, de fapt erau niste idei mai vechi de-ale mele, intentionam sa realizez niste dispozitive de masurat ESR si rezistente mici si sa ma folosesc de un indicator din ala analogic cu ac, dar facilitatile oferite de microcontrollere si LCD-uri plus faptul ca am finalizat deja cu succes un proiect m-a convins sa dezvolt ceva mai complex, un soi de multimetru cu urmatoarii parametrii masurabili ( evident ceea ce eu am nevoie ):

 

1.-Capacitate condensatori, probabil intre 1mF si 22 sau 40mF depinde de posibilitati. Am deja o punte LCF care poate masura cu precizie condensatori intre cativa pF si vreo cativa mF ( 6m parca ), vreau un capacimetru care sa masoare conzi mai mari. Solutia la care ma gandisem eu ar fi conectarea condensatorului de masurat intr-un circuit rezonant LC si uC-ul sa analizeze semnalul primit, sa sesizeze frecventa de rezonanta si sa calculele o capacitate tinand cont de valoarea fixa a L. Momentan este doar la stadiul de ideie de principiu, nu sunt sigur ce circuit LC as folosi mai precis insa problema si mai importanta ar fi faptul ca nu stiu cum as putea "convinge" uC-ul sa faca ceea ce am descris eu, si solicit ceva sfaturi, fie macar si linkuri catre documentatie unde se descrie ceea ce am eu nevoie.

 

2.-ESR condensatori, aici ca ideie de principiu ma gandeam sa folosesc un semnal PWM in contratimp alimentat dintr-un generator de curent constant care sa atace condensatorul de masurat, semnalul pwm la frecventa cat mai mare pentru a face reactanta cat mai nesemnificativa, si fiind contratimp/push-pull ar incarca simetric condensatorul, curentul constant ar genera o anumita tensiune pe ESR care ar fi citita de un AO cat mai rapid si amplificata intr-o variatie 0-5V in functie de valoarea ESR, Ca si gama de masurare marturisesc ca habar n-am ce ar fi cel mai potrivit, dar gandesc ca undeva intre 10m si 4 sau 500m ar fi suficient... Ce spuneti?

 

3.-Rezistenta de valoare mica, probabil intre 1 sau 10m Ohm si 1 sau 10 Ohm, aici ar fi mult mai simplu, un generator de curent constant alimenteaza rezistenta de masurat si se citeste caderea de tensiune, acuma nu stiu daca ADC-ul uC-ului poate lucra cu tensiuni mici ( foarte mici ) ca as citi direct rezistenta de masurat cu intrarea uC astfel incat sa nu mai folosesc alt AO care oricum ar trebui sa fie unul de precizie mare, daca nu merge fara AO atunci caut unul care fie sa aiba offset cat mai mic fie sa aiba posibilitate de reglare offset, probabil nu scap de necesitatea alimentarii duble da asta e doar un detaliu...

 

4.-Curent, am Ampermetru la multimetrele DT... dar nu sunt deloc satisfacut de precizia lor ( pretul lor mic spune suficient ), ideea de principiu e la fel de simpla, un shunt fix de pe care sa se citeasca caderea de tensiune un AO si la fel, sa o amplifice in gama 0-5V, acuma avand in vedere domeniul de interes 1mA-20A cel mai probabil va fi necesara impartirea acestuia in 2 subdomenii, spre exemplu 1mA-1A si 1A-20A, asta ar putea sa se faca fie prin folosirea unui shunt cat mai mic si comutarea amplificarii intre 2 valori, fie folosirea a 2 shunturi si o amplificare fixa, personal as tinde catre varianta a 2-a desi comutarea shunturilor probabil ca ar fi ceva mai problematica ( poate un releu ceva mai "fortos" ) insa ar fi mai dificila folosirea unui singur shunt pentru intreaga gama de masurat, as putea asigura 2 terminale diferite pentru fiecare shunt si sa notez in dreptul fiecaruia gama de masurare, AO sa fie conectat permanent sau comutabil la fiecare ( probabil mai degraba comutabil, in acelasi timp cu comutarea AO sa se comute si domeniul de afisaj pentru uC ). O alta chestiune de interes ar fi faptul ca vreau ca sa se poata masura la fel de bine atat Acc cat si Aca, pentru ambele ar fi cred eu suficient un singur AO cat mai rapid cu posibilitate de reglare offset sau cu offset cat mai mic, ce spuneti?

 

Pentru toate astea voi folosi un PIC16F877 si LCD 2x24, inca n-am decis ce cristal ( frecventa ), probabil 4 sau 8 Mhz ca din astea am. Ar iesi un dispozitiv destul de util cred eu, proiectul evident va fi unul public, eu ma voi ocupa de desenarea schemelor si proiectarea cablajului, de scrierea si ajustarea codului si la finalizare totul va fi facut public intr-un soi de proiect, momentan asa cum am spus sunt la stadiul de stabilire a schemei bloc, a principiilor/solutiilor alese, detalierea schemelor putand fi facuta ulterior. Astept comentariile voastre referitoare la tot ce am punctat aici, si va multumesc pentru atentia acordata mesajului meu.

 

Toate cele bune.

Marian.

Link spre comentariu

Daca vrei sa citesti tensiuni foarte mici, ar trebui sa folosesti referinta externa pentru precizie, asa citisem nu am pus in aplicare. 5/1024=0.004V prag (daca folosesti referinta interna adica cea de la tensiunea de alimentare), 1.024/1.024=1mV(daca folosesti referinta externa de 1.024 volti-nu am idee cum o poti obtine dar stiu ca sunt integrate speciale ce genereaza o tensiune foarte precisa-sau te joci cu tl431 ca e compensata si termic).

Cred ca punctele 2 si 3 ar merge sa fie 2 in 1, pentru ca ambele masoara o rezistensa foarte mica, pisica matache parca zicea ca masoara cu esr-metru si sunturile de valori foarte mici. Sper sa nu debitat vreo prostie pe aici.

Esr-metru avea nel_65 un proiect pe la rubrica proiectul meu. te poti inspira de acolo.

Link spre comentariu

Ma gandisem si eu la cumularea ESR cu rezistoare mici dar voi masura inevitabil si rezistente bobinate, alea la fel de inevitabil prezinta o anumita inductanta ( asa mica cum o fi ) ori ESR va lucra la minim 50Khz, probabil mai degraba spre 100Khz pentru o influenta cat mai mica a reactantei C, la frecvente asa mari inductanta aia poate cauza probleme, eu vreau sa evit asta, tocmai de aceea am ales domeniu CC pentru rezistentele mici, amplificatorul operational poate avea orice SR, important ar fi doar offsetul necesar cat mai mic. Apoi imi dau seama ca o problema ar fi precizia care trebuie sa fie foarte buna, 5/1024 nu e una stralucita deci probabil neaparat referinta externa, 431 ar fi cel mai potrivit poate, insa va fi destul de dificil sa o reglez la fix 1024mV multimetrele mele ma indoiesc ca ar avea o rezolutie de 1mV... aici astept sugestii de la voi.In incheiere, stiu de proiectul D-lui Nel65 dar marturisesc ca nu am reusit sa inteleg prea multe din schema montajului in care este conectat C de masurat, apoi vreau ca ce face, sa fie ceva inteles si gandit de mine.

Link spre comentariu
  • 4 săptămâni mai târziu...

Salutari. Sunt in faza de proiectare pentru un UPS de uz propriu care va fi dotat si cu un afisaj digital care printre altele va indica si valoarea tensiunii de la retea, si aici as avea nevoie de ceva sfaturi, mai precis cum credeti ca se poate face cel mai bine citirea retelei, eu ma gandisem la un traf mic alimentat de la retea cu un secundar de minim 5Vca, redresare si filtrare cu un condensator apoi citirea variatiei acelei tensiuni continue in functie de variatia retelei insa ma lovesc de problema timpului de raspuns, mai precis electroliticul folosit care daca este suficient de mic, sau ii asigur o sarcina permanenta care sa il descarce cat mai rapid ( deci raspuns bun la variatia retelei ) ar presupune sa am un riplu destul de mare si ma gandesc ca ADC-ul ar fi indus in eroare, daca ii pun o valoare suficienta incat sa nu am riplu atunci pierd mult din viteza de reactie in functie de variatia retelei... ma gandeam ca poate nici nu ar fi nevoie de condensator ci doar redresare pentru a nu avea semialternanta negativa si apoi mai multe citiri intr-un timp dat si determinarea valorii efective in funtie de varful detectat, ceva de genul tensiunea de varf impartita la 1,41, dar nu stiu sigur cum as putea implementa asta in soft, adica cum determin eu acel varf de tensiune ( al sinusoidei )? Ce spuneti, care ar fi o solutie viabila?

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări