-         
Ergebnis 1 bis 4 von 4

Thema: SPI bei 2 ATMega8

  1. #1
    Hero_123
    Gast

    SPI bei 2 ATMega8

    Anzeige

    Hallo

    Ich habe 2 ATMega8 (1*myAVR Board MK2 USB, 1*myAVRBoard Light), gemeinsame Spannungsversorgung und lasse sie per SPI kommunizieren; in jeder SPI-Leitung ist ein 1kOhm Serienwiderstand.
    Der Datenaustausch fkt auch (es werden 8 Bytes ausgetauscht), den korrekten Empfang der Daten lasse ich mir am PC per USART und hTerm anzeigen.
    Der Master sendet/empfängt die Daten gepollt (im main); der Slave per Interrupt.
    Bei der Sende/Empfangsfkt "void SPI_write( uint8_t *sen_buf, uint8_t *empf_buf, uint8_t buf_size )" des Masters muss ich aber ein _delay_us(50) einfügen, sonst stehen im Empfangspuffer des Master die Werte des Sendepuffers und nicht die Sendewerte des Slave (nach Einfügen des delays speichert der Master korrekt die Sendewerte des Slave)- ein delay ist ja die schlechteste Möglichkeit ...


    Außerdem muß ich den Slave auch flashen, wenn ich den Master geflasht habe, obwohl beim Slave nichts geändert worden ist - woran kann das liegen?

    Anbei das Master- und Slave File

    mfg
    Hero_123
    Geändert von Hero_123 (25.01.2019 um 14:19 Uhr)

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.04.2015
    Beiträge
    345
    Musst Du den Slave wirklich flashen oder nur resetten? (Kann man beim 6 pol. Original-ISP-Stecker mit nem Jumper, da liegen Reset und GND nebeneinander).
    Wenns nur der Reset ist, tippe ich mal auf eine falsche Neuinitialisierung (z.B. könnte das i_spi im SPI-ISR nach Neustart des Masters ohne Timeout beim Slave nicht mehr synchron laufen).


    BTW: Du könntest auch mal bei den Variablendeklarationen direkt den Initialwert dranschreiben:
    static volatile uint8_t i_spi; /* Zaehler der SPI- Bytes */
    ==>
    static volatile uint8_t i_spi = 0; /* Zaehler der SPI- Bytes */

    Das macht zwar beim AVR im Kaltstart keinen Unterschied, liest sich aber besser (und spätestens im init_SLAVE_INT wäre eine Initialisierung der intern benötigten Zustände/Zähler von der Logik her schon fast zwingend).
    Geändert von Holomino (23.01.2019 um 11:17 Uhr)

  3. #3
    Hero_123
    Gast
    Hallo Holomino

    Vielen Dank für Deine Antwort!

    Ich muss den Slave wirklich flashen; ein Betätigen des RESET - Tasters am "myAVRBoard Light" (geht direkt auf PC6 des ATMega8 ) bringt nichts (SPI läuft nicht, erkennbar daran, dass keine Daten ausgetauscht werden), obwohl die LED PORTD PD4 toggelt (ist quasi ein "Lebend" Signal).

    Initialwert direkt an Variablendeklarationen schfreiben - gute Idee, werde ich machen

    mfg
    Hero_123

  4. #4
    Hero_123
    Gast
    Problem erledigt, Thread kann geschlossen werden

Ähnliche Themen

  1. PWM mit ATMega8 und LM-35
    Von rogerberglen im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 08.03.2009, 18:40
  2. Antworten: 23
    Letzter Beitrag: 15.12.2007, 20:36
  3. I²C LCD mit ATmega8
    Von MartinFunk im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 12
    Letzter Beitrag: 15.02.2007, 20:37
  4. Unterschied ATmega8-16PC und ATmega8-16AC
    Von Christian 25 im Forum AVR Hardwarethemen
    Antworten: 17
    Letzter Beitrag: 01.10.2006, 20:09
  5. Atmega8 bei ELV
    Von Goblin im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 05.12.2005, 12:18

Berechtigungen

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