Σελίδα 1 από 2 1 2 ΤελευταίαΤελευταία
Εμφάνιση αποτελεσμάτων : 1 έως 10 από 17

Θέμα: PIC16F877A EEPROM write (no write δλδ...)

  1. #1
    Μέλος Το avatar του χρήστη bchris
    Όνομα
    Χρηστος
    Εγγραφή
    Nov 2011
    Περιοχή
    Lugano
    Μηνύματα
    2.104

    Προεπιλογή PIC16F877A EEPROM write (no write δλδ...)

    Παιδια θελω την βοηθεια σας...

    Εχω ενα προγραμματακι σε PIC16f877A.
    Το firmware με λιγα λογια αυτο που κανει ειναι να ελεγχει με ενα IR remote 4 LED 7 segment displays.
    Σε καποια φαση θελω ν' αποθηκευει στην EEPROM μερικες τιμες...
    Κι ετσι αρχισε ο καυγας

    Το ρημαδι, δεν λεει με τιποτα να γραψει στην βρωμο-EEPROM

    Δοκιμασα τα παντα.
    Στο τελος, το εβαλα στην αρχη-αρχη να κανει μια δοκιμαστικη εγγραφη, αλλα παλι τιποτα!!!
    να προσθεσω οτι με τον ιδιο κωδικα, σε αλλη κατασκευη (παλι με το PIC16F877A), εγραφε μια χαρα.

    Επισης στο simulation (gpsim) επισης γραφει!
    Αν μπορειτε να δειτε κατι εσεις που εμενα μου ξεφευγει...

    to firmware:
    Κώδικας:
    	__CONFIG	_CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC  & _BODEN_ON & _LVP_ON
    
    
    ;;blah, blah blah...
    
    INIT
    ;======================================================
    ;			INITIALIZATION SECTION START
    ;======================================================
    	clrf		INTCON						; Disable all interrupts.
    	clrwdt									; Clear the Watchdog timer
    
    
    ; Before anything else, check if an EEPROM write
    ; got interrupted due to a reset.
    ;	BANKSEL		EECON1
    ;	btfss		EE_WRERR
    ;	goto		Normal_Init
    ;	bcf			EE_WRERR
    ;	PAGESEL		EE_DATA_WRITE
    ;	call		EE_DATA_WRITE
    
    
    ; *** IO Initialization ***
    Normal_Init
    	PAGESEL		$
    
    
    	BANKSEL		PORTA
    	clrf		PORTA
    	clrf		PORTB
    	clrf		PORTC
    	clrf		PORTD
    	clrf		PORTE
    
    	BANKSEL		ADCON1
    	movlw		0x06
    	movwf		ADCON1						; All ports digital
    	BANKSEL		ADCON0
    	bcf			ADCON0,0					; Shutdown ADC.
    	
    	BANKSEL		TRISA
    	clrf		TRISA						; PORTA output
    	movlw		B'00000001'					; All output but RB0
    	movwf		TRISB
    	clrf		TRISC	
    	clrf		TRISD
    	movlw		B'00000100'					; All output but RE2
    	movwf		TRISE
    				
    	BANKSEL		PORTA
    	clrf		PORTA
    	movlw		B'00100000'
    	movwf		PORTA						; All off but MAX_SCLK
    	clrf		PORTB						; All off
    	clrf		PORTC						; All off
    	clrf		PORTD						; All off
    	movlw		B'00000010'					; All off, MAX6957 disselected.
    	movwf		PORTE
    
    
    	bcf			T1CON,T1OSCEN				; Shutoff timer1 oscillator
    	bcf			T1CON,TMR1CS				; Timer1 internal clock source (every instruction)
    	clrf		TMR1H						; Initialize timer1 output
    	clrf		TMR1L						; Both LOW and HIGH
    	bcf			T1CON,TMR1ON				; Now timer1 inactive. Raise to activate.
    
    	bcf			OPTION_REG,INTEDG			; RB0/INT on falling edge
    ;	bsf			OPTION_REG,INTEDG			; RB0/INT on rising edge
    ;	bsf			INTCON,INTE					; Enable RB0/INT external interrupt
    	bcf			INTCON,PEIE					; Disable peripheral interrupts
    	bcf			INTCON,T0IE					; Disable timer0 interrupt (for now)
    	bcf			INTCON,RBIE					; Disable RB port change interrupts.
    ;	bsf			INTCON,GIE					; Enable interrupts in general
    
    
    
    
    ; MAX6957
    	; PORT CFG
    	movlw		0x09
    	movwf		MAX_CMD_ADDR
    	movlw		0x00
    	movwf		MAX_DATA
    	PAGESEL		MAX_TX
    	call		MAX_TX		
    
    
    	movlw		0x0A
    	movwf		MAX_CMD_ADDR
    	movlw		0x00
    	movwf		MAX_DATA
    	PAGESEL		MAX_TX
    	call		MAX_TX
    
    
    	movlw		0x0B
    	movwf		MAX_CMD_ADDR
    	movlw		0x00
    	movwf		MAX_DATA
    	PAGESEL		MAX_TX
    	call		MAX_TX	
    
    	movlw		0x0C
    	movwf		MAX_CMD_ADDR
    	movlw		0x00
    	movwf		MAX_DATA
    	PAGESEL		MAX_TX
    	call		MAX_TX
    
    
    	movlw		0x0D
    	movwf		MAX_CMD_ADDR
    	movlw		0x00
    	movwf		MAX_DATA
    	PAGESEL		MAX_TX
    	call		MAX_TX
    
    
    	movlw		0x0E
    	movwf		MAX_CMD_ADDR
    	movlw		0x00
    	movwf		MAX_DATA
    	PAGESEL		MAX_TX
    	call		MAX_TX
    
    
    	movlw		0x0F
    	movwf		MAX_CMD_ADDR
    	movlw		0x00
    	movwf		MAX_DATA
    	PAGESEL		MAX_TX
    	call		MAX_TX
    	; PORT CFG
    	
    	; Config
    	movlw		0x04
    	movwf		MAX_CMD_ADDR
    	movlw		0x01
    	movwf		MAX_DATA
    	PAGESEL		MAX_TX
    	call		MAX_TX
    	; 1:Display Test - 0:Normal 
    	movlw		0x07
    	movwf		MAX_CMD_ADDR
    	movlw		0x00
    	movwf		MAX_DATA
    	PAGESEL		MAX_TX
    	call		MAX_TX		
    	
    	PAGESEL		$
    	BANKSEL		remote_id
    	
    ;======================================================
    ;			INITIALIZATION SECTION END
    ;======================================================
    
    
    
    
    ;======================================================
    ;			MAIN PROGRAM LOOP
    ;======================================================
    ;------------------------------------------------------
    Main_Loop
    	clrf 		ir_repeat_timer
    	bcf			BLINK_0
    	bcf			BLINK_1
    	bcf			BLINK_2
    	bcf			BLINK_3
    	movlw		0
    	movwf		DigitToBlink
    	
    
    
    	BANKSEL		EECON1
    	btfsc		EE_WR						; In case there is another write 
    	goto		$-1							; operation, wait it out.
    ;	bcf			EE_PGD						; Point to data memory
    ;	bsf			EE_WREN						; Enable writes
    	bcf			INTCON,GIE					; Disable interrupts
    		
    	BANKSEL		EEADR
    	movlw		0x11
    	movwf		EEADR
    	movlw		0x06
    	movwf		EEDATA						; Data to be written.
    ;	call		EE_DATA_WRITE	
    
    
    	
    	BANKSEL		EECON2
    	bcf			EE_PGD						; Point to data memory
    ;	bsf			EE_WREN						; Enable writes
    ;	bcf			INTCON,GIE					; Disable interrupts
    	bsf			EE_WREN						; Enable writes
    	movlw		0x55						; EEPROM
    	movwf		EECON2						; write 
    	movlw		0xAA						; security
    	movwf		EECON2						; sequence
    		
    	bsf			EE_WR						; Start write operation
    ;	bsf			INTCON,GIE					; Enable interrupts
    	btfsc		EE_WR
    	goto		$-1							; Wait until write finishes
    	bcf			EE_WREN						; Disable further writes
    	BANKSEL		PIR2
    	bcf			PIR2,EEIF					; EEIF
    
    
    ;;blah blah blah....

    0 Not allowed! Not allowed!

  2. #2
    Μέλος
    Όνομα
    Γιώργος
    Εγγραφή
    Feb 2010
    Περιοχή
    Αθήνα
    Μηνύματα
    4.618

    Προεπιλογή

    Πρόσθεσε στο __CONFIG:

    Κώδικας:
     & _CPD_OFF
    που αφορά την δυνατότητα εγγραφής στην data eeprom και έλεγξε την κατάσταση κάθε configuration bit από το menu.

    0 Not allowed! Not allowed!

  3. #3
    Μέλος Το avatar του χρήστη bchris
    Όνομα
    Χρηστος
    Εγγραφή
    Nov 2011
    Περιοχή
    Lugano
    Μηνύματα
    2.104

    Προεπιλογή

    George, εισαι απαιχτος!

    Το εχω στο .asm, αλλα για καποιο λογο ειναι commented out:

    Κώδικας:
    ; Fuses
    
    
    	__CONFIG	_CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC  & _BODEN_ON & _LVP_ON
    ;	__CONFIG	_WRT_OFF & _CP_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC  & _BOREN_OFF & _LVP_OFF & _DEBUG_ON &_CPD_OFF
    Μολις παω σπιτι θα το τσεκαρω.
    BTW, γιατι η χαζομαρα το gpsim το εγραψε στα @@ του αυτο ????

    0 Not allowed! Not allowed!

  4. #4
    Μέλος Το avatar του χρήστη bchris
    Όνομα
    Χρηστος
    Εγγραφή
    Nov 2011
    Περιοχή
    Lugano
    Μηνύματα
    2.104

    Προεπιλογή

    Δυστυχως... @@ μαντολες.



    Καμμια αλλη ιδεα?

    0 Not allowed! Not allowed!

  5. #5
    Μέλος
    Όνομα
    Γιώργος
    Εγγραφή
    Feb 2010
    Περιοχή
    Αθήνα
    Μηνύματα
    4.618

    Προεπιλογή

    Τα περισσότερα προβλήματα στη ροή προγραμμάτων PIC (τουλάχιστον 12F και 16F) είναι λόγω bank switching στο πρόγραμμα, τα registers και τα table read που αλλάζουν τον program counter. Υπάρχει πιθανότητα το simulator να τα δει "όπως το μάτι σου" και να μη πιάσει ένα τέτοιο λάθος. Ορθή η σκέψη σου να απομονώσεις τον κώδικα που θα γράψει στην εσωτερική EEPROM και όπως πάντα ότι γράφει το datasheet λειτουργεί!

    0 Not allowed! Not allowed!

  6. #6
    Μέλος Το avatar του χρήστη bchris
    Όνομα
    Χρηστος
    Εγγραφή
    Nov 2011
    Περιοχή
    Lugano
    Μηνύματα
    2.104

    Προεπιλογή

    Τι να σου πω, αρχιζω να πιστευω οτι φταιει κατι στο mpalab ή στο computer... δεν ξερω.

    Δοκιμασα σε αλλο PIC16F877A (plcc44) -- τιποτα
    Δοκιμασα με pickit2 και στους δυο PIC16F877A (plcc & qfp44)....

    Τωρα θελω να βαλω μια ρουτινα να γραφει στην EEPROM και μετα να διαβαζει και αν συμφωνει ν' αναβει ενα LED, αλλα οχι DEBUG, release...

    0 Not allowed! Not allowed!

  7. #7
    Μέλος
    Όνομα
    Γιώργος
    Εγγραφή
    Feb 2010
    Περιοχή
    Αθήνα
    Μηνύματα
    4.618

    Προεπιλογή

    Μπορεί το "debug" να χαλάει το χρονισμό που αναφέρουν στο datasheet και να μη λειτουργεί.
    Γράψε τον κώδικα του datasheet, βάλτο να τρέξει ως "release", και μετά κάνε "read EEPROM" από το MPLAB.

    Επίσης γνωρίζεις ότι μπορείς να γράψεις στην εσωτερική EEPROM με data στον κώδικά (με .org 0x2100);
    Με αυτό τον τρόπο μπορείς να δοκιμάσεις ρουτίνες ή να έχεις φορτωμένη από πριν κάποια παράμετρο.

    0 Not allowed! Not allowed!

  8. #8
    Μέλος Το avatar του χρήστη klik
    Όνομα
    just a click away
    Εγγραφή
    Oct 2009
    Περιοχή
    Θεσσαλλλονίκη
    Μηνύματα
    2.555

    Προεπιλογή

    Και εγώ θα πρότεινα από το .asm (με χρήση data στο 0χ2100, όχι με εντολές) ή στο .hex να γράψεις στην eeprom και να δοκιμάσεις τις ρουτίνες ανάγνωσης σου αν λειτουργούν σωστά.
    Τώρα δεν ξέρω τι σημαίνουν τα
    Κώδικας:
    bsf            EE_WREN
    και πολλά άλλα τέτοια (με άλλα bit που έχεις βάλει).
    Εγώ ξέρω ότι πρέπει να είναι
    Κώδικας:
    bsf EECON1,WREN
    βέβαια μπορεί να έχεις κάνει define το EE_WREN σε EECON,WREN αλλά δεν είδα κάτι τέτοιο στον κώδικα που παρέθεσες.

    0 Not allowed! Not allowed!

  9. #9
    Μέλος
    Όνομα
    Σεραφειμ
    Εγγραφή
    Sep 2011
    Περιοχή
    Αθήνα
    Μηνύματα
    141

    Προεπιλογή

    Για να μην ανοίγω καινούριο ποστ μια ερώτηση και από μένα.
    Προσπαθώ να γράψω ένα πικ 16F628A με το pickit2 v.2.61, αλλά μου βγάζει μήνυμα αποτυχίας στη διεύθυβση 0χ000001 με ένα .hex ή στη διεύθυνση 0χ000000 με άλλο hex, παρόλο που κάνει erase kai ta verifiy blank check δείχνουν εντάξει. Τι κάνω? Πετάω το πικ ή πρέπει να κάνω κάτι άλλο?

    0 Not allowed! Not allowed!

  10. #10
    Μέλος Το avatar του χρήστη bchris
    Όνομα
    Χρηστος
    Εγγραφή
    Nov 2011
    Περιοχή
    Lugano
    Μηνύματα
    2.104

    Προεπιλογή

    Δεν ξερω τι να πω....

    Το ελεγξα με το release και δεν γραφει στην EEPROM.
    Ωστοσο, με την χρηση του ORG 0x2100 kai DE 0xNN γραφει (pic1).
    Αλλα αυτο ειναι για static data

    Το ασχημο ειναι οτι οταν παω να γραψω, χτυπαει το WRERR (pic2)

    Ανεβαζω το .ASM εδω, και αν θελει και μπορει καποιος, ας μου πει ρε παιδια αν δουλευει σωστα στο δικο σας.


    pic1.png
    pic2.png
    pic3.png

    ΥΓ:
    Γεωργιε, καλες διακοπες!
    Συνημμένα Αρχεία Συνημμένα Αρχεία

    0 Not allowed! Not allowed!

Σελίδα 1 από 2 1 2 ΤελευταίαΤελευταία

Παρόμοια Θέματα

  1. Flash rated to last 100 erase/write cycles
    By bchris in forum Εξαρτήματα & Datasheets
    Απαντήσεις: 1
    Τελευταίο Μήνυμα: 28-11-12, 18:05
  2. Pic16f877a και σειριακη
    By mike^^ in forum Μικροελεγκτές
    Απαντήσεις: 14
    Τελευταίο Μήνυμα: 12-08-11, 04:47
  3. PIC16F877A - LCD2x16
    By AR15 in forum Μικροελεγκτές
    Απαντήσεις: 15
    Τελευταίο Μήνυμα: 14-06-11, 09:22
  4. pic16f877a In-Circuit Serial Programming
    By esvvidi in forum Μικροελεγκτές
    Απαντήσεις: 16
    Τελευταίο Μήνυμα: 16-02-11, 13:53
  5. Απαντήσεις: 4
    Τελευταίο Μήνυμα: 09-05-09, 15:27

Δικαιώματα - Επιλογές

  • Δημιουργία θεμάτων: Όχι
  • Υποβολή μηνυμάτων: Όχι
  • Σύναψη αρχείων: Όχι
  • Επεξεργασία μηνυμάτων: Όχι
  •  
  • BB code: σε λειτουργία
  • Smilies: σε λειτουργία
  • [IMG]: σε λειτουργία
  • [VIDEO] code is σε λειτουργία
  • HTML: εκτός λειτουργίας