c - TWI and DS3231 library in avr-gcc -


could tell me if library correct?

function (rtcreadminutes(uint8_t* minutes)) returning (5). means (i2cstart()) returning (0) why. tried written in datasheet. using atmega 328 , rtc ds3231. connected corectly.

i2c.h

#ifndef i2c_h #define i2c_h  #include <avr/io.h> #include <util/delay.h>  #define start       0x08 #define start_rep   0x10 #define mt_sla_ack  0x18 #define mt_data_ack     0x28 #define mr_sla_ack      0x40 #define mr_data_nack    0x58  void i2cinit(void); uint8_t i2cstart(void); uint8_t i2cstartrep(void); uint8_t i2cstop(void); uint8_t i2csendaddress(uint8_t); uint8_t i2csenddata(uint8_t); uint8_t i2creadack(void); uint8_t i2creceivedata(uint8_t*);  #endif 

i2c.c

#include "i2c.h"  void i2cinit(void) {     //set scl 400khz     twsr = 0x00;     twbr = 0x0c;     //enable twi     twcr = (1<<twen); }  uint8_t i2cstart(void) {     twcr = (1<<twint)|(1<<twsta)|(1<<twen);     while(!(twcr & (1<<twint)));     if ((twsr & 0xf8) != start)         return 0;     else return 1; }  uint8_t i2cstartrep(void) {     twcr = (1<<twint)|(1<<twsta)|(1<<twen);     while(!(twcr & (1<<twint)));     if ((twsr & 0xf8) != start_rep)         return 0;     else return 1; }  uint8_t i2cstop(void) {     twcr = (1<<twint)|(1<<twsto)|(1<<twen);     return 1; }  uint8_t i2csendaddress(uint8_t add) {     twdr = add;     twcr = (1<<twint) | (1<<twen);     while (!(twcr & (1<<twint)));     if (add & 0x01)         if ((twsr & 0xf8) != mr_sla_ack)             return 0;         else return 1;     else         if ((twsr & 0xf8) != mt_sla_ack)             return 0;         else return 1; }  uint8_t i2csenddata(uint8_t data) {     twdr = data;     twcr = (1<<twint) | (1<<twen);     while (!(twcr & (1<<twint)));     if ((twsr & 0xf8) != mt_data_ack)         return 0;     else return 1; }   uint8_t i2creadack(void) {     twcr = (1<<twint)|(1<<twen)|(1<<twea);     while ((twcr & (1<<twint)) == 0);     return twdr; }  uint8_t i2creceivedata(uint8_t* data) {     twcr = (1<<twint)|(1<<twen);     while ((twcr & (1<<twint)) == 0);     *data=twdr;     if ((twsr & 0xf8) != mr_data_nack)         return 0;     else return 1; } 

rtc.h

#ifndef rtc_h #define rtc_c  #include <avr/io.h> #include <util/delay.h> #include "i2c.h"  #define rtc_address 0xc0 #define seconds_address 0x00 #define minutes_address 0x01 #define hours_address 0x02 #define day_address 0x03 #define date_address 0x04  uint8_t rtcreadminutes(uint8_t*); uint8_t rtcreadhours(void);   #endif 

rtc.c

#include "rtc.h"  uint8_t rtcreadminutes(uint8_t* minutes) {     if (!i2cstart())         return 5;     if (!i2csenddata(rtc_address))         return 0;     if (!i2csenddata(minutes_address))         return 0;     if (!i2cstartrep())         return 0;     if (!i2csenddata(rtc_address | 1))         return 0;     if (!i2creceivedata(minutes))         return 0;     i2cstop();     return 1; }  uint8_t rtcreadhours(void) {     return 1; } 


Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -