- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 8 von 8

Thema: RTC DS1307 antwortet nicht trotz richtiger Adresse

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    06.09.2013
    Beiträge
    18

    RTC DS1307 antwortet nicht trotz richtiger Adresse

    Hallo liebes Forum,

    ich versuche schon länger eine RTC (ein fertiges Modul -> I2C DS1307 wirklich Zeit Uhr Modul für Arduino Tiny RTC) mit einem Atmega1284p-pu über I2C auszulesen bzw erstmal zu stellen.
    Da es nicht auf Anhieb mit der TWI_Master lib funktioniert hat, habe ich mit einem Oszi mal die SDA und SCL Leitungen gemessen und deren Daten ausgelesen. Ich konnte feststellen das er die Start condition und die richtige Adresse ( 0x68 ) anspricht und anschließend das Write-Bit sendet. Danach soll ein Acknolage von der RTC kommen doch ich bekomme immer ein Not-Acknolage. Woran könnte es liegen das die Uhr nicht antwortet?

    Hier mein Code:

    Code:
    #define F_CPU 8000000UL
    #include <avr/io.h>
    #include <stdint.h>
    #include <util/delay.h>
    #include "lcd-routines.h"
    #include "General.h"
    #include "TWI_Master.h"
    #include <stdio.h>
    #include <util/twi.h>
    #include "ADC.h"
    #include "BinToDez.h"
    
    int main(void)
    {	
            uint8_t	SlaveAddress = 0x68;
    	int8_t	seconds, minutes, hours, day, date, month, year, control;
    	int8_t	sekunden, minuten, stunden, tag, monat, jahr;
    	uint8_t	i=0;
            char		sekunden_string[2], minuten_string[2], stunden_string[2];
    	char		tag_string[2], monat_string[2], jahr_string[2];
    
            TWIM_Init (100000);			// Initiate TWI Master with bitrate of 100000 Hz
    	lcd_init();					//LCD initialisieren
    
            if (PINB & 0x01)
    		{
    							
    			cli();			//Interrupts global ausschalten
    			lcd_clear(); 	//Display löschen
    			lcd_home();	//Coursor an den Anfang setzen
    			
    			//RTC Einstellen (einmalig)
    			
    			if (!TWIM_Start (SlaveAddress, TWIM_WRITE))
    			{
    				TWIM_Stop ();
    			}
    			else
    			{
    				TWIM_Write (0b00000000);	//Register-Pointer
    				TWIM_Write (0b00000000);	//sec
    				TWIM_Write (0b01001000);	//min
    				TWIM_Write (0b00011001);	//stunde
    				TWIM_Write (0b00000011);	//wochentag
    				TWIM_Write (0b00000101);	//tag
    				TWIM_Write (0b00010110);	//Monat
    				TWIM_Write (0b00011001);	//jahr
    				TWIM_Write (0b00000000);	//control
    				TWIM_Stop ();
    				_delay_ms(1000);
    				
    			}
    			
    			for (i = 0; i <=12; i++)
    			{
    			
    				if (!TWIM_Start (SlaveAddress, TWIM_READ))
    				{
    					TWIM_Stop ();
    				}
    				else
    				{
    					seconds = TWIM_ReadAck ();
    					minutes = TWIM_ReadAck ();
    					hours = TWIM_ReadAck ();
    					day = TWIM_ReadAck ();
    					date = TWIM_ReadAck ();
    					month = TWIM_ReadAck ();
    					year = TWIM_ReadAck ();
    					control = TWIM_ReadNack ();
    					TWIM_Stop ();
    					_delay_ms(1000);
    					
    				}
    				sekunden = BinToDez(seconds);		//kann eventuell weg durch sprintf!!!
    				sprintf(sekunden_string,"%d",sekunden);
    				minuten = BinToDez(minutes);
    				sprintf(minuten_string,"%d",minuten);
    				stunden = BinToDez(hours);
    				sprintf(stunden_string,"%d",stunden);
    				tag = BinToDez(date);
    				sprintf(tag_string,"%d",tag);
    				monat = BinToDez(month);
    				sprintf(monat_string,"%d",monat);
    				jahr = BinToDez(year);
    				sprintf(jahr_string,"%d",jahr);
    			
    				//Uhrzeit ausgeben
    				
    				lcd_string("Uhr: ");
    				lcd_string(stunden_string);
    				lcd_string(":");
    				lcd_string(minuten_string);
    				lcd_string(":");
    				lcd_string(sekunden_string);
    			
    				//Nächste Zeile im LCD
    			
    				lcd_setcursor( 0, 2 );
    			
    				//Datum ausgeben
    			
    				lcd_string("Datum:");
    				lcd_string(tag_string);
    				lcd_string(".");
    				lcd_string(monat_string);
    				lcd_string(".20");
    				lcd_string(jahr_string);
    				
    				_delay_ms(250);		//500ms warten
    				lcd_home();			//LCD-coursor and Starposition setzen
    								//Interrupts global an
    			}
                  }
    }
    Bitte um Hilfe.

    Gruß

    Technik_Amateur
    Geändert von Technik_Amateur (23.11.2013 um 16:35 Uhr)

Ähnliche Themen

  1. RTC DS1307 mit Bascom konfigurieren bzw. abfragen
    Von lwl im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 08.05.2012, 20:02
  2. DS1307 RTC mit Bascom
    Von avrflo im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 29
    Letzter Beitrag: 08.02.2009, 11:55
  3. SD-Karte antwortet nicht
    Von DavidN im Forum Assembler-Programmierung
    Antworten: 1
    Letzter Beitrag: 31.08.2007, 13:59
  4. Anfänger - Problem mit RTC DS1307 (gelöst)
    Von RobbyNB im Forum AVR Hardwarethemen
    Antworten: 0
    Letzter Beitrag: 15.03.2007, 09:50
  5. BasisUnit antwortet nicht !!
    Von Marcoman im Forum Robby CCRP5
    Antworten: 2
    Letzter Beitrag: 23.12.2004, 20:23

Berechtigungen

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

12V Akku bauen