-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: spi mit avr

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    05.08.2011
    Beiträge
    9

    spi mit avr

    Anzeige

    Hallo,

    wenn ein Byte in das Register SPDR geschrieben wird, dann beginnt automatisch die Übertragung an den Slave. Der SHIFT-Takt wird vom AVR selber generiert.

    MEGA8

    Meine Frage:

    Code:
    void spi_shift(uint8_t data1)
    {
            SPDR = data1;		        //=== Start transmission
    	
    	while(!(SPSR & (1<<SPIF))); // warten, bis Übertragung zu Ende ist
    
            PORTB=1<<PB2;                 // Store
    }
    Generiert der AVR den /SS PIN ebenfalls eigenständig? Auf dem Oszilloskope kann ich kein LOW am PIN /SS sehen.

    In meinem Programm, welches funktioniert, ist der PIN /SS nicht auf LOW gesetzt, sondern hat permanent HIGH-Pegel laut Oszilloskop.

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Kandel
    Alter
    29
    Beiträge
    1.220
    Zitat Zitat von 11udo11 Beitrag anzeigen
    Generiert der AVR den /SS PIN ebenfalls eigenständig?
    Nein. Das macht auch relativ wenig Sinn, da am AVR ja mehrere verschiedene Slaves angeschlossen sein können. Du musst die entsprechende Leitung schon selbst ansteuern. Wenn du ihn als Ausgang benutzt, ist das in Ordnung, aber wenn du ihn als Eingang benutzt und das Eingangssignal Low ist, bricht die SPI-Übertragung ab (Bus-Kollision!)

    Grüße,
    Markus
    Tiny ASURO Library: Thread und sf.net Seite

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    05.08.2011
    Beiträge
    9
    Danke Markus für Deine Antwort.

    Aber es bleibt dennoch eine Unklarheit im Raum:

    Ich habe nirgendwo den /SS auf LOW gesetzt. Warum funktioniert mein Programm? Alle Werte, die ich vom MEGA8 auf die beiden 74HCT595 schicke, werden bitgenau angezeigt. Immer!

    Jemand muss doch den /SS auf LOW setzen, damit der 74HCT595 die Ausgänge freigeben, oder?

    Hier mein kleiners Testprogramm, OHNE LOW für /SS!!

    Code:
    // SPI mit 74HCT595 2 Bytes  an 2 ICs 74HCT595
    
    #define F_CPU  12000000UL
    #include <stdio.h>
    #include <avr/io.h>
    #include <avr/interrupt.h>
    
    volatile uint8_t data1=3, data2=3, count;
    
    
    //############################################################################
    void spi_shift(uint8_t data1, uint8_t data2)
    {
    	
    	SPDR = data1;		//=== Start transmission
    	
    	while(!(SPSR & (1<<SPIF))); // warten, bis Übertragung zuende ist
    	
    	SPDR=data2;
    	
    	while(!(SPSR & (1<<SPIF))); // warten, bis Übertragung zuende ist
    	
    	PORTB=1<<PB2;// Store
    	
    	
    }
    //############################################################################
    
    void HC595Init()
    {
    DDRB = (1<<DDB2)|(1<<DDB3)|(1<<DDB5);   // DDB2 ist SS DDB3 ist MOSI, DDB5 ist SCK
    		
    SPCR |= (1<<SPE) | (1<<MSTR) | (1<<CPHA) | (1<<CPOL) | (1<<SPR0);// enable | master | CPHA | 1/16clk
    
    }
    //############################################################################
    
    int main(void)
    {
    	HC595Init();
    	while(1)
    	{
    		spi_shift(data1,data2);
    	}
    }

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.03.2011
    Beiträge
    1.397
    Zitat Zitat von 11udo11 Beitrag anzeigen
    Jemand muss doch den /SS auf LOW setzen, damit der 74HCT595 die Ausgänge freigeben, oder?
    Ein 595 hat keinen Pin mit Namen /SS

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    05.08.2011
    Beiträge
    9
    Natürlich ist der PIN am Mega8 gemeint, der mit dem RLCK (12) verbunden ist!

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.03.2011
    Beiträge
    1.397
    Was zeigt denn das Scope an Pin 12 vom 595?

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    05.08.2011
    Beiträge
    9
    Das Oszilloskop zeigt an PB2(/SS) und RLCK das gleiche Signal.

    Der /SS ist ein Slave Select und der RLCK ist ein Store. Der RLCK entspricht doch in seiner Funktion einem Chipselect. Oder liege ich daneben?

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.03.2011
    Beiträge
    1.397
    Zitat Zitat von 11udo11 Beitrag anzeigen
    Das Oszilloskop zeigt an PB2(/SS) und RLCK das gleiche Signal.
    Und wie sieht es aus?

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    05.08.2011
    Beiträge
    9
    Es zeigt ein Dauer-HIGH.

    Habe allerdings erfahren, dass der Pegel an PIN /CSS vollkommen egal ist, wenn der MEGA als Master definiert ist. Verstehe ich nicht ganz, wer dann den Chip selektiert. Wird wohl dann doch vom Mega erledigt. Ich weiss es einfach nicht. Habe nicht so viel Erfahrung, dass ich die Vorgänge im System nachvollziehen kann.

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.03.2011
    Beiträge
    1.397
    Zitat Zitat von 11udo11 Beitrag anzeigen
    Es zeigt ein Dauer-HIGH
    Das ist merkwürdig. Nach meinem Datenblatt (bei dem das Signal an Pin 12 STCP heißt) wird dort eine Flanke von Low nach High benötigt, damit sich die Ausgänge ändern.
    Klicke auf die Grafik für eine größere Ansicht

Name:	Selection_033.jpg
Hits:	7
Größe:	43,5 KB
ID:	26163
    Da du aber wechselnde Bitmuster an den Ausgängen des 595 erhälst, stimmt da etwas mit dem Chip nicht.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. avr jtagice mkii debugwire -> spi
    Von drew im Forum AVR Hardwarethemen
    Antworten: 0
    Letzter Beitrag: 09.11.2008, 13:24
  2. SPI Kommunikation zwischen 2 AVR's
    Von Ruppi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 05.07.2007, 10:34
  3. AVR Programmierung SPI
    Von CodeX im Forum Elektronik
    Antworten: 0
    Letzter Beitrag: 06.05.2007, 08:09
  4. Flash mit SPI auslesen und programmieren direkt od. über AVR
    Von Shadowrun im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 01.07.2006, 12:31
  5. daten mit spi von avr zu avr übertragen
    Von pebisoft im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 21.10.2005, 15:49

Berechtigungen

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