Sari la conținut
ELFORUM - Forumul electronistilor

Proiect Vezi Muti


Liviu M

Postări Recomandate

@VM Aha, deci se confirma ce am scris in doo posturi mai sus (ai citit tot?) - ai probleme cu succesiunea operatiilor.

Hai sa-ti zic de ce (cred eu ca) nu e nici o problema.

1. La reset picul are toate porturile intrare. Deci problema cu starea incerta exista inainte sa fac eu portul iesire, trebuie "combatuta" hardware.

2. La 16F627, la reset, PORTA = 0xX0 (X e stare necunoscuta). Adica la reset RA0 = 0. Atata timp cat nu citesc portul,  nu vad de ce si-ar schimba valoarea si de ce, atunci cand il fac iesire, nu ar forta direct 0. De-aia am zis ca in cazul asta, intamplator, s-ar putea sa mearga.

Singura problema ar putea aparea la porturile care la reset n-au o stare stabila, da' pentru aia ti-am dat dreptate inca de la postul 17.

 

Deci, poate ca e cazul sa lasi tonul de "ba ce destept sunt, ziceti merci ca-mi tocesc tastatura sa va fac prosti" si sa te porti "normal".

 

@Marian: ai dreptate; de altfel i s-a mai zis.

Editat de Liviu M
Link spre comentariu

Da, pentru scopul pentru care a fost scris (mai tii minte care a fost? :limb:), da.

 

TRISx=0 si apoi pun PORTx=. 

 

Din motivele prezentate anterior (valoarea de reset a lui RA0), as zice da chiar si la exemplul tau cu bomba. Dar daca m-as juca cu bombe, as testa codul intai cu o bomba dezamorsata si as corecta eventualele probleme.

 

Am zis mai sus de cateva ori ca varianta cea mai corecta (sigura) e cea sugerata de tine (chiar nu reusesti sa pricepi ce scriu?), desi daca facem in continuare teoria chibritului, codul

TRISA=0;PORTA=0;CMCON=7;

mi se pare (pentru RA0) la fel de sigur ca cel sugerat de tine, desi succesiunea tris/port e cea "gresita".

Editat de Liviu M
Link spre comentariu
TRISA=0;PORTA=0;

Nu este sigur deloc.

Chiar nu vrei sa accepti ca teoria spune ca nu se face asa?

Evident ca "merge si asa" :)

 

Eu credeam ca astfel de lucruri tin de fundametele programarii unui PIC, nu de "teroria chibritului".

Dar hai sa auzim si alte pareri.

(sunt destui pe aici care se pricep sa sara cu aprecieri la persoana dar raman fara idei cand este vorba de ceva care tine strict de

scopul acestui forum)

Link spre comentariu

Datasheet spune asta la EXAMPLE 5-1: INITIALIZING PORTA

CLRF PORTA            ;Initialize PORTA by                      ;setting                      ;output data latchesMOVLW 0x07            ;Turn comparators off andMOVWF CMCON           ;enable pins for I/O                      ;functionsBCF STATUS, RP1BSF STATUS, RP0       ;Select Bank1MOVLW 0x1F            ;Value used to initialize                      ;data directionMOVWF TRISA           ;Set RA<4:0> as inputs                      ;TRISA<5> always                      ;read as ‘1’.                      ;TRISA<7:6>                      ;depend on oscillator                      ;mode

Dar marturisesc ca si eu fac precum Liviu: TRISx, CMCON, PORTx... adica exact invers decat zice Microchip. Marturisesc, cand lucrez cu bombe, intai incerc cu bombe oarbe :limb: .

 

Daca asta voiai sa zici, coane VM, mult ti-ar mai fi luat... sa ne zici ce vrei. Ai probleme de comunicare; ia-o ca un sfat.

 

Nu stiu de ce, dar imi pari foarte familiar cu modul de adresare. Sa fii tu brad de pe topicul lui yo6pir cu ceasul, ca identic te comporti.

Link spre comentariu
TRISA=0;PORTA=0;
Chiar nu vrei sa accepti ca teoria spune ca nu se face asa?

 

Orice teorie are o "motivatie" si in spate si "exista" intr-un context. Daca "satisfaci" motivatia altfel, teoria poate sa nu mai fie valabila/sa nu mai fie necesara.Teoria pe care o "promovezi" tu e "trebuie ca PORTA sa fie intr-o stare definita si care sa ne convina cand facem TRISA = 0".In bucatica de cod pe care ai masacrat-o tu mai sus (ai pierdut o treime pe drum :limb:),eu m-am folosit de o alta "teorie" care zice "dupa reset porturile RA... sunt alocate comparatorului".Asa ca bucata mea de cod (completa) poate fi interpretata ca "trebuie ca PORTA sa fie intr-o stare definita si care sa ne convina cand "activam" iesirile digitale".Deci, cat timp iesirile digitale sunt "dezactivate", nu conteaza succesiunea tris-port.Cu alte cuvinte, o teorie e OK atunci cand stii ce sa faci cu ea. Altfel e, asa cum ziceam si mai sus, teoria chibritului. Adica pierdere de vreme.Cu alte cuvinte, am pierdut cu totii atata vreme pentru o problema scoasa din context.

Editat de Liviu M
Link spre comentariu

@VM Ca sa nu mai pierdem vremea cu discutii sterile, propun sa implementezi montajul din primul post si sa-mi demonstrezi cu oscilograme ca programul nu functioneaza corect (ca intre comanda TRISA=0 si comanda PORTA=0 apar pulsuri parazite).Ce zici, te incumeti?Ca sa-ti fie mai usor, am modificat programul astfel incat sa genereze pe portul RB0 un puls de trigger pentru osciloscop. Am modificat programul anterior in asa fel incat portul B sa fie corect configurat, portul A ramanand ca la inceput.LE Sper ca observi ca am pastrat varianta cea mai defavorabila mie, da? Adica nici macar n-am mutat CMCON=7 dupa PORTA=0 (ultima "disputa").

/*  * File:   ledVM.c * Author: liviu * * Created on February 14, 2015, 4:00 PM * Copyright (c) Liviu M  ledVM is free software: you can redistribute it and/or modify  it under the terms of the GNU General Public License as published by  the Free Software Foundation, either version 3 of the License, or  (at your option) any later version.  ledVM is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  GNU General Public License for more details.  For the GNU General Public License see <http://www.gnu.org/licenses/>. */// Bitii de configurare; generati automat de mplabx#pragma config FOSC = INTOSCIO  // Oscillator Selection bits (INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN)#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)#pragma config PWRTE = ON       // Power-up Timer Enable bit (PWRT enabled)#pragma config MCLRE = ON       // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR)#pragma config BOREN = ON       // Brown-out Detect Enable bit (BOD enabled)#pragma config LVP = OFF         // Low-Voltage Programming Enable bit (RB4/PGM pin has PGM function, low-voltage programming enabled)#pragma config CPD = OFF        // Data EE Memory Code Protection bit (Data memory code protection off)#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)#include <xc.h> //fisier header pe baza caruia XC ajunge la definitiile specifice fiecarui controller in parte#define _XTAL_FREQ 4000000  //frecventa oscilatorului intern. Necesara functiei/macro-ului __delay_ms()void chipInit(void); //functie in care realizez initializarea circuitului - directie pini, comparator...                     // aici o declar ca sa o pot folosi in main, definitia (implementarea) fiind facuta dupa main()/* *  */void main(void) {  //functia main. Nu trebuie sa lipseasca din nici un program    chipInit(); //functia mentionata anterior    while(1){  //bucla infinita        PORTAbits.RA0 ^= 1;  //XOR logic. (xor 1) e operatia de negare/inversare a unui bit        __delay_ms(300);    }}void chipInit(void){    PORTB=0; //all low    TRISB = 0; //all outputs    PORTBbits.RB0 = 1;    TRISA = 0; //all outputs    CMCON = 7; //comparator disabled    PORTA=0; //all low }
Editat de Liviu M
Link spre comentariu

Ai pastrat varianta postata initial. Cea gresita.

NU am inteles cum de am extras eu din context altceva (ca doar nu suntem si aici ca la latrina3).

nu am osciloscop. dar se poate ca RA0 sa fie conectat la un pin care poate genera o intrerupere si sa vedem ce se intampla.

 

Vad ca sunteti tare agitati cand se vorbeste desprea altceva decat despre: Flocicode, basic si , evident, "ceasuri cu cuci".

 

Daca tot m-ai trimis la RTFM , hai sa mai citim si ceva inainte de a face experimente:

 

Note:

It is recommended that when initializing the port, the data latch (PORT register) should be initialized first,

and then the data direction (TRIS register).

This will eliminate a possible pin glitch, since the PORT data latch values power up in a random state.

 

Asta zice producatorul.

Nu este greu de gasit. Pe google. Acolo este TFM. nu?

Editat de Vezi Muti
Link spre comentariu

Ultimul post pe care ti-l adresez, ca vorbim unul pe langa altul.

Da, partea cu TRISA/PORTA e cea "gresita", ai fi aflat asta daca citeai prima fraza din postul respectiv. Te-am rugat sa testezi ca sa vezi ca nu ai probleme cu poertul RA0 chiar in condiile initializarii "gresite" (pana la proba contrara, insist sa consider initializarea OK).

Da, ai dreptate, producatorul recomanda succesiunea mentionata de tine (de altfel sunt macar 3 posturi in care am zis asta -da, ai dreptata, adica-, da' se pare ca nu citesti chiar tot ce scriu). Asta e o recomadare generala, pentru ca producatorului ii e mai simplu sa zica "faceti asa cu toate porturile" decat sa zica altceva pentru fiecare controller/fiecare port in parte.

Revenind la cazul nostru particular, tot producatorul zice ca:

- la 16F627 valoarea de reset a lui RA0 e 0. Adica o valoare cunoscuta si stabila. Asa ca motivatia cu "power up glitch" nu prea tine (tot producatorul se lauda ca toate circuitele lui au power on reset).

- la 16F627, dupa un reset RA0 e alocat partii analogice. Asa ca succesiunea pentru RA0 TRISA/PORTA nu e hotaratoare, e hotaratoare succesiunea PORTA/CMCON.

- chiar daca am avea glitch-uri la alimentare/initializare, in aplicatia din programul initial nu conteaza. Si picul si ledul supravietuiesc, iar daca cineva testeaza circuitul asa cum l-am descris in primul post, n-o sa observe o eventuala sclipire de cateva microsecunde a ledului. In conditiile in care primul post nu avea nici pe departe pretentia unei "lectii de pic", "eroare" respectiva e chiar inofensiva.

 

In conditiile in care am zis chestia asta de mai multe ori da' ai ingnorat/n-ai citit ce-am scris, nu merita sa-mi mai pierd vremea cu tine.

Continua sa te legi de virgulele si mediile de dezvoltare ale celor care chiar fac ceva. De ceasuri nu zic nimic, ca si mie mi s-a cam luat de ele, :limb: da' e un forum liber, in care fiecare are dreptul sa posteze (pana si tu), atata timp cat se poarta civilizat (nu-s convins ca e cazul tau).

 

PS Din simpla curiozitate, ai vreo legatura cu sistemul de invatamant?

Link spre comentariu

Cred ca trebuie sa inchizi acest subiect.

Nu este nimeni interesat.

Am ajuns sa ne dam replici unul la altul.

Ai postat un cod simplu  si eu chiar aveam chef sa facem "teoria chibritului" pe el.

Nu merge.

ps: Nu am treaba cu sistemul de invatamant.

  Sau, mai bine zis, "prostitutie intelectuala" cum cred eu ca se poate denumi acum sistemul promovat prin multe unitati de invatamant din Romania.

Link spre comentariu

Stiu ca am zis ca nu-ti mai scriu, da' n-are legatura cu "dezbaterea" anterioara, asa ca...

eu chiar aveam chef sa facem "teoria chibritului" pe el.

Daca tot ai chef de teoria chibritelor/chibriturilor, in loc sa trolluezi prin diverse topicuri, nu mai bine faci tu un topic al tau in care sa faci teoria asta sub forma unor mici tutoriale/lectii?Vorbesc foarte serios, chiar a fost zilele astea o discutie la bodega despre lipsa unor astfel de materiale de pe forum.Promit ca la un astfel de topioc o sa incerc sa contribui numai "pozitiv".
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