Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

I2C tra PIC16F84 e eeprom 24C02

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] I2C tra PIC16F84 e eeprom 24C02

Messaggioda Foto Utentesimona85 » 23 feb 2012, 22:09

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 7264 volte
Avatar utente
Foto Utentesimona85
0 2
 
Messaggi: 2
Iscritto il: 23 feb 2012, 21:19

0
voti

[2] Re: I2C tra PIC16F84 e eeprom 24C02

Messaggioda Foto Utentec1b8 » 24 feb 2012, 9:49

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
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: I2C tra PIC16F84 e eeprom 24C02

Messaggioda Foto Utenteaduri » 24 feb 2012, 14:20

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.
Avatar utente
Foto Utenteaduri
435 1 5 10
Expert
Expert
 
Messaggi: 937
Iscritto il: 29 giu 2005, 23:13
Località: Genova

0
voti

[4] Re: I2C tra PIC16F84 e eeprom 24C02

Messaggioda Foto Utentesimona85 » 24 feb 2012, 14:30

Grazie mille! maaaa..... cos'è questo MSSP :?: ??? non sono ancora arivata al livello "elite" dei PIC!! XD
Avatar utente
Foto Utentesimona85
0 2
 
Messaggi: 2
Iscritto il: 23 feb 2012, 21:19

0
voti

[5] Re: I2C tra PIC16F84 e eeprom 24C02

Messaggioda Foto Utentec1b8 » 25 feb 2012, 13:37

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_").
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

[6] Re: I2C tra PIC16F84 e eeprom 24C02

Messaggioda Foto Utenteaduri » 26 feb 2012, 10:28

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.
Avatar utente
Foto Utenteaduri
435 1 5 10
Expert
Expert
 
Messaggi: 937
Iscritto il: 29 giu 2005, 23:13
Località: Genova

0
voti

[7] Re: I2C tra PIC16F84 e eeprom 24C02

Messaggioda Foto Utentepierpippo » 3 apr 2016, 10:49

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
Allegati
circ.jpg
Avatar utente
Foto Utentepierpippo
5 2
 
Messaggi: 19
Iscritto il: 2 apr 2016, 18:32

0
voti

[8] Re: I2C tra PIC16F84 e eeprom 24C02

Messaggioda Foto UtenteTardoFreak » 3 apr 2016, 13:54

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?
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[9] Re: I2C tra PIC16F84 e eeprom 24C02

Messaggioda Foto Utentepierpippo » 3 apr 2016, 17:27

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.
Avatar utente
Foto Utentepierpippo
5 2
 
Messaggi: 19
Iscritto il: 2 apr 2016, 18:32

0
voti

[10] Re: I2C tra PIC16F84 e eeprom 24C02

Messaggioda Foto UtenteTardoFreak » 3 apr 2016, 19:20

E perché vuoi proprio usare il PIC16F84?
E' vecchio come il cucco (lo citano solo più a scuola) e costa uno sproposito.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti