Erstmal einmal den gesamten Code damit ihrs im Zusammenhang habt:
Code:
/* motormodul.c
***************************************************
***************************************************
$Log:$
*/
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <inttypes.h> /* fuer uint32_t */
#include <avr/delay.h>
#include "twi.h"
#include "TWI_Master.h"
#define LED1 PC0
#define LED2 PC1
#define LED_PORT PORTC
#define KEY1 PC2
#define KEY2 PC3
#define KEY_PORT PINC
#define ENABLE PB0
#define ENABLE_PORT PINB
#define MOTOR_PORT PORTB
#define MOTOR1_RICHTUNG PB3
#define MOTOR1_PWM PB1
#define MOTOR2_RICHTUNG PB4
#define MOTOR2_PWM PB2
#define SWAP(port, pin) (port ^= _BV(pin))
#define READ 1
#define WRITE 0
void init_io(void);
/* Adresse vom Slave */
BYTE slave_adress = 0x40;
BYTE buf[4];
int main (void)
{
/* Ports einstellen */
init_io();
/* TWI Initialisieren */
TWI_Master_Initialise();
/* Interrupts global aktivieren */
sei();
/* Hauptprogramm */
for(;;)
{
/* Ausgänge auf High setzen */
buf[0] = slave_adress | WRITE;
buf[1] = 0xFF;
TWI_Start_Transceiver_With_Data( buf, 2);
/** Eingänge lesen **/
buf[0] = slave_adress | READ;
TWI_Start_Transceiver_With_Data( buf, 1); // Adresse senden
/* Daten lesen, in buf[0] steht die Slave Adresse, danach
kommen die gelesenen Daten */
TWI_Get_Data_From_Transceiver( buf, 2);
_delay_loop_2(16000);
if( buf[1] == 0xFF)
sbi( LED_PORT, LED1);
else
cbi( LED_PORT, LED1);
}
}
void init_io(void)
{
/* PB0 als Eingang alle anderen als Ausgang */
DDRB = _BV(PB1)| _BV(PB2)| _BV(PB3)| _BV(PB4)| _BV(PB5);
PORTB = _BV(PB0); /* Pull-Up PB0 ein */
DDRC = _BV(LED1)| _BV(LED2); /* PC0 und 1 als Ausgang */
PORTC = _BV(KEY1)| _BV(KEY2); /* Pull-Ups Eingang */
DDRD = 0x00; /* Port D als Ausgang */
}
So wie funtktioniert das mit dem buf[] das ist wenn ich es richtig sehe ein array und wenn ich dann dieses stück code sehe:
Code:
/* Ausgänge auf High setzen */
buf[0] = slave_adress | WRITE;
buf[1] = 0xFF;
TWI_Start_Transceiver_With_Data( buf, 2);
da werden 2 werte in den array geschrieben aber nur einer übertragen warum oder seh ich da etwas falsch?
Lesezeichen