problém s DS1307 [vyřešeno]

C,C++,C#

Moderátori: psichac, Moderátori

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1538
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

problém s DS1307 [vyřešeno]

Príspevok od používateľa jirka.jirka. » 15 Jan 2013, 23:20

Hoj hoj.
PLS tak si hraju s DS1307 a s I2C sběrnicí. Něco jsem k tomu našel a začal experimetovat. Ale nyní jsem ve fázi, že RTC a LCD displej šlape jen do 19 hodin a 59 minut. Jakmile se přehoupne 20 hodina, na displeji se úkáže 00 hodiny a aspoň minuty sedí. A ne a ne na to přijít, kde je problém. Zde přikládám main.c.

Kód: Vybrať všetko

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
#include <avr/pgmspace.h>
#include "lcd.h"

#include "ds1307.h"
#include "I2C.h"

unsigned char   minuty, hodiny, sekundy;
char buffer[16];

int main(){

	lcd_init(LCD_DISP_ON); // inicializacia displeja  
	I2CInit();		//Inicializace I2C Bus

	#define CH 7				//výmaz CH bit of RTC
	uint8_t temp;				//proměnná temp
	DS1307Read(0x00,&temp);		//čtení zařízení z adresy 00 a uložení do tempu
	temp&=(~(1<<CH));			//výmaz CH Bit
	DS1307Write(0x00,temp);		//zápis do DS1307
	DS1307Read(0x02,&temp);		//Set 12/24 Hour Mode
	temp|=(0b01000000);			//teď 12 hodinový mód
	DS1307Write(0x02,temp);		//Zápis do DS1307

	char Time[12];	//hh:mm:ss AM/PM
	uint8_t data;	//Now Read and format time

          /*pokusy se zapisy*/
			//temp=((58/10)<<4)|(58%10);	//sekundy
			//DS1307Write(0x00,temp);

			//temp=((58/10)<<4)|(58%10);	//minuty
			//DS1307Write(0x01,temp);

			//temp=((20/10)<<4)|(20%10);	//hodiny
			//temp|=0b00100000;		//přepínač na AM/PM
			//DS1307Write(0x02,temp);

	while(1){

	DS1307Read(0x00,&data);    //sekundy + převod do decimálu
		Time[8]='\0';
		Time[7]=48+(data & 0b00001111);
		Time[6]=48+((data & 0b01110000)>>4);
		Time[5]=':';

	DS1307Read(0x01,&data);    //minuty + převod do decimálu
		Time[4]=48+(data & 0b00001111);
		Time[3]=48+((data & 0b01110000)>>4);
		Time[2]=':';

	DS1307Read(0x02,&data);   //hodiny + převod do decimálu
		Time[1]=48+(data & 0b00001111);
		Time[0]=48+((data & 0b00010000)>>4);

	lcd_gotoxy(0,0);
	lcd_puts("DS1307 Trest");
	lcd_gotoxy(2,1);
	lcd_puts(Time);

	    if (data & 0b00100000)
	         {lcd_gotoxy(11,1);lcd_puts("PM");}
	    else
	         {lcd_gotoxy(11,1);lcd_puts("AM");}

	}
}

A zbylé knihovny přikládám do raru. Tak jestli někdo víte kde by mohl být zakopaný pes, poraďte. Dík
Prílohy
DS1307.rar
(38.1 KiB) 78 stiahnutí
0
Naposledy upravil/-a jirka.jirka. v 16 Jan 2013, 11:46, upravené celkom 1 krát.

stefanSK
Pokročilý člen
Pokročilý člen
Príspevky: 752
Dátum registrácie: 24 Jún 2010, 00:00
Bydlisko: Trnava
Vek: 68

Re: problém s DS1307

Príspevok od používateľa stefanSK » 16 Jan 2013, 00:01

zmeň:
Time[0]=48+((data & 0b00010000)>>4);
na Time[0]=48+((data & 0b00110000)>>4);
0
S.K.

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1538
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Re: problém s DS1307

Príspevok od používateľa jirka.jirka. » 16 Jan 2013, 11:26

Ouu. Dík moc.
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok