larks Inserito: 15 aprile 2006 Segnala Share Inserito: 15 aprile 2006 Ciao ragazzi ho bisogno di fare questo algoritmo: (scusate la lunghezza ma è solo dimostrativo)PROCESSOR 16F84 ;definisce il tipo di chip usatoRADIX DEC ;i numeri senza notazione si intendono decimaliINCLUDE "P16F84.INC" ;include nel sorgente il file relativo al chip usato__CONFIG 3FF3H ;configura i fusesORG 0CH ; scrittura var;------------------------------------------------------------; cpu equates (memory map)status equ 0x03portb equ 0x06eedata equ 0x08eeadr equ 0x09address equ 0x0cbyte equ 0x0dtrisb equ 0x86eecon1 equ 0x88eecon2 equ 0x89;------------------------------------------------------------; bit equatesrd equ 0wr equ 1wren equ 2rp0 equ 5;------------------------------------------------------------ORG 00H ; inizio programmabsf STATUS,RP0 ;seleziona il banco1 di memoriamovlw 00011111B ;configura le linee di I/O RAmovwf TRISA movlw 11000000B ;configura le linee di I/O RBmovwf TRISB bcf STATUS,RP0 ;seleziona il banco0 di memoriamovlw 0movwf PORTBstart: call read ;read test byte from data EEPROM movwf portb ;display test byte via LEDs; testedit:; btfss PORTB,7 ;leggi lo stato degli ingressi e se si desidera andare in edit salta se viene premuto ; goto testedit store: movlw 0x0f ;test data movwf byte movlw 0x00 ;test address movwf address call write ;write test byte to data EEPROM bsf status,rp0 ;to bank 1 wrcompl btfsc eecon1,wr ;test write complete? goto wrcompl bcf status,rp0 ;back to bank 0 goto start;------------------------------------------------------------read movf address,w ;get address movwf eeadr ;address to register bsf status,rp0 ;bank 1 bsf eecon1,rd ;read data EEPROM (RD bit will; be cleared in hardware) bcf status,rp0 ;return to bank 0 movf eedata,w ;data into W return ;return with data in W;------------------------------------------------------------write movf address,w ;get address movwf eeadr ;address to register movf byte,w ;get data movwf eedata ;data to register bsf status,rp0 ;to bank 1 bsf eecon1,wren ;enable write movlw 0x55 ;define 0x55 (per data book) movwf eecon2 ;to register movlw 0xaa ;define 0xaa (per data book) movwf eecon2 ;to register bsf eecon1,wr ;set WR bit to trigger write bcf eecon1,wren ;disable write (won't effect; this one) bcf status,rp0 ;back to bank 0 returnEND ;fine programmaall'inizio legge un dato nella eeprom (ind 0), poi quando viene spinto RB7 in pratica prende un dato da memorizzare (byte) e lo scrive nella eeprom interna (val=3) , poi al giro dopo lo visualizza leggendolo appunto, e in effetti funziona, il problema è che quando stacco l'alimentazione e la riattacco il dato memorizzato non c'è +, cioè non mi viene visualizzato subito come dovrebbe. Ma non dovrebbe essere non volatile? Sbaglio qualcosa? Magari c'è da settare qlc per renderla permanente?.Vi prego aiutatemi. Grazie in anticipo. Link al commento Condividi su altri siti More sharing options...
Randy76 Inserita: 15 aprile 2006 Segnala Share Inserita: 15 aprile 2006 ?_? Ma se non sto prendendo un granchio nella EEPROM, su quel processore salvi solo il programma; la memoria interna che usi è una Ram. Disalimentando il processore, chiaramente il programma resta, ma la ram si volatilizza, con tutti i suoi dati! Per fare quello che dici potresti archiviare il dato su una EEPROM esterna tipo le 27C, in IIC bus. Link al commento Condividi su altri siti More sharing options...
andry75 Inserita: 15 aprile 2006 Segnala Share Inserita: 15 aprile 2006 Attento alla scrittura, il pic impiega unn po' per farla, per scrivere nuovamente devi attendere che wr sia riportato a 0...Ti giro una rout che avevo scritto io;Prova di scrittura della EEPROM processor 16f628 LIST P=16F628, f=INHX8M #include p16f628.inc __config h'3f6d' org 0x0 goto ii org 0x10ii: clrwdt movlw 0x80 movwf 0x21 bsf STATUS,RP0 ;seleziono banco 1 movlw 0x00 ;indirizzo base eeprom movwf EEADR ; bcf STATUS,RP0 movlw 0x00 ;inizializzazione locazione 20 che movwf 0x20 ;sarà scritta in eepromi: movf 0x20,0 ;metto il dato da scrivere da 20 in w bsf STATUS,RP0 ;seleziono banco 1 bsf EECON1,WREN ;abilito scrittura movwf EEDATA ;carico il dato da scrivere bcf INTCON,GIE ;disabilito int movlw 0x55 ; movwf EECON2 ;procedura da fare sempre per scrivere movlw 0aah ;in eeprom movwf EECON2 ; bsf EECON1,WR ;comando scrivi,wr sarà messo a 0 al termine ;della scrittura bsf INTCON,GIE ;riabilito int bcf EECON1,WREN ;disabilito scrittura btfsc EECON1,WR ;attesa che la scrittura sia completata goto $-1 ;(WR riportato a 0) incf EEADR ;incremento l'indirizzo bcf STATUS,RP0 ;riseleziono banco 0 clrwdt incf 0x20 decf 0x21 skpz ;controllo se ho scritto 128 locazioni goto i ;se vero salto istruzione dopos: nop clrwdt goto s end Link al commento Condividi su altri siti More sharing options...
larks Inserita: 15 aprile 2006 Autore Segnala Share Inserita: 15 aprile 2006 Grazie mille andry per la rout in effetti mi serviva proprio, ma comunque è vero che la eeprom interna ovvero che renda permanenti le modifiche è solo per la parte di programma? Quindi se voglio salvare dei dati in modo permanente devo per forza interfacciargli una eeprom esterna? Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 15 aprile 2006 Segnala Share Inserita: 15 aprile 2006 Quindi se voglio salvare dei dati in modo permanente devo per forza interfacciargli una eeprom esterna? Link al commento Condividi su altri siti More sharing options...
Gariel Inserita: 15 aprile 2006 Segnala Share Inserita: 15 aprile 2006 Il pic16f84 ha 64 byte di eeprom, garantisce 1.000.000 di cicli lettura scrittura e ritenzione dati di 40 anni.A mio parere la logica del pulsante su RB7 è meglio invertirla (pull-up, che va a zero quando premuto) altrimenti all'accensione si corre il rischio di riscrivere la eeprom con un dato casuale contenuto in address.In tal caso naturalmente la riga di test diventa:testedit:btfsc PORTB,7 ;leggi lo stato degli ingressi e se si desidera andare in edit salta se viene premuto goto testeditCiao Link al commento Condividi su altri siti More sharing options...
dlgcom Inserita: 15 aprile 2006 Segnala Share Inserita: 15 aprile 2006 Il pic 16f84a ha 64 locazioni di memoria EEprom per i dati quindi non volatili .Puo essere che la scrittura on vada a buon fine ... Link al commento Condividi su altri siti More sharing options...
andry75 Inserita: 16 aprile 2006 Segnala Share Inserita: 16 aprile 2006 confermo 16f84 dotato di eeprom non volatile. Link al commento Condividi su altri siti More sharing options...
larks Inserita: 16 aprile 2006 Autore Segnala Share Inserita: 16 aprile 2006 Funzionaaaaaaaaaaaaaaa grande amici sono al settimo cielo mi sa che quella storia del bit tenuto a zero mi andava proprio a compromettere il prog. QUINDI ANCHE IL PIC 16F84 HA MEMORIA NON VOLATILE (testato personalmente cavando l'alimentazione).GRAZIE A TUTTI SIETE GRANDI. Link al commento Condividi su altri siti More sharing options...
Randy76 Inserita: 17 aprile 2006 Segnala Share Inserita: 17 aprile 2006 Buono a sapersi!Visto che qui ci sn tanti esperti (io posto nella sezione Tv e Monitor e qui seguo poco) chiedo anch'io una consulenza!Io ho il programmatore PicStart Plus, comprato originale con i suoi cd e tutto il resto. Funzionava egregiamente su un Pentium 60 con sistema operativo Win 98.Come mai che ora su questo AMD, con Win 2K, succede che quando vado a programmare un PIC16F84, anche nuovo, ricevo una sfilza di errori e dove per esempio dovrebbe scrivere FFFF scrive FF3F, fallendo quindi la programmazione e la relativa verifica? Qualcuno sa consigliarmi? Mi spiace dovere gettare via tutto Link al commento Condividi su altri siti More sharing options...
ziogiacomino Inserita: 18 aprile 2006 Segnala Share Inserita: 18 aprile 2006 Ciao Randy76, ma la comunicazione se la fai in seriale, con che baudrate la effettui, potrebbe essere un problema di velocità, prova ad abbassarla.Ciao Link al commento Condividi su altri siti More sharing options...
Randy76 Inserita: 21 aprile 2006 Segnala Share Inserita: 21 aprile 2006 Dovrebbe essere lo standard 9600.. hai per caso le impostazioni della porta seriale, baud rate, parità, ecc ecc da impostare nel pannello di controllo, per essere certo che sia compatibile con il mio picstart plus? Link al commento Condividi su altri siti More sharing options...
Randy76 Inserita: 24 aprile 2006 Segnala Share Inserita: 24 aprile 2006 Nessun consiglio? Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora