Witam!!!
Szukałem już wszędzie, ale nie znalazłem rozwiązania mojego problemu. Próbuję napisać podprogram do wysyłanie rozkazów do STA015 przez TWI. Znalazłem kilka gotowych rozwiązań (nota katalogowa ATmegi i internet). Problem polega na tym, że program nie działa i nie wiem co jest grane. Kod wygląda następująco:
twi.c
twi.h
main.c
Po wgraniu programu do procka nic się nie dzieje. Sprawdziłem program w AVR Studio i program zawiesza się w miejscu gdzie sprawdza warunek czy komenda START została wysłana czyli na pętli while. nie wystawia się bit TWINT po skończeniu transmisji. PortC też milczy. nic się na nim nie dzieje. Dodam, że procek jest sprawny (jeden i drugi). Co może być nie tak?? Proszę o pomoc w rozwiązaniu problemu.
Szukałem już wszędzie, ale nie znalazłem rozwiązania mojego problemu. Próbuję napisać podprogram do wysyłanie rozkazów do STA015 przez TWI. Znalazłem kilka gotowych rozwiązań (nota katalogowa ATmegi i internet). Problem polega na tym, że program nie działa i nie wiem co jest grane. Kod wygląda następująco:
twi.c
#include "twi.h"
void twi_start(void)
{
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while (!(TWCR & (1<<TWINT)));
}
void twi_send(char twi_data)
{
TWDR = twi_data;
TWCR = (1<<TWINT)|(1<<TWEN);
while (!(TWCR & (1<<TWINT)))
{
}
}
char twi_recive(char twi_ack)
{
TWCR = twi_ack
?((1<<TWINT)|(1<<TWEN)|(1<<TWEA))
:((1<<TWINT)|(1<<TWEN));
while (!(TWCR & (1<<TWINT)));
return TWDR;
}
void twi_stop(void)
{
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
while ((TWCR & (1<<TWSTO)));
}
twi.h
#include <avr/io.h>
#ifndef TWI_H
#define TWI_H
void twi_start(void);
void twi_send(char twi_data);
void twi_stop(void);
char twi_recive(char twi_ack);
#endif
main.c
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/signal>
char twi_data;
char twi_ack;
char spi_data;
int main(void)
{
DDRB = 0xff;
PORTB = 0x00;
DDRC = 0xff;
PORTC = 0x00;
DDRD = 0xff;
PORTD = 0x00;
twi_start();
twi_send(0x43);
twi_send(0x01);
twi_start();
twi_send(0x43);
if (twi_recive(twi_ack)==0xAC)
{
PORTA = (1<< PORTA5);
}
else
{
PORTA = (1<< PORTA4);
}
twi_stop();
while (1);
return 0;
}
Po wgraniu programu do procka nic się nie dzieje. Sprawdziłem program w AVR Studio i program zawiesza się w miejscu gdzie sprawdza warunek czy komenda START została wysłana czyli na pętli while. nie wystawia się bit TWINT po skończeniu transmisji. PortC też milczy. nic się na nim nie dzieje. Dodam, że procek jest sprawny (jeden i drugi). Co może być nie tak?? Proszę o pomoc w rozwiązaniu problemu.