Witam, chcę połączyć procesor ATMega32 z przetwornikiem C/A LTC1669 przez I2C.
Niestety jest problem w komunikacji TWI. Procesor ustawiłem na częstotliwość 8MHz.
Poniżej zamieszczam kod, byłbym wdzięczny za każdą sugestię, czemu TWI może nie działać... Jestem początkujący, a dzięki temu miałbym jakiś trop, gdzie szukać przyczyn.
Funkcje:
main:
Z góry dzięki za odzew!
#edit
ramka do wysłania do przetwornika:
[start][adres slave'a][Wr=0][Ack][bajt komend=0x00][Ack][młodszy bajt danych][Ack][Starszy bajt danych][Ack][stop]
Niestety jest problem w komunikacji TWI. Procesor ustawiłem na częstotliwość 8MHz.
Poniżej zamieszczam kod, byłbym wdzięczny za każdą sugestię, czemu TWI może nie działać... Jestem początkujący, a dzięki temu miałbym jakiś trop, gdzie szukać przyczyn.
Funkcje:
void TWI_inicjacja(void)
{
TWSR =0b00000000; // Preskaler = 1 ->> TWPS1=0 TWPS0=0
TWBR =0b00100000;
}
void TWI_zapis(unsigned char adres,
unsigned char command,
unsigned char liczba1,
unsigned char liczba2)
{
TWCR =(1 << TWINT) | (1 << TWSTA) | ( 1 << TWEN );
while(!(TWCR & (1 << TWINT)));
TWDR =adres;
TWCR =(1 << TWINT) | (1 << TWEN);
while(!(TWCR & (1 << TWINT)));
TWDR =command;
TWCR =(1 << TWINT) | (1 << TWEN);
while(!(TWCR & (1 << TWINT)));
TWDR =liczba1;
TWCR =(1 << TWINT) | (1 << TWEN);
while(!(TWCR & (1 << TWINT)));
TWDR =liczba2;
TWCR =(1 << TWINT) | (1 << TWEN);
while(!(TWCR & (1 << TWINT)));
TWCR =(1 << TWINT) | (1<<TWEN) | (1<<TWSTO);
}
main:
#define F_CPU 8000000UL // 8 MHz
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include <util/delay.h>
#include <string.h>
#include "lcd.h"
#include "twi.h"
//RS PC5
//RW PC6
//E PC7
//DATA PA
int main(void){
/* wyłączenie interfejsu JTAG */
MCUCSR |= (1<<JTD);
MCUCSR |= (1<<JTD);
/* deklaracja we/wy */
DDRA = 0xff; // porty A i B jako wyjscia
PORTA = 0x00;
DDRC = 0xff;
PORTC &= 0x1f;
DDRD = 0x00; // port D jako wejscie
PORTD = 0xff; // pull-up
/* LCD */
while(1)
{
/* wyciąłem nie związane rzeczy */
// wysłanie za pomocą TWI wartości do DAC
TWI_inicjacja();
TWI_zapis(0x40, 0x00, 0xff, 0xff);
delay_ms(1000);
}
return 0;
}
Z góry dzięki za odzew!
#edit
ramka do wysłania do przetwornika:
[start][adres slave'a][Wr=0][Ack][bajt komend=0x00][Ack][młodszy bajt danych][Ack][Starszy bajt danych][Ack][stop]