deebae Inserito: 6 giugno 2006 Segnala Share Inserito: 6 giugno 2006 Ciao ragazzi, ho montato questo circuito su una breadboard:il programma del PIC è il seguente (lo scopo è quello di scrivere dei valori su una eeprom esterna 24LC32A):#include "pic1687x.h"#include "macro.h"#include "delay.c"#include "exteprom.c"#include "i2c.c"void main() {BYTE idDevice1;BYTE data1;WORD address1;ADCON0 = 0x00; // Disabilita A/D convertitoreADCON1 = 0x07; // Configura PortA come digitalePORTA = 0x00; // Reset ogni lineaPORTB = 0x00; // Reset ogni lineaPORTC = 0x00; // Reset ogni lineaTRISA = 0x00; // Tutte le porte definite come outputTRISB = 0x00; // Tutte le porte definite come outputTRISC = 0x00; // Tutte le porte definite come outputPORTB = 0b00000001; //lampeggio i led per provaDelayMs(250);PORTB = 0b00000000;DelayMs(250);PORTB = 0b00000001;DelayMs(250);PORTB = 0b00000000;DelayMs(250);DelayMs(250);I2cInitMaster(); // Init I2c in modalità masteridDevice1 = 0x00; // Identificativo del device1 address1 = 0x00AA; // Indirizzo della cella eeprom utilizzatodata1 = 0x60; // Valore da scrivere nella eepromPORTB = 0x00; // Reset ledDelaySec(1); ExtEpromWrite(idDevice1, address1, data1); // Scrive datoExtEpromWrite(idDevice1, 0x0001, 0x11); // Scrive datoExtEpromWrite(idDevice1, 0x0002, 0x12); // Scrive datoExtEpromWrite(idDevice1, 0x0003, 0x13); // Scrive datoExtEpromWrite(idDevice1, 0x00B2, 0x22); // Scrive datoExtEpromWrite(idDevice1, 0x00A0, 0x64); // Scrive datoExtEpromWrite(idDevice1, 0x00A1, 0x65); // Scrive datoExtEpromWrite(idDevice1, 0x00A0, 0x64); // Scrive datoExtEpromWrite(idDevice1, 0x00A2, 0x66); // Scrive dato//lampeggio il led alla RB0, fine programmaTRISB = 0;DelayMs(250);PORTB = 0b11111111;DelayMs(250);PORTB = 0b00000000;DelayMs(250);PORTB = 0b11111111;DelayMs(250);PORTB = 0b00000000;DelayMs(250);PORTB = 0b11111111;DelayMs(250);PORTB = 0b00000000;DelayMs(250);PORTB = 0b11111111;DelayMs(250);PORTB = 0b00000000;DelayMs(250);PORTB = 0b11111111;DelayMs(250);PORTB = 0b00000000;DelayMs(250);PORTB = 0b00000001;DelayMs(250);PORTB = 0b00000000; Link al commento Condividi su altri siti More sharing options...
deebae Inserita: 6 giugno 2006 Autore Segnala Share Inserita: 6 giugno 2006 DIMENTICAVO: per programmarlo uso ic-prog con queste impostazioni di fuses (di default)WDT VPWRTBODEN VLVP VCPDWRT VDEBUGGERe compilo con PICCLITE. Link al commento Condividi su altri siti More sharing options...
deebae Inserita: 6 giugno 2006 Autore Segnala Share Inserita: 6 giugno 2006 (ma non si può editare!?!?!)mi sono accorto di un'altro errore: le resistenze di pull-up le ho disegnato come pull-down Link al commento Condividi su altri siti More sharing options...
dlgcom Inserita: 6 giugno 2006 Segnala Share Inserita: 6 giugno 2006 Ciao , Dalla configurazione , sembra che tu abbia il watchdog abilitato .Prova a disabilitare il wdt Link al commento Condividi su altri siti More sharing options...
deebae Inserita: 6 giugno 2006 Autore Segnala Share Inserita: 6 giugno 2006 infatti, pensavo anch'io fosse un problema di WatchDog, ma ho provato a disibilitarlo ma nulla! Ho provato anche con il BrownOutReset che riguarda l'alimentazione (se scende oltre a una certa sogna resetta il pic se non sbaglio) ma non cambia proprio niente. La cosa che mi stupisce è che il programma funziona solo a volte (solo a volte arriva al lampeggio di fine programma) con la eeprom collegata correttamente, se invece scollego (run-time) la linea SDA o SCL il programma arriva sempre alla fine senza mai riavviarsi prima. Non capisco.... 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