Witam
Z braku weny poprzeglądałem forum i znalazłem następujący kod:
program działa master otrzymuje odpowiednie dane ....
tylko jak mam do tego dodać zapis z mastera ?
kombinowałem jak koń pod górę i nic z tego....
Dodano po 5 [godziny] 3 [minuty]:
Ok dałem sobie radę
to procedura odczytu z mastera:
TEMAT ZAMKNIĘTY
Z braku weny poprzeglądałem forum i znalazłem następujący kod:
#include "lib/t6963c.c"
#include <compat/twi.h>
#include "lib/change_numbers.c"
#include <avr/interrupt.h>
#include <avr/signal.h>
#define AVR_addr_R 0x18
volatile unsigned char buf_TWI[9];
unsigned char *pbuf_TWI;
unsigned char temp_kotla, temp_CWU, i;
//___________________________
void TWI_init(void)
{
TWAR=AVR_addr_R;
TWBR=10;
TWCR=(1<<TWEA)|(1<<TWEN)|(1<<TWIE)|(1<<TWINT);
}
//___________________________
void AVR_wyslij(unsigned char lb_dane)
{
cli(); // zablokowanie zezwolenia na przerwania
if(TW_STATUS != TW_ST_SLA_ACK) // sprawdzenie czy ukłąd mastera wysłał prawidłowy adres Slave'a
{
goto KONIEC; // jeśli nie to błąd i wyjście z procedury
}
pbuf_TWI=&buf_TWI;
for(;(lb_dane-1)!=0;lb_dane--)
{
TWDR=*pbuf_TWI++; // przeniesienie danej która ma zostać wysłana z bufora TWI do bufora wysyłającego
TWCR=(1<<TWINT)|(1<<TWEA)|(1<<TWEN); // odpowiednie ustawienie lini sterujących
while(!(TWCR & (1<<TWINT))); // oczekiwanie na koniec transmisji
if(TW_STATUS !=TW_ST_DATA_ACK)
{
goto KONIEC;
}
}
TWDR=*pbuf_TWI;
TWCR=(1<<TWINT)|(1<<TWEN);
while(!(TWCR & (1<<TWINT)));
TWCR=(1<<TWEA)|(1<<TWEN)|(1<<TWIE)|(1<<TWINT);
sei();
KONIEC:
sei();
}
//__________________________
SIGNAL (SIG_2WIRE_SERIAL)
{
AVR_wyslij(1);
// buf_TWI[0]+=1; // w ten sposób działa
}
//__________________________
int main(void) //program główny
{
DDRB|=_BV(0);
int przerwa=500;
TWI_init();
sei();
buf_TWI[0]=10; // jakas wartość poczatkowa
while(1)
{
PORTB |= _BV(0);
_delay_ms(przerwa);
PORTB &= ~_BV(0);
_delay_ms(przerwa);
buf_TWI[0]++;
}
} program działa master otrzymuje odpowiednie dane ....
tylko jak mam do tego dodać zapis z mastera ?
kombinowałem jak koń pod górę i nic z tego....
Dodano po 5 [godziny] 3 [minuty]:
Ok dałem sobie radę
to procedura odczytu z mastera:
if(TW_STATUS == TW_SR_SLA_ACK) // sprawdzenie czy ukłąd mastera wysłał prawidłowy adres Slave'a do zapisu
{
TWCR=(1<<TWINT)|(1<<TWEN);
while(!(TWCR & (1<<TWINT)));
odebralem=TWDR;
TWCR=(1<<TWEA)|(1<<TWEN)|(1<<TWIE)|(1<<TWINT);
}
TEMAT ZAMKNIĘTY