3

Expecting the slave to ACKnowledge and return data, but it does not. This is my protocol. This is my Datasheet.

Also FYI I'm on an Arduino Fio but I am not inheriting the Arduino library.

#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
#include <uart.h>
#include <i2c_master.h>
#define LED PB5
#define I2C_READ 0x5A
char buffer[1];
//char data[9];
uint16_t val = 0;
uint8_t status = 0;
void getVal()
{
 if(i2c_start(I2C_READ))
 {
 uart_puts("Start ");
 val = ((uint8_t)i2c_read_ack())<<8; 
 val |= i2c_read_ack();
 status = ((uint8_t)i2c_read_nack());
 i2c_stop();
 } else
 {
 uart_puts("Error");
 i2c_stop();
 }
}
int main(void)
{
 init_uart(57600);
 i2c_init();
 DDRB = _BV(5);
 for(;;)
 {
 getVal();
 itoa(status, buffer, 10); //convert decimal to string base 10
 uart_puts(buffer);
 PORTB = 0xFF;
 _delay_ms(500);
 PORTB = 0x00;
 _delay_ms(500);
 }
 return 0; /* never reached */
}
asked Apr 12, 2016 at 21:42

1 Answer 1

1

(Acknowledging this is an old question.) The TI article "Troubleshooting I2C Bus Protocol", suggests several common reasons for no ACK:

1. Timing
2. Missing / Unexpected SCL pulses
3. Incomplete 8 bit block
4. Missing Bytes
5. False slave address
6. Unsuccessful address change
answered Jan 25, 2021 at 2:57

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.