- LiTime Speicher und Akkus         
Ergebnis 1 bis 6 von 6

Thema: SPI slave transmit problem

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    15.07.2004
    Alter
    44
    Beiträge
    196

    SPI slave transmit problem

    Anzeige

    LiFePo4 Akku selber bauen - Video
    So mal wieder ein neues Problem:
    wenn ich über spi vom master zum slave sende emfängt dieser auch die daten in der spi interrupt routine (so wie überall beschrieben) allerdings kann ich nichts vom slave zum master senden.
    das müsste ja dann vorher in das spdr register geschrieben werden hab ich, er macht aber nichts.
    jetzt meine frage kann ich das dann überhaupt in einer int routine machen weil da bekommt er ja schon die anfrage vom master?
    oder lass ich den spie weg und frag meinetwegen mit nem timer nach ob der spif irgendwann mal kommt?
    nächstes prob:
    ich will vom master aus 1 byte senden und der slave soll mir auf dieses byte auch wieder ein byte schicken.
    geht ja aber nicht weil nur der master und slave gleichzeitig senden können.

    MASTER<------------------------|
    |___________________>SLAVE

    wie habt ihr so ein problem gelöst?
    mfg

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Schon mal versucht 2 Bytes zu schicken? Nach dem Empfang des ersten schreibt der Slave das Datenregister und durch Senden des zweiten wird das Datum zum Master rotiert.
    Disclaimer: none. Sue me.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    15.07.2004
    Alter
    44
    Beiträge
    196
    ok so dachte ich mir das auch aber funzt ja mit dem senden nicht...
    machst du das in der int routiene oder fragst du SPIF ab?
    kannst ja mal code posten wenn du was hast.
    scheinst ja ziemlich fit in den ganzen themen zu sein zu sein...
    da versuch ich noch hinzukommen..

    mfg

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Poste mal den Code, vielleicht seh ich ja was. Aber erst die Tage...
    Disclaimer: none. Sue me.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    15.07.2004
    Alter
    44
    Beiträge
    196
    so hier mal der sklave der nix sendet:
    Code:
    #include <avr/io.h>
    #include <avr/signal.h>
    #include <avr/interrupt.h>
    
    #define DDR_SPI PORTB
    #define DD_SS	PB0
    #define DD_SCK  PB1
    #define DD_MOSI PB2
    #define DD_MISO PB3
    
    //#####################
    void spi_slave_init(void);
    void spi_slave_receive(void);
    int main(void);
    //#####################
    volatile char tx_data;
    volatile char rx_data;
    
    SIGNAL (SIG_SPI)
    {
    rx_data=SPDR;
    SPDR=tx_data;
    }
    
    void spi_transmit(void)
    {
    switch (rx_data)
    {
    case 0x00:	tx_data=0xFF;break;			//1.mal ini
    case 0x01: tx_data=0xFE;break;			//daten
    case 0x02:	tx_data=0xFD;break;			
    case 0x03: tx_data=0xFC;break;
    case 0x04:	tx_data=0xFB;break;			
    case 0x05: tx_data=0xFA;break;
    case 0x06:	tx_data=0xF9;break;			
    case 0x07: tx_data=0xF8;break;
    case 0x08:	tx_data=0xF7;break;			
    case 0x09: tx_data=0xF6;break;
    }
    }
    
    void spi_slave_init(void)
    {
    DDR_SPI = (1<<DD_MISO)|(0<<DD_MOSI)|(0<<DD_SS)|(0<<DD_SCK);
    SPCR = (1<<SPE)|(1<<SPIE);
    sei();
    }
    
    /*
    void spi_slave_receive(void)
    {
    SPDR=tx_data;
    while(!(SPSR & (1<<SPIF)));
    rx_data=SPDR;
    }
    */
    
    int main(void)
    {
    DDRE=0xFF;
    
    spi_slave_init();
    
    while(1)
    {
    PORTE=rx_data;
    spi_transmit();
    //spi_slave_receive();
    }
    return 0;
    }

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    15.07.2004
    Alter
    44
    Beiträge
    196
    verflucht!!!
    fehler gefunden!
    #define DDR_SPI PORTB hier liegt der fehler
    PORTB muss ja auch DDRB heissen lässt mich ja mal wieder wie n anfänger aussehen...
    mfg

Berechtigungen

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

LiTime Speicher und Akkus