Panowie prosze o pomoc z uruchomieniem przetwornika A/C Max1169. Jest to moj pierwszy projekt z i2c wiec liczę na wyrozumiałość. Jest to 16- bitowy przetwornik, wiecej o nim tutaj:
Kod: #include <avr/io.h>
#include <stdlib.h>
#include <stdio.h>
#include "D:\AVR\Project Proteus\header\lcd.h" #include "D:\AVR\Project Proteus\header\i2c.h" #include "D:\AVR\Project Proteus\header\rs232.h"
unsigned char tmp; unsigned int pomiar1; char bufor1[20],lcd_buf[15];
int main(void) { DDRB=0xFF; PORTB =0xFF; DDRC = 0xFF; PORTC = 0xFF; PORTC &= ~(1 << 3);
while(1) { lcd_init(); i2cstart(); i2cwrite(110); tmp = i2cread(NOACK); i2cstop(); ltoa(tmp,bufor1,10); write_text(bufor1); waitms(40); write_command(0x01); } return (0); }
Plik i2c.h wyglada tak:
Kod:
delay(); CLR_SCL; } // funkcja generujaca sygnał stop void i2cstop(void) { CLR_SDA; delay(); SET_SCL; delay(); SET_SDA; delay(); }
// funkcja wysyłająca bajt na szynę I2C void i2cwrite(unsigned char x) { unsigned char count = 9; do { CLR_SCL; if(x & 0x80) SET_SDA; else CLR_SDA; x <<= 1; delay(); SET_SCL; delay(); }while(--count); CLR_SCL; }
// funkcja odczytujaca bajt z szyny I2C unsigned char i2cread(unsigned char ack) { unsigned char count = 8, temp = 0; SET_SDA; SDA_IN; do { delay(); SET_SCL; delay(); temp <<= 1; if (GET_SDA) temp++; CLR_SCL; } while (--count); if(ack) SET_SDA; delay(); SET_SCL; delay(); CLR_SCL; return (temp); }
Na wyswietlaczu pokazuje sie wartosc 255 i nic wiecej. Jak odebrac te
16bitow z przetwornika i wyswietlic je?