- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 28

Thema: I2C Adressen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    74
    Beiträge
    1.175
    Blog-Einträge
    1
    Hallo MagicWSmoke !
    Im Posting 12 also genau vor Deiner Antwort ist ein Link zu dem Beispiel, das ich nutze und hier nochmals in wiederholter Form:
    Nachtrag: Ich habe mir dieses Beispiel als Vorlage genommen zum Test, ohne das Setzen der UHR (Auskommentiert) wollte nur sec,min,hr auswerten. Das RTC ist mit aktueller Zeit versorgt
    Nur ist ein Unterschied, das bei mir der PortB.0 bei HR= 8 und MIN = 30 von HIGH zu LOW wechseln ...
    also:
    Code:
    HR_D = BCD2DEC(hr);    // Zeit von BCD Code in Dezimal umwandeln
    MIN_D = BCD2DEC(min); // Zeit von BCD Code in Dezimal umwandeln
     if ((HR_D == 0x08)  &&  (MIN_D  == 0x1E)) PORTB =0xFE
    else PORTB = 0xFF;
    if ((HR_D == 0x08) && (MIN_D  == 0x1F)) PORTB =0xFD;
    else PORTB = 0xFF;
    Mein Code zur Auswertung mal angedeutet, ohne die aber vorhandenen(!!!) Funktionen BCD2DEC dargestellt, also da kann ich nix auswerten. Es sei denn ich initialisiere selber die Zeitvariablen mit dem entsprechenden wert, dann geht es.
    Ich hoffe das reicht nun zur Erklärung...

    Nachtrag: Um allem gerecht zu werden hier nun der komplette Code den ich verwende und der nicht geht, d.h. keine Auswertung an PortB0,PortB1 möglich...
    Code:
    /* ========================================================================== */
    /*                                                                            */
    /*   zeitauswertung DS1307 / ATMEGA16 an PortB Pin B0 + B1                    */
    /*                                                                            */
    /* ========================================================================== */
    
    #define F_CPU 1600000UL
    
    #include<avr/io.h>
    #include<util/delay.h>
    
    
    void rtc_init(void)
    {
    TWSR=0x00;
    TWBR=0x98;
    TWCR=0x04;
    
    }
    
    void rtc_start(void)
    {
    // sende START Bedingungen
        TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
    
        // warte bis fertig...
        while(!(TWCR & (1<<TWINT)));
    }
    
    
    
    unsigned char rtc_read(void)
    {
    TWCR=(1<<TWINT)|(1<<TWEN);
    while(!(TWCR & (1<<TWINT)));
    return(TWDR);
    }
    
    void rtc_write(unsigned char data)
    {
    TWDR=data;// sending address
    TWCR=(1<<TWINT)|(1<<TWEN);
    // warte bis fertig...
        while(!(TWCR & (1<<TWINT)));}
    
    void rtc_stop()
    {
    TWCR=(1<<TWINT)|(TWSTO)|(1<<TWEN);
    // warte bis fertig...
        while(!(TWCR & (1<<TWINT)));
    }
    /* ========================================================================== */
    /*                                                                            */
    /*                          DEZIMAL ZU BCD // Uhr Stellen                     */
    /*                                                                            */
    /* ========================================================================== */
    char dez_to_bcd(char num)
    {
    return ((num/10 * 16) + (num % 10));
    }
    /* ========================================================================== */
    /*                                                                            */
    /*                          BCD zu DEZIMAL // UHR LESEN                       */
    /*                                                                            */
    /* ========================================================================== */
    char bcd_to_dez(char num)
    {
    return ((num/16 * 10) + (num % 16));
    }
    /* ========================================================================== */
    /*                                                                            */
    /*                                                                            */
    /*                                                                            */
    /* ========================================================================== */
    int main(void)
    {
    unsigned char sec,min,hr,HR_D,MIN_D;
    
    DDRB=0xFF;
    
    
    rtc_init();
    _delay_ms(1000);
    
    rtc_start();
    /// Zeit zum Test auf 0,5 min vor Schaltvorgang setzen
    rtc_write(0b11010000);   // 1101000=adress of ds1307 and bit 0= write   
    rtc_write(0x00);  // pointing address location 00 i.e seconds
    rtc_write(0x1E);// set sec=30
    rtc_write(0x1D);// set min=29
    rtc_write(0x08);// set hr=8
    
    rtc_stop();
    
    
    while(1)
    {
    
    rtc_start();
    rtc_write(0b11010001);   // 1101000=adress of ds1307 and bit 1= read   
    rtc_write(0x00);  // pointing address location 00 i.e seconds
    sec=rtc_read();
    rtc_stop();
    _delay_ms(50);           // etwas warten
    
    rtc_start();
    rtc_write(0b11010001);   // 1101000=adress of ds1307 and bit 1= read   
    rtc_write(0x01);         // pointing address location 01 i.e minute
    min=rtc_read();
    rtc_stop();
    _delay_ms(50);           // etwas warten
    
    rtc_start();
    rtc_write(0b11010001);   // 1101000=adress of ds1307 and bit 1= read   
    rtc_write(0x02);         // pointing address location 02 i.e hours
    hr=rtc_read();
    rtc_stop();
    _delay_ms(50); // etwas warten
    
    // Zeit decodieren und auswerten
    HR_D  = bcd_to_dez(hr);    // Zeit von BCD Code in Dezimal umwandeln
    MIN_D = bcd_to_dez(min); // Zeit von BCD Code in Dezimal umwandeln
     if ((HR_D == 0x08)  &&  (MIN_D  == 0x1E)) PORTB =0xFE;
    else PORTB = 0xFF;
    if ((HR_D == 0x08) && (MIN_D  == 0x1F)) PORTB =0xFD;
    else PORTB = 0xFF;
    }
    }
    Woher das Grundgerüst ist , findet man unter den oben erwähnten Link.
    Gerhard
    Geändert von oderlachs (16.06.2013 um 16:14 Uhr)
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

Ähnliche Themen

  1. [ERLEDIGT] PCA 8574 M-Unit findet zwei I2C-Adressen am China LCD ????
    Von meistervolker im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 3
    Letzter Beitrag: 29.07.2011, 18:21
  2. Cortex M3 Programcounter Adressen
    Von Siro im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 2
    Letzter Beitrag: 11.06.2010, 15:39
  3. #define und adressen setzten in asm30 - dspic
    Von Pitt1986 im Forum PIC Controller
    Antworten: 2
    Letzter Beitrag: 10.06.2008, 20:13
  4. Bootloader Adressen
    Von geronet im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 10.02.2007, 21:27
  5. Adressen im hex file
    Von MAXXX im Forum PIC Controller
    Antworten: 3
    Letzter Beitrag: 21.08.2005, 20:01

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test