Pagina 1 di 2

I2C tra PIC16F84 e eeprom 24C02

MessaggioInviato: 23 feb 2012, 22:09
da simona85
Ciao a tutti, qualcuno mi puoi aiutare ^_^ ? uso mikrobasic, ho necessità di scrivere dei dati su una eeprom esterna 24c02 tramite un pic16f84. è un mese che ci sbatto la testa e sono ferma :(
Il codice che riporto sotto l'ho preso dal mio libricino "programmazione basic per PIC", ma al momento di compilare il programma mi da errore (come se le istruzioni esate sono estranee a mikrobasic) . allego anchela foto dell'errore

Codice: Seleziona tutto
program i2c01
trisb=0 'porta b come uscita
portb=0 'azzero porta b
delay_ms(2000) 'pausa 2 sec
soft_i2c_config(porta, 0, 1) 'configura eeprom su porta, sda su ra0 e scl su ra1
soft_i2c_start 'segnale di start via i2c
soft_i2c_write($a0) ' invia un comando alla eeprom
soft_i2c_write(0) 'invia indirizzo di memorizzazione
soft_i2c_write(83) 'invio dato lettera S alla eeprom
soft_i2c_stop 'invia segnale di stop via i2c
delay_ms(2000) 'pausa 2 sec
end.


errore mikrobasic i2c.jpg
immagine errore
errore mikrobasic i2c.jpg (103.94 KiB) Osservato 7266 volte

Re: I2C tra PIC16F84 e eeprom 24C02

MessaggioInviato: 24 feb 2012, 9:49
da c1b8
A me non risulta che la soft_i2c_config esista, dovresti sostituirla con la Soft_I2C_Init() in questo modo:
Codice: Seleziona tutto
'Soft_I2C pinout definition
dim Soft_I2C_Scl               as sbit at RA1_bit       
dim Soft_I2C_Sda               as sbit at RA0_bit       
dim Soft_I2C_Scl_Direction as sbit at TRISA1_bit
dim Soft_I2C_Sda_Direction as sbit at TRISA0_bit
'End of Soft_I2C pinout definition
Soft_I2C_Init()

Esempio tratto da qui

Re: I2C tra PIC16F84 e eeprom 24C02

MessaggioInviato: 24 feb 2012, 14:20
da aduri
Ciao, forse sbaglio ma il pic16f84A non ha il modulo MSSP e quindi non puoi usare la libreria I2C se compri un PIC con la MSSP ti togli da molti guai altrimenti devi farti il sw tu analizzando il protocollo e le tempistiche.

Qua sotto c'e' l'esempio preso da MKB vers. 7.0 (io non uso la vers. PRO) per un PIC16F877A e EEPROM 24c02.

ciao
Antonio

Codice: Seleziona tutto
' *
' * Project name:
'     I2c_Simple (Simple test of I2C library routines)
' * Copyright:
'     (c) mikroElektronika, 2008
' * Revision History:
'     20080225:
'       - initial release.
' * Description:
'     This program demonstrates usage of the I2C library routines in mikroBasic. It
'     establishes I2C bus communication with 24C02 EEPROM chip, writes one byte
'     of data on some location, then reads it and displays it on PORTB.
' * Test configuration:
'     MCU:             PIC16F877A
'     Dev.Board:       EasyPIC5
'     Oscillator:      HS, 08.0000MHz
'     Ext. Modules:    mE EEPROM Board(24C02)
'     SW:              mikroBasic v7.1
' * NOTES:
'     - Connect EEPROM extra board on PORTC.
'     - Pull-up I2C communication lines (RC3 and RC4) and turn off PORTC LEDs (board specific).
' *

program I2c_Simple

main:
  PORTB = 0
  TRISB = 0                 ' Configure PORTB as output

  I2C_Init(100000)          ' initialize I2C communication
  I2C_Start()               ' issue I2C start signal
  I2C_Wr($A2)               ' send byte via I2C  (device address + W)
  I2C_Wr(2)                 ' send byte (address of EEPROM location)
  I2C_Wr($F0)               ' send data (data to be written)
  I2C_Stop()                ' issue I2C stop signal

  Delay_100ms()

  I2C_Start()              ' issue I2C start signal
  I2C_Wr($A2)              ' send byte via I2C  (device address + W)
  I2C_Wr(2)                ' send byte (data address)
  I2C_Repeated_Start()     ' issue I2C signal repeated start
  I2C_Wr($A3)              ' send byte (device address + R)
  PORTB = I2C_Rd(0)        ' Read the data (NO acknowledge)
  I2C_Stop()               ' issue I2C stop signal
end.

Re: I2C tra PIC16F84 e eeprom 24C02

MessaggioInviato: 24 feb 2012, 14:30
da simona85
Grazie mille! maaaa..... cos'è questo MSSP :?: ??? non sono ancora arivata al livello "elite" dei PIC!! XD

Re: I2C tra PIC16F84 e eeprom 24C02

MessaggioInviato: 25 feb 2012, 13:37
da c1b8
Il MASTER SYNCHRONOUS SERIAL PORT MODULE (MSSP) è una componente hardware integrata in alcuni micro che consente la gestione di comunicazioni seriali tra dispositivi e consente la comunicazione con protocco I2C.
Per i micro sprovvisti di tale modulo le comunicazioni seriali devono essere implementata tramite routine software.
Per questo scopo il mikrobasic mette a disposizione 2 librerie per le comunicazioni I2C: una libreria per i micro provvisiti di modulo MSSP ed una per i micro che ne sono sprovvisti.
Le funzioni che hai utilizzato nell'esempio sono della libreria per i moduli sprovvisti (le funzioni hanno infatti il previsso "Soft_"), mentre l'esempio di Foto Utenteaduri si riferisce alla libreria da utilizzare con i micro dotati di MSSP (infatti le funzione non hanno il prefisso "Soft_").

Re: I2C tra PIC16F84 e eeprom 24C02

MessaggioInviato: 26 feb 2012, 10:28
da aduri
Come sempre, l'ottimo c1b8, ha ragione, ecco il sw preso dagli esempi per i PIC sprovvisti di seriale hw sempre vers. 7.0.
Mi giustifico :oops: dicendo che non ho mai avuto bisogno di usare la seriale col pic16f84A e quindi non ho fatto caso alle 2 librerie.

ciao
Antonio

Codice: Seleziona tutto
program soft_i2c_test

dim ee_adr, ee_data as byte
dim jj as word

main:
  ' Initialize full master mode
  Soft_I2C_Config(PORTD, 3, 4)
  TRISC = 0                   ' PORTC is output
  PORTC = $FF                 ' Initialize PORTC
  Soft_I2C_Start()            ' Issue I2C signal: start
  Soft_I2C_Write($A2)         ' Send byte via I2C (command to 24cO2)
  ee_adr = 2
  Soft_I2C_Write(ee_adr)      ' Send byte (address for EEPROM)
  ee_data = $AA
  Soft_I2C_Write(ee_data)     ' Send data to be written
  Soft_I2C_Stop()             ' Issue I2C signal: stop

  for jj = 0 to 65500         ' Pause while EEPROM writes data
    nop
  next jj

  Soft_I2C_Start()            ' Issue I2C start signal
  Soft_I2C_Write($A2)         ' Send byte via I2C
  ee_adr = 2
  Soft_I2C_Write(ee_adr)      ' Send byte (address for EEPROM)
  Soft_I2C_Start()            ' Issue I2C signal: repeated start
  Soft_I2C_Write($A3)         ' Send byte (request data from EEPROM)
  ee_data = Soft_I2C_Read(0)  ' Read the data
  Soft_I2C_Stop()             ' Issue I2C signal: stop
  PORTC = ee_data             ' Display data on PORTC

noend: goto noend
end.

Re: I2C tra PIC16F84 e eeprom 24C02

MessaggioInviato: 3 apr 2016, 10:49
da pierpippo
Ciao a tutti, volevo fare anche io un programmatore che tramite il 16F84 scriva alcuni valori su una eprom 24lc02. Ma mentre mi è chiaro lo schema elettrico per collegare la eprom ad un PIC provvisto dell'hardware I2c (allego lo schema del circuito che avevo in mente) non mi è chiaro come sia lo schema elettrico per usare il 16F84. Mi potreste fare vedere lo schema che si utilizza?
Grazie di cuore per l'aiuto.
Pierpippo

Re: I2C tra PIC16F84 e eeprom 24C02

MessaggioInviato: 3 apr 2016, 13:54
da TardoFreak
Foto Utentepierpippo secondo me non hai neanche idea di cosa vuoi fare.
Dici che vuoi fare un programmatore: bene. Quindi si dovrà collegare ad un PC, o comunque dovrà avere un'interfaccia di qualche tipo (anche solo un pulsante con un LED) per caricare DA qualche parte il file da programmare DENTRO la EEPROM.
Quindi dovrà essere presente, chessò, una RAM abbastanza grande da farci contenere il dati da programmare, o uno slot per un'altra EEPROM da copiare ...
Nello schema vedo un micro ed una memoria. Vuoi fare un programmatore che s'inventa i dati e lei scrive ad capocchia sulla EEPROM?

Re: I2C tra PIC16F84 e eeprom 24C02

MessaggioInviato: 3 apr 2016, 17:27
da pierpippo
Ciao in effetti quello che voglio fare è poter scrivere in alcune posizioni di memoria sempre gli stessi valori. Quindi nel programmare il PIC gli dirò di scrivere quei dati in quelle posizioni di memoria.
Quindi non mi serve né un'altra eprom da cui copiare i valori né un PC. Voglio che sia stand alone. Inserisco la eprom nel programmatore, lo accendo e lui mi copia i dati in quelle posizioni di memoria della eprom. Ma i dati da copiare sono sempre gli stessi quindi li posso scrivere nel PIC.

Re: I2C tra PIC16F84 e eeprom 24C02

MessaggioInviato: 3 apr 2016, 19:20
da TardoFreak
E perché vuoi proprio usare il PIC16F84?
E' vecchio come il cucco (lo citano solo più a scuola) e costa uno sproposito.