Vai al contenuto
PLC Forum


Programmazione pic - non mi fa i salti condizionati


mansell

Messaggi consigliati

Eccomi qui, domani laboratorio di sistemi a scuola, e sto ultimando un programma per domani. si tratta del classico garage da gestire con pic16f84a

Già la volta scorsa una volta scritto sul pic non succedeva niente...

lo simulo con tutti i simulatori trovati, con mplab, pic developement studio, pic simulator ide, ma nessuno, arrivato a un salto condizionato tiene conto che forse è meglio saltare.. ovviamente porto a uno o a zero il bit in questione ma niente!

magari sbaglio io a programmare...

gli date un occhiata?

a RA0 è collegato un sensore che si porta a uno quando una macchina in ingresso transita

a RA1 come sopra tranne che ha il sensore per le macchine in uscita

a RA4 un led che indica se il posteggio è pieno o ci sono posti

sulla porta B ho un decodificatore esterno 7 segmenti, per vedere i posti liberi

grazie per l'aiuto

            ORG	00H
            MOVLW	0EFH
            TRIS	PORT_A
            MOVLW	00H
            TRIS	PORT_B
            MOVLW	0FH
            MOVWF	0C	
            BCF	PORT_A,4
MAIN       MOVF	0C,0	
            MOVWF	PORT_B	
TEST       BTFSS	PORT_A,0	
            GOTO	ENTRA  
            BTFSC	PORT_A,1	
            GOTO  TEST  
ESCI       BTFSS	PORT_A,1	
            GOTO	ESCI  
            INCF	0C,1  
            GOTO	SEMAF  
ENTRA      BTFSS	PORT_A,0	
            GOTO	ENTRA  
            DECF	0C,1  
SEMAF      BTFSS	STATUS,2	
            GOTO  SEM_ROS  
SEM_VER    BCF	PORT_A,4	
            GOTO	MAIN  
SEM_ROS    BSF	PORT_A,4	
            GOTO	MAIN  
            END

GRAZIE MILLE A TUTTI!!!

Link al commento
Condividi su altri siti


beh, si ho provato ed è scritto pure nel post iniziale.. comunque il problema sembra risolto... copiando paro paro il programma da una stampa su carta del medesimo... qualche ritocchino e tutto si è risolto... grazie lo stesso

Link al commento
Condividi su altri siti

Mannaggia Mansell, sei studente e non scrivi nemmeno 1 riga di commento, mettiti nei nostri panni! Ricorda che un buon programma deve essere leggibile da tutti e anche da chi lo ha scritto se lo riprende dopo qualche tempo!

Non ho tempo di ricontrollare il tutto però verifica di aver settato bene i registri all'inizio, soprattutto quelli che gestiscono le porte di I/O. Se hai sbagliato direzione non riuscirai a discriminare lo stato dei segnali d'ingresso.

Link al commento
Condividi su altri siti

beh, i commenti c'erano, ma visto i problemi che ho avuto a impaginare il programma sul forum (sistemare le colonne, i tab non andavano) ho tagliato tutto...

le piccole correzioni... e chi se le ricorda... piccole migliorie... beh, non è che vada ancora tutto bene, ho un problema di rimbalzo in uno dei due pulsanti, metterò un piccolo ritardo credo.. consigli sul ritardo? 10us 0.1s? se volessi farlo con componenti (un condensatore e una resistenza vero?) collegati come? con che valori indicativamente?

Link al commento
Condividi su altri siti

occhio mansell so benissimo che non era il tuo intento ma una frase così suona come una bestemmia nel forum

Se hia trovato una soluzione da solo perchè non condividerla con gli altri aiutersti tutti a capire il problema e la strategia per risolverlo. Più che il programma commentato sarebbe bello avere due righe del tipo a me non funzionava questo per questo motivo e ho risolto così.

Anche se problema e soluzione sono banali io non mi vergognerei sai quante volte io ho perso tempo per un cavo staccato....

Link al commento
Condividi su altri siti

mansell+18/01/2008, 22:47--> (mansell @ 18/01/2008, 22:47)

Usando un micro la rete RC diventa inutile, il bello è proprio quello! smile.gif Metti un piccolo contatore SW che abilita il cambio stato solo se lo rileva per un tempo sufficientemente lungo, diciamo dai 10ms in su, dipende da quanto è ballerino il tuo pulsante. Se metti un tempo troppo alto avrai la sensazione che il tasto non risponda prontamente al comando.

Link al commento
Condividi su altri siti

Per postare il codice con i tab vari basta usare il tasto "CODE". Es..

{
   #asm
      btfss   port_b,0
      goto   end_int
   #endasm
      rx_temp ();      //lettura temperatura
      memo_temp();
   #asm
   end_int:
      nop
    #endasm
}

Se si chiede aiuto al forum è anche giusto dare comunicazione dei risultati e del modo in cui si risolto il problema, altrimenti ci si fa la nomina di "vampiro" e le risposte diventano sempre più scarse...

Se hai problemi di rimbalzi e vuoi filtrare dimentica i filtri Hw, è più semplice ed efficace effeture un filtro software.

Io uso, oramai da circa 30 anni, un metodo semplice. Acquisisco tutti gli ingressi a tempo fisso, diciamo ogni 10ms-20ms, poi confronto lo stato attuale con quello precedente. Se lo stato attulae coincide con quello precedente considero valido il vlaore. Variando il tmepo si appsentasce o alleggerisce il filtraggio. Per interfacciare contatti 10ms sono un tempo ottimo.

Link al commento
Condividi su altri siti

accacca+19/01/2008, 05:54--> (accacca @ 19/01/2008, 05:54)

davvero, non ricordo... ho fatto tante prove e alla fine non ricordo più in quale modo andava... dopo le due ore in laboratorio ne sono passate altre 4 di compiti in classe e interrogazione...

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...