bisogno di aiuto con AVR

K

Kaze

Guest
Cari tutti, ho qualche problema.Voglio ATMEGA8535 con interfaccia cmps03 utilizzando I2C.Ho l'interfaccia ATMEGA8535 con DS1624 prima e funziona bene, ma quando si interfaccia con cmps03, il problema è che ho i dati che ho passato al porto sempre cambiare quando ho azzerato il mio AVR, presumibilmente i dati statici (don ' t cambia) causa non cambiare la direzione della bussola punta modo.
Qui è il mio codice sorgente (con ICC AVR):

# include <iom8535v.h>
# include <macros.h>

/ / funzione per l'AVR iniziale porto
init_port nullo (void)
(
PORTA = 0x00;
DDRA = 0xFF;

PORTB = 0x00;
DDRB = 0xFF;

PORTC = 0x00;
DDRC = 0xFF;

PORTD = 0xFF;
DDRR = 0xFF;
)

/ / funzione iniziale TWI
init_TWI nullo (void)
(
TWCR = 0x00; / / disattivare TWI
TWBR = 0x0C; / / bit rate = 12 | SCL per ottenere la frequenza di clock
TWSR = 0x00; / / prescaler = 1 | 100 KHz
TWAR = 0xAA; / / assegnare Aah per AVR a diventare modalità slave
TWCR = 0x04; / / consentire TWI
)

/ / funzione per l'AVR iniziale
iniziale nullo (void)
(
CLI (); / / disattivare ext interrompere
MCUCR = 0x00; / / Sleep Mode Off & interrompere disattivare la modalità
init_port (); / / initiliaze AVR Porti
init_TWI (); / / inizializzare TWI
SEI (); / / ext consentire interrompere
)

/ / funzione di ritardo per un breve periodo di tempo
void ritardo (int DLY)
(
int str;
for (str = 0; str <= DLY; str );
)

/ / funzione di aspettare TWI_Int
Wait_TWI_int nullo (void)
(
while (! (TWCR & (1 <<TWINT)))
;
)

/ / funzione per iniziare a inviare condizione
void start (void)
(
ritardo (15);
TWCR = ((1 <<TWSTA) (1 <<TWEN) (1 <<TWINT));
Wait_TWI_int ();
)

/ / funzione per inviare e ricevere dati byte ACK
void send (unsigned char dati)
(
ritardo (5);
Wait_TWI_int ();
TWDR = dati;
TWCR = ((1 <<TWEN) (1 <<TWINT));
Wait_TWI_int ();

)

/ / funzione per ottenere byte di dati e di inviare ACK
unsigned char receive1 (void)
(
unsigned char dati;
ritardo (5);
Wait_TWI_int ();
TWCR = ((1 <<TWINT) (1 <<TWEA) (1 <<TWEN));
Wait_TWI_int ();
ritorno = TWDR dati;
)

/ / funzione per ottenere dati e byte NACK
unsigned char receive2 (void)
(
unsigned char dati;
ritardo (5);
Wait_TWI_int ();
TWCR = ((1 <<TWINT) (1 <<TWEN));
Wait_TWI_int ();
ritorno = TWDR dati;
)

/ / funzione per inviare condizione di arresto
void stop (void)
(
ritardo (5);
TWCR = ((1 <<TWEN) (1 <<TWSTO) (1 <<TWINT));
)

/ / funzione principale che corrono quando si programma iniziato
void main (void)
(
unsigned char leggere, scrivere,
i dati;
int bandiera;
letto = 0xC1;
scrivere = 0xC0;
flag = 1;
iniziale ();
while (1)
(

ritardo (5000); / / tempo di ritardo per fare bussola pronto
dati = 0xFF; / / dati iniziali
/ / per ottenere la direzione da CMPS03
fare
(
ritardo (1000); / / ritardo prima di iniziare I2C
start (); / / inviare iniziare
inviare (scrivere); / / inviare indirizzo scrivere
inviare (0x01); / / inviare comando ottenere direzione in 1 byte
start (); / / ripetuta iniziare
inviare (leggi); / / inviare indirizzo leggere
dati = receive1 (); / / ottenere il primo byte ack
PORTB = dati; / / inviare i dati a byte PORTB
stop (); / / inviare fermata
if (dati! = 0xFF) flag = 0;
altro
(
ritardo (5000);
flag = 1;
)
) while (flag == 1);

while (flag == 0) / / loop per rendere inattivo per sempre
)
)Ho fatto qualche errore nel mio codice sorgente o un altro errore che non sapevo su hardware? Esiste un programma di simulazione per il debug del mio codice?
Grazie per il vostro aiuto
Con i migliori salutiKaze

 

Welcome to EDABoard.com

Sponsor

Back
Top