Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Autore
    Post
  • #10610
    Anthony820
    Partecipante

    Salve,
    Sono nuovo del gruppo, e da qualche tempo sto provando a far comunicare un RTC DS1302 con un PIC ma con scarso successo.
    Potrebbe qualcuno darmi una mano, in modo.da capire dove possa essere l’errore.
    Grazie.

    Inserisco una parte di codice per la lettura dei secondi.

    #define RB1 RST   //enable del DS1302
    #define RB2 SCLK // clock  DS1302
    #define RB3 IO  // input/output DS1302
    
    Main(){
        ANSEL=0b00000000;
        TRISB=0b00000000;
        unsigned char=secondi;
        RST=0;
        Init_DS1302();
        Set_time();
        while(1){
        Secondi=read_time();}
    }
    
    Init_DS1302(){
        Write_time(0xBE);  //cmd per dissattivare la protezione
        Write_time(0x00); //codice disattivamento
    }
    
    Set_time(){
        Write_time(0x80);  //cmd per scrivere i secondi
        Write_time(0x00); // valore secondi
    }
    
    Write_time(unsigned char comando){
        Int i;
        RST=1;
        for(i=0; i<8; i++){
            SCLK=0;
            If((comando&0x80))
                IO=1;
            else 
                IO=0;
            SCLK=1;
        }
        SCLK=0;
        RST=0;
    }
    
    Read_time(){
        int i, valore, valore_finale;
        valore=0;
        write_time(0x81);
        TRISB=0b00001000;
        RST=1;
        for(i=0;i<8;i++){
            SCLK=1;
            If(IO&0x01)
                valore=valore+0x01;  
            else
                valore=valore +0x00;
            valore_finale=valore;  //salva su valore finale prima dello shift
            valore=valore <<1;
            SCLK=0;
        }
        TRISB=0b00000000;
        RST=0;
        return valore_finale;
    }
    #10614
    Picmicro675
    Partecipante

    Non si capisce che compilatore usi. Poi dipende da che micro usi. Secondo me non vale la pena comprare della famiglia 16F8xx, meglio quelli più recenti come 16F1xxx che magari trovi già in hardware il necessario per trasmettere.
    Poi penso che siano problemi di tempistiche, il foglio dati si riferisce ad un clock massimo di mezzo MHz. Quindi prova ad introdurre qualche NOP o ritardo di qualche ciclo.
    In ultimo tentativo dovresti aver un analizzatore logico per vedere il segnale prodotto, al limite un oscilloscopio doppia traccia. Se usi il DS 1307 dovresti attenerti alle specifiche dell’I2C.
    Ultimo suggerimento provare con MikroC e le sue librerie.

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Devi essere connesso per rispondere a questo topic.