Archiv verlassen und diese Seite im Standarddesign anzeigen : TWI Taster Abfrage am Master und Ausgabe am Slave
Hallo,
ich versuche schon seit Tagen einen Taster am Master Abzufragen und eine LED am Slave Leuchten zulassen.
leider bekomme ich das im Code Beispiel hier: http://www.rn-wissen.de/index.php/TWI_Slave_mit_avr-gcc
nicht hin könnte mir da jemand helfen?
Bin grade einwenig am verzweifeln.
Guten Abend,
ich habe es jetzt mal im Slave versucht den Taster Abzufragen und auch im Slave eine LED einzuschalten aber es klappt nicht nur die Serielle Verbindung klappt:(
#include <util/twi.h> //enthält z.B. die Bezeichnungen für die Statuscodes in TWSR
#include <avr/interrupt.h> //dient zur Behandlung der Interrupts
#include <stdint.h> //definiert den Datentyp uint8_t
#include "twislave.h"
#include "uart.h" //UART-Lib von P- Fleury
#include <stdlib.h> //nötig für Zahlumwandlung mit itoa
#include <util/delay.h>
#include <avr/io.h>
// LEDs sind high-active geschaltet
#define LED_AN(LED) (PORTD |= (1<<(LED)))
#define LED_AUS(LED) (PORTD &= ~(1<<(LED)))
#define LED1 PB0
#define LED2 PB1
// TASTER ist high-active geschaltet
#define TASTER PD2
#define TASTER_GEDRUECKT() (PIND & (1<<TASTER))
#define BAUD 9600 //Baudrate
#define SLAVE_ADRESSE 0x50 //Die Slave-Adresse
//Hilfsfunktion, um Zahlen über das UART auszugeben
void uart_puti( const int val )
{
char buffer[8];
uart_puts( itoa(val, buffer, 10) );
}
int main (void)
{
DDRA &= ~(1<<TASTER); // Port B: Eingang für Taster
DDRB |= (1<<LED1) | (1<<LED2); // Port D: Ausgang für LED1 und LED2
//TWI als Slave mit Adresse slaveadr starten
init_twi_slave(SLAVE_ADRESSE);
//i2cdatamit Werten füllen, die der Master auslesen und ändern kann
for(uint8_t i=0;i<i2c_buffer_size;i++)
{
i2cdata[i]=10+i;
}
//Serielle Schnittstelle aktivieren
uart_init((UART_BAUD_SELECT((BAUD),F_CPU)));
uart_puts("I2C-Test\r\n");
uart_puts("Teste I2C-Slave mit Adresse "); uart_puti(SLAVE_ADRESSE);
uart_puts("\r\n");
uart_puts("\r\n"); //Leerzeile
void ausgabe_RS232()
{
uart_puts("i2cdata:\r\n");
for(uint8_t i=0;i<i2c_buffer_size;i++)
{
uart_puti(i2cdata[i]);
uart_puts("\r\n");
}
uart_puts("\r\n");//leerzeile
_delay_ms(1000);
}
//in einer Endlosschleife den Inhalt der Buffer ausgeben
while(1)
{
{
ausgabe_RS232();
}
if (TASTER_GEDRUECKT())
{
LED_AN(LED1);
}
} //end.while
} //end.main
könnte mir da jemand mal einen Tipp geben was ich Falsch mach
wäre sehr nett
#define LED_AN(LED) (PORTD |= (1<<(LED)))
#define LED_AUS(LED) (PORTD &= ~(1<<(LED)))
#define LED1 PB0
#define LED2 PB1
// TASTER ist high-active geschaltet
#define TASTER PD2
#define TASTER_GEDRUECKT() (PIND & (1<<TASTER))
...
DDRA &= ~(1<<TASTER); // Port B: Eingang für Taster
DDRB |= (1<<LED1) | (1<<LED2); // Port D: Ausgang für LED1 und LED2Da passt ja praktisch gar nichts zusammen. Du musst dich schon entscheiden, an welchem Port Taster und LEDs nun tatsächlich sind.
Hallo,
da hast du recht hätte mir ja auch auffallen können](*,)
könnte mir den Jemand sagen wie ich im Slave z.B. das erste Byte abfrage und dann wenn Byte1 = 42 Led1 angeht
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.