Programmare i2c 24co2 con attiny85

salve a tutti, sono nuovo nel forum. da qualche tempo mi sono cimentato nella programmazione con arduino. Nel corso del progetto, avevo necessità di caricare un file .hex su un attiny85 affinchè successivamente venendo montato su una scheda a parte possa scrivere il suo contenuto su una eeprom 24c02. il problema è che non riesco a capire come fare per effettuare tale programmazione, ringrazio in anticipo coloro che mi aiuteranno!

Secondo me il ATtiny non é adatto per questo. Con un ATmega dovrebbe funzionare. Ciao Uwe

Gli Attiny85 non sono supportati ufficialmente dall'IDE di Arduino, serve un set di file aggiuntivi detto "core" per integrare il supporto. Questo pacchetto fornisce questi file per l'IDE 1.5.8 comprese anche alcune librerie aggiuntive che ti servono per gestire l'I2C con i Tiny, dato che queste MCU non integrano il supporto a questo bus in hardware e bisogna emularlo via software. All'interno della guida trovi anche i collegamenti per collegare il Tiny e programmarlo e tra gli esempi c'è anche la lettura/scrittura su una EEPROM I2C.

Ciao leo, grazie mille, ho appena scaricato il pacchetto da te indicato, ora provo a vedere se riesco a risolvere, ancora grazie mille.

leo ho letto la guida ma non ho capito una cosa. se ad esempio devo far si che il mio attiny con la pressione di un tasto copi il codice (.hex) di una eeprom 24c02 memorizzato sull'attiny, su un altra 24c02, come devo effettuare l'operazione? grazie in anticipo

Dimmi se ho capito: tu vorresti montare un ATtiny su uno zoccolo con affianco uno zoccolo con una memoria eeprom 24C02 e alla pressione di un punsante l'ATtiny deve trasferire il contenuto della propria eeprom su quella esterna. Oppure vuoi trasferire il contenuto tra due eeprom esterne?

Edit: Ma lo sketch che trasferisce i dati lo hai già o lo devi scrivere?

Fra97:
salve a tutti, sono nuovo nel forum.

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

Fra97: leo ho letto la guida ma non ho capito una cosa. se ad esempio devo far si che il mio attiny con la pressione di un tasto copi il codice (.hex) di una eeprom 24c02 memorizzato sull'attiny, su un altra 24c02, come devo effettuare l'operazione? grazie in anticipo

Il codice hex lo devi includere come file in fase di compilazione come un array di byte. All'avvio, leggi un pulsante collegato ad un pin dell Tiny (è una semplice digitalRead) e spedisci l'array, a singoli byte o a pagine, all'Attiny mediante I2C.

PaoloP: Dimmi se ho capito: tu vorresti montare un ATtiny su uno zoccolo con affianco uno zoccolo con una memoria eeprom 24C02 e alla pressione di un punsante l'ATtiny deve trasferire il contenuto della propria eeprom su quella esterna. Oppure vuoi trasferire il contenuto tra due eeprom esterne?

Edit: Ma lo sketch che trasferisce i dati lo hai già o lo devi scrivere?

io dovrei programmare la eeprom con la pressione di un tasto tramite attiny, e lo sketch non lo ho ancora, ho provato a cercare sia sul forum che su internet ma trovo solo codici incomprensibili.

io dovrei programmare la eeprom con la pressione di un tasto tramite attiny

Risposta:

leo72: Il codice hex lo devi includere come file in fase di compilazione come un array di byte. All'avvio, leggi un pulsante collegato ad un pin dell Tiny (è una semplice digitalRead) e spedisci l'array, a singoli byte o a pagine, all'Attiny mediante I2C.

lo sketch non lo ho ancora, ho provato a cercare sia sul forum che su internet ma trovo solo codici incomprensibili.

Questo è un altro paio di maniche ;)

ahaah si scusatemi, perchè ci sono alcune parti che su internet non mi sono chiare. ad esempio se deve scrivere su tutta la memoria e non solo su alcuni byte, per dirgli che deve compilare dall'inizio alla fine devo dargli dei riferimenti nei byte oppure basta solo che indirizzi il codice all'inizio? p.s. ora leo provo a rivedere dall'inizio nuovamente le direttive che mi hai inviato, può darsi abbia saltato un passaggio. intanto davvero grazie per l'aiuto a tutti quanti!

Come ti ho detto, esistono 2 modi per scrivere su quei chip:

leo72: spedisci l'array, a singoli byte o a pagine

L'invio di singoli byte si fa quando devi mandare pochi dati. Se ne devi mandare molti, conviene spedirli a "pagine", ossia a blocchi di 32/64 per volta (dipende dal chip, controlla sul datasheet). Perché conviene spedire una pagina intera se devi scrivere tanti byte? Perché la scrittura di una singola cella è molto lenta, si parla di millisecondi. Se dovessi scrivere 10000 byte per esempio potresti essere costretto ad aspettare anche diverse decine di secondi.

Leo per caricare qualsiasi sketch sull’attiny devo usare questa procedura da te descritta nella guida?

  1. collegate l’Arduino al PC;
  2. aprite l’IDE di Arduino;
  3. aprite lo sketch “ArduinoISP” da “File/Examples”;
  4. selezionate la vostra scheda Arduino da “Tools/Board” (UNO o 2009);
  5. selezionate la porta a cui è collegata l’Arduino da “Tools/Serial Port”;
  6. effettuate l’upload dello sketch.

Adesso è tempo di preparare l’ATtiny85
per la programmazione. Scollegate
l’Arduino e collegate il micro esterno
come in figura, con i seguenti
collegamenti:

PIN ATTINY85 PIN ARDUINO
4 GND
8 +5V
1 10
5 11
6 12
7 13

Ora chiudete l’IDE e collegate l’Arduino al PC.
Riaprite l’IDE e copiate lo sketch seguente, che servirà a far lampeggiare i LED:

nel mio caso dovrò caricare lo sketch appositamente creato, ma la procedura rimane invariata o per l’i2c è differente?

Fra97: Riaprite l'IDE e copiate lo sketch seguente

Tutto tranne questo passaggio dove nell'IDE caricherai il tuo sketch.

@Fra97: senti, perché qui sennò non ci capiamo per bene.. Ci spieghi esattamente cos'è che devi fare così almeno possiamo darti una mano più precisa?

leo72: @Fra97: senti, perché qui sennò non ci capiamo per bene.. Ci spieghi esattamente cos'è che devi fare così almeno possiamo darti una mano più precisa?

allora adesso spiegherò cosa devo fare. SCOPO: programmare un attiny85 tramite Arduino affinchè possa a sua volta, tramite la pressione di un tasto, scrivere sulla Eeprom 24c02 (256x8).

Nella scheda finale quindi avrò la Eeprom che fungerà da "slave", mentre l'attiny85 da "master". (mi sono già fornito di tutto l'occorrente dell'IDE consigliatomi da Leo necessario per tutti i passaggi) Leggendo il contenuto della Eeprom con icprog ho trovato le file di byte su cui dovrò operare.

Il dubbio arriva ora, io come faccio ad indirizzare la programmazione su quelle specifiche file? Nel senso, io dovrei creare uno sketch per l'attiny in modo tale che quando premo un tasto sulla scheda su cui verrà sormontato, lui scriva sulle file di byte della EEprom che mi interessano?

Grazie in anticipo e scusate se subito non mi ero spiegato bene.

p.s. ad esempio se io devo scrivere valori come 80,c0,c0,90,83,82,02,8c ( corrispondenti agli 8 bit della prima fila di byte) sulla prima e sulla terza fila di byte che icprog le nomina 0000 la prima e 0010 la terza, come dovrei impostare lo sketch? grazie ancora

La EEprom è ad accesso casuale e non sequenziale anche se vista come una unica sequenza di celle. Vedi l'esempio della libreria EEprom (http://arduino.cc/en/Tutorial/EEPROMWrite). Non so se sia utilizzabile con i tiny. Non l'ho mai provata. Comunque puoi costruirti un vettore bidimensionale che rappresenta le eeprom (righe e colonne) e scriverla in sequenza o come singola cella ottenendo l'indirizzo di scrittura dai due indici.

I caffè devi pagarli come tutti gli altri, ci sono persone che lavorano dietro ai distributori per portare a casa lo stipendio. Sai che stai cercando di fare una cosa ILLEGALE?

E' questo lo scopo?

a me serve come duplicatore, avevo visto un video in inglese di un ragazzo che riusciva a duplicare i contenuti delle eeprom e mi era piaciuto