Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

PIC PWM --> eeprom

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] PIC PWM --> eeprom

Messaggioda Foto UtenteGabrieleb » 22 feb 2012, 13:43

Buon giorno a tutti

Mi capita una cosa strana su un programma per pic16f874 .

Prima di potere scrivere sulla eeprom devo disabilitare il timer2
del PWM per poi riabilitarlo all' uscita della routine di scrittura .
Qualcuno sa darmi qualche indicazione ?
Il sistema funziona bene anche cosi ma la cosa mi ha incuriosito.

ciao
Gabriele
Avatar utente
Foto UtenteGabrieleb
110 1 5
Frequentatore
Frequentatore
 
Messaggi: 115
Iscritto il: 22 ott 2009, 19:27

0
voti

[2] Re: PIC PWM --> eeprom

Messaggioda Foto Utentec1b8 » 22 feb 2012, 14:02

Non è che sia attivo l'interrupt sul timer2?
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

0
voti

[3] Re: PIC PWM --> eeprom

Messaggioda Foto UtenteGabrieleb » 22 feb 2012, 17:35

E' stata una delle prime verifiche
PIE1=20h
PIE2=00h
INTCON=E0h
uso l'interrupt per la ricezione dall'UART ed il timer0 che peraltro continuano a funzionare regolarmente

grazie

ciao
Avatar utente
Foto UtenteGabrieleb
110 1 5
Frequentatore
Frequentatore
 
Messaggi: 115
Iscritto il: 22 ott 2009, 19:27

0
voti

[4] Re: PIC PWM --> eeprom

Messaggioda Foto UtentePaolino » 23 feb 2012, 10:29

La cosa è curiosa. Bisognerebbe verificare se c'è qualche "Silicon Errata" che parla di questa cosa. Tieni però conto che, il datasheet, dice che andrebbero comunque disabilitati gli interrupt, e indica così i passi da seguire per scrivere in EEPROM:

The steps to write to EEPROM data memory are:
1. If step 10 is not implemented, check the WR bit
to see if a write is in progress.
2. Write the address to EEADR. Make sure that the
address is not larger than the memory size of
the PIC16F87X device.
3. Write the 8-bit data value to be programmed in
the EEDATA register.
4. Clear the EEPGD bit to point to EEPROM data
memory.
5. Set the WREN bit to enable program operations.
6. Disable interrupts (if enabled).
7. Execute the special five instruction sequence:
• Write 55h to EECON2 in two steps (first to W,
then to EECON2)
• Write AAh to EECON2 in two steps (first to
W, then to EECON2)
• Set the WR bit
8. Enable interrupts (if using interrupts).
9. Clear the WREN bit to disable program operations.
10. At the completion of the write cycle, the WR bit
is cleared and the EEIF interrupt flag bit is set.
(EEIF must be cleared by firmware.) If step 1 is
not implemented, then firmware should check
for EEIF to be set, or WR to clear, to indicate the
end of the program cycle.


Non vorrei che, per qualche ragione interna, il PIC tenga conto del bit TMR2IF per la generazione dell'interrupt anche se in effetti non lo hai abilitato.

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,0k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4197
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[5] Re: PIC PWM --> eeprom

Messaggioda Foto UtenteGabrieleb » 23 feb 2012, 14:15

Il codice che ho utilizzato è il seguente:

;Entra con w=eeprom_address scrive il dato contenuto in ee_data
Codice: Seleziona tutto
wree
   bsf    STATUS, RP1          ;
   bcf    STATUS, RP0          ; Select Bank 2
   movwf    EEADR             ; indirizzo eeprom
   movfw    ee_data             ; dato da scrivere
   movwf    EEDATA             ;
   bsf    STATUS, RP0          ; Select Bank 3
   bcf    EECON1, EEPGD          ; Point to DATA memory
   bsf    EECON1, WREN          ; Enable writes
   bcf    INTCON, GIE          ; Disable Interrupts
   movlw    55h             ;
      movwf    EECON2             ; Write 55h
   movlw    AAh             ;
   movwf    EECON2             ; Write AAh
   bsf    EECON1, WR          ; Set WR bit to begin write
   bsf    INTCON, GIE          ; Enable Interrupts
   btfsc   EECON1,WR         ; Skip se ha finito di scrivere.
   goto   $-1
   bcf    EECON1, WREN          ; Disable writes
   banksel   0x000            ; Select Bank 0
   return


chiedo scusa per quel " goto $-1 " (che peraltro ho visto più volte in rete) ma è proprio la che il programma si " inlooppa " e non esce più se il timer2 è abilitato.

X Paolino - Il datasheet in mio possesso non riporta a sequenza da te citata ma riporta solo un esempio che utilizza SLEEP per attendere un interrupt alla fine della scrittura ( cosa che voglio provare ) ma ti chiedevo se il datasheet in tuo possesso è il DS30292A .

Grazie
Ciao
Ultima modifica di Foto UtentePaolino il 23 feb 2012, 14:16, modificato 1 volta in totale.
Motivazione: Usare i tag [code] e [/code] per inserire il codice.
Avatar utente
Foto UtenteGabrieleb
110 1 5
Frequentatore
Frequentatore
 
Messaggi: 115
Iscritto il: 22 ott 2009, 19:27

0
voti

[6] Re: PIC PWM --> eeprom

Messaggioda Foto UtentePaolino » 23 feb 2012, 14:19

Il datasheet che ho aperto è questo.
Sullo stesso documento trovi anche questo esempio:

Codice: Seleziona tutto
BSF STATUS, RP1 ;
BSF STATUS, RP0 ;Bank 3
BTFSC EECON1, WR ;Wait for
GOTO $-1 ;write to finish
BCF STATUS, RP0 ;Bank 2
MOVF ADDR, W ;Address to
MOVWF EEADR ;write to
MOVF VALUE, W ;Data to
MOVWF EEDATA ;write
BSF STATUS, RP0 ;Bank 3
BCF EECON1, EEPGD ;Point to Data memory
BSF EECON1, WREN ;Enable writes
;Only disable interrupts
BCF INTCON, GIE ;if already enabled,
;otherwise discard
MOVLW 0x55 ;Write 55h to
MOVWF EECON2 ;EECON2
MOVLW 0xAA ;Write AAh to
MOVWF EECON2 ;EECON2
BSF EECON1, WR ;Start write operation
;Only enable interrupts
BSF INTCON, GIE ;if using interrupts,
;otherwise discard
BCF EECON1, WREN ;Disable writes


Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,0k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4197
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti