Sari la conținut
ELFORUM - Forumul electronistilor

Multiplexare display 2 cifre 7 segmente - nelamurire


Vizitator adrian87

Postări Recomandate

Vizitator adrian87

Salutare!Sunt nou in lucrul cu microcontrolere. Ceea ce vreau sa realizez acum este un numarator care sa afiseze numere de la 0 la 99, pe un afisor cu 2 cifre. Mai jos am atasat codul pe care l-am scris. Am atasat si un screanshot cu simularea din proteus. In MPLAB am facut un debug folosind MPLAB SIM. Programul ruleaza dupa cum ma asteptam, cel putin cu MPLAB SIM. In proteus ma confrunt cu realitatea. Imi afiseaza cifre identice de fiecare data Ceea ce mi se pare ciudat este ca nu reuseste sa scrie pe portul A. Aveti idee cu ce gresesc? Sau ce ar trebui sa mai inteleg inainte de a finaliza cu succes acest mic proiect? INCLUDE "P16F628A.INC" CBLOCK 0x20 CIFRA_UNIT CIFRA_ZECI ENDC ORG 0x00 GOTO START ORG 0x04 GOTO TMR1_ROUTINE ;initializarea porturilorINIT_PORTS ;bank0 select CLRF STATUS CLRF PORTA CLRF PORTB ;bank1 select BSF STATUS, RP0 MOVLW 0x00 MOVWF TRISA MOVWF TRISB ;bank0 select CLRF STATUS RETURN ;initializare registrii asociati modulului timer1 INIT_TMR1 ;bank0 select BCF STATUS, RP1 BCF STATUS, RP0 ;---------------- BSF INTCON, GIE BSF INTCON, PEIE CLRF TMR1L CLRF TMR1H BCF PIR1, TMR1IF MOVLW 0x31 MOVWF T1CON ;bank1 select BCF STATUS, RP1 BSF STATUS, RP0 ;--------------- BSF PIE1, TMR1IE RETURN ;rutina de executat, odata ce se petrece intrerupereaTMR1_ROUTINE BCF PIR1, TMR1IF ;setare cifra unitati CLRW XORWF CIFRA_UNIT, 0 CALL TABELA MOVWF PORTB ;CLRF PORTA MOVLW 0x40 MOVWF PORTA ;-------------------- ;setare cifra zecilor CLRW XORWF CIFRA_ZECI, 0 CALL TABELA MOVWF PORTB ;CLRF PORTA MOVLW 0x80 MOVWF PORTA ;-------------------- INCF CIFRA_UNIT, F ;-------------------- MOVLW 0x0A XORWF CIFRA_UNIT, 0 BTFSS STATUS, Z RETFIE ;-------------------- MOVLW 0x00 MOVWF CIFRA_UNIT MOVLW 0x0A XORWF CIFRA_ZECI, 0 BTFSC STATUS, Z CLRF CIFRA_ZECI ;-------------------- INCF CIFRA_ZECI, F ;-------------------- CLRW RETFIE ;lookup table TABELA ADDWF PCL, F RETLW 0x3F RETLW 0x06 RETLW 0x5B RETLW 0x4F RETLW 0x66 RETLW 0x6D RETLW 0x7D RETLW 0x07 RETLW 0xFF RETLW 0x6F ;inceput programSTART CALL INIT_PORTS CALL INIT_TMR1 ;bank0 select BCF STATUS, RP1 BCF STATUS, RP0 MOVLW 0x00 MOVWF CIFRA_UNIT MOVWF CIFRA_ZECILOOP NOP GOTO LOOP END

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

Top autori în acest subiect

  • sofian

    1

  • puiu

    1

Top autori în acest subiect

ptr portul A trebuie setat ca intrari/iesiri sa fie digitale

parca codul asta este :nas:

movlw 0x07hmovwf CMCON

vad din poza ta "stack overflow" adica tot face apeluri de subrutine(call) si nu se mai intoarce

 

dupa ce setezi sa afiseze cifra pe digit 1 trebuie sa astepti putin (1mS) si dupa aia sa afisezi pe digit 2

poti face asa :

1.setezi intreruperile la 1mS

2.cind apare intreruperea afisezi digit 1 ,la urmatoare intrerupere afisezi digit 2, etc.

Link spre comentariu
Vizitator adrian87

Multumesc pentru sfaturi.Pana la urma am reusit sa obtin ceva functional, dar nu perfect. N-am reusit sa fac temporizarea cum trebuie, adica se observa cum se sting si se-aprind ledurile de la afisor, foarte repede. Felul in care mi-am realizat proiectul ma obliga sa folosesc acelasi oscilator si pentru pic si pentru tmr1, portul b fiind complet ocupat pentru afisor. Poate fi asta o problema? Acum am atasat un oscilator cu cuartz de 4MHz la pic. Ce inteleg eu pana in prezent :cry: este ca pic-ul executa 1.000.000 instructiuni pe secunda. Modulul tmr1 se incrementeaza independent de ce se-ntampla in microcontroler. Adica in timp ce se executa o instructiune in pic, in paralel si independent este incrementat si tmr1. Gresesc cumva?

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