-         

Ergebnis 1 bis 4 von 4

Thema: TWI Taster Abfrage am Master und Ausgabe am Slave

  1. #1
    Neuer Benutzer Öfters hier Avatar von Pinie
    Registriert seit
    10.12.2010
    Ort
    Ennepetal
    Beiträge
    22

    Frage TWI Taster Abfrage am Master und Ausgabe am Slave

    Anzeige

    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.

  2. #2
    Neuer Benutzer Öfters hier Avatar von Pinie
    Registriert seit
    10.12.2010
    Ort
    Ennepetal
    Beiträge
    22

    Frage

    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
    Code:
    #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

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Code:
    #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 LED2
    Da passt ja praktisch gar nichts zusammen. Du musst dich schon entscheiden, an welchem Port Taster und LEDs nun tatsächlich sind.
    MfG
    Stefan

  4. #4
    Neuer Benutzer Öfters hier Avatar von Pinie
    Registriert seit
    10.12.2010
    Ort
    Ennepetal
    Beiträge
    22
    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
    Geändert von Pinie (11.03.2011 um 17:15 Uhr) Grund: ergenzung

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •