kramann.info
© Guido Kramann

Login: Passwort:










Mikrocontroller
1 Einfuehrung
..1.1 Entwicklungsgeschichtliches
..1.2 Maschinensprache
..1.3 Assemblerbeispiel
..1.4 Sprachwahl
..1.5 Praxis
....1.5.1 Digital_IO
....1.5.2 Byteoperationen
....1.5.3 AVR_Studio
....1.5.4 Testboard
....1.5.5 Aufgaben
....1.5.6 Do_it_yourself
......1.5.6.1 Ampel
......1.5.6.2 Programmierer
..1.6 Literatur
..1.7 Programmierer
....1.7.1 Bauverlauf
....1.7.2 KurzreferenzLow
....1.7.2 Kurzreferenz_16PU
..1.8 Uebung1
..1.9 BoardAtHome
....1.9.1 Software
....1.9.2 Hardware
....1.9.3 Knoppix
....1.9.4 Aufbau
....1.9.5 LED
2 Oszillator
..2.1 Assembler
..2.2 Interner_RC
..2.3 Quarz
..2.4 Taktgenerator
3 DigitalIO
..3.1 Elektrische_Eigenschaften
..3.2 Pullup_Widerstaende
..3.3 Bitmasken_Eingang
..3.4 Bitmasken_Ausgang
..3.5 Tic_Tac_Toe
....3.5.1 DuoLEDs
....3.5.2 Schaltplan
....3.5.3 Spielfeld
....3.5.4 Anwahl
....3.5.5 Kontrolle
..3.6 Laboruebung2
..3.7 Laboruebung2_alt
4 PWM
..4.1 Prinzip
..4.2 Nutzen
..4.3 Generierung
..4.4 Programmierung
..4.5 Servos
..4.7 Laboruebung3
..4.8 LoesungUE3
..4.9 Uebung6
5 LichtKlangKugeln
..5.1 LED
..5.2 RGB
..5.3 Sensoren
..5.4 lautsprecher
..5.5 tonerzeugung
6 UART
..6.1 Bussysteme
..6.2 UART
..6.3 RS232
..6.4 Hardware
..6.5 Senden
..6.6 Hyperterminal
..6.7 Empfangen
..6.8 Broadcast
..6.9 Uebung4
7 Infrarot
..7.1 schalten
..7.2 seriell
..7.3 Uebung
8 OOP
..8.1 Probleme
..8.2 Konzept
..8.3 Statisch
..8.4 Datentypen
..8.5 RS232
....8.5.1 Prozedural
....8.5.2 Analyse
....8.5.3 Umsetzung
....8.5.4 Vererbung
....8.5.5 Statisch
....8.5.6 Performance
..8.6 Fahrzeug
9 ADW
..9.1 ADW
..9.2 Zaehler
10 Peripherie
..10.1 RS232Menue
..10.2 ASCIIDisplay
..10.3 Tastenmatrix
..10.4 Schrittmotor
..10.5 Zaehler
..10.6 Uebung7
11 SPI
..11.1 Testanordnung
..11.2 Register
..11.3 Test1
..11.4 Test2_Interrupt
..11.5 Test3_2Slaves
..11.6 Laboruebung
12 EEPROM
13 I2C
..13.1 MasterSendByte
..13.2 MasterSend2Bytes
..13.3 MasterReceiveByte
..13.4 MasterReceive2Bytes
14 Anwendungen
..14.1 Mechatroniklabor
....14.1.1 Biegelinie
....14.1.2 Ausbruchsicherung
....14.1.3 Einachser
....14.1.4 AV
....14.1.5 Vierradlenkung
....14.1.6 Kommunikation
..14.2 Sinuserzeugung
....14.2.1 Variante1
....14.2.2 Variante2
....14.2.3 Variante3
....14.2.4 Variante4
..14.3 Laboruebung8
..14.4 Loesung_Ue8
..14.5 SPI_Nachtrag
20 Xubuntu
kramann.info
© Guido Kramann

Login: Passwort:




Konfiguration der Register

  • Damit die Programme in der angegebenen Weise laufen, müssen wieder einige Register auf dem ATmega32 konfiguriert werden.
  • Achtung, es gibt hier zunächst zwei und später dann drei Programme: Eines für den Master, eines für Slave 1 und eines für Slave 2.
  • Die Programme werden zunächst prozedural umgesetzt, um sie auf das nötigste zu reduzieren.
  • Später sollen aber auch geeignete Klassen zur Verwendung der SPI-Schnittstelle als Master oder Slave entworfen werden.
  • Folgende Konfigurationen müssem beim Master im SPCR (SPI Control Register) vorgenommen werden:
  1. Bit 7 SPIE - 0 Interupt aus (Der Master erzeugt bei den Slaves Interrupts, bekommt aber selber keinen.)
  2. Bit 6 SPE - 1 SPI-Schnittstelle freigeben.
  3. Bit 5 DORD - 0 MSB, Most significant Bit, zuerst, also Bit 7 zuerst senden (DORD=1 hieße Bit 0, LSB, zuerst senden).
  4. Bit 4 MSTR - 1 Betriebsart: als Master arbeiten
  5. Bit 3 CPOL - 0 SCK ist Low in Ruhe. Der Takt beginnt also beim Übertragen neuer Daten mit einer steigenden Flanke.
  6. Bit 2 CPHA - 0 Das erste Datenbit wird erst ab der zweiten High-Flanke des Taktes begonnen zu senden, also versetzt. (CPHA=1: erstes Bit gleich mit erster Flanke des Taktes setzen).
  7. Bit 1 SPR1 - 0 Die Teilung des Systemtaktes für SPI ist über SPR1 und SPR0 kodiert: hier Teilung durch 4.
  8. Bit 0 SPR0 - 0 SPR1, SPR0 => Teilung: 0,0=>4 0,1=>16 1,0=>64 1,1=>128
SPCR = (0<<SPIE) | (1<<SPE) | (0<<DORD) | (1<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);
 

Code 0-1: Konfiguration des SPCR-Registers beim Master.

  • Außer, in der Betriebsart (MSTR) müssen die Slaves mit dem Master übereinstimmen.
  • Darum ergibt sich für das Register SPCR bei den Slaves bis auf dieses eine Bit und die Aktivierung der Interrupts bei Low-Flanke auf Slave-Select die gleiche Konfiguration.
  • Folgende Konfigurationen müssem deshalb bei den Slaves im Register SPCR vorgenommen werden:
  1. Bit 7 SPIE - 1 Interupt ein.
  2. Bit 6 SPE - 1 SPI-Schnittstelle freigeben.
  3. Bit 5 DORD - 0 MSB, Most significant Bit, zuerst, also Bit 7 zuerst senden (DORD=1 hieße Bit 0, LSB, zuerst senden).
  4. Bit 4 MSTR - 0 Betriebsart: als Slave arbeiten
  5. Bit 3 CPOL - 0 SCK ist Low in Ruhe. Der Takt beginnt also beim Übertragen neuer Daten mit einer steigenden Flanke.
  6. Bit 2 CPHA - 0 Das erste Datenbit wird erst ab der zweiten High-Flanke des Taktes begonnen zu senden, also versetzt. (CPHA=1: erstes Bit gleich mit erster Flanke des Taktes setzen).
  7. Bit 1 SPR1 - 0 Die Teilung des Systemtaktes für SPI ist über SPR1 und SPR0 kodiert: hier Teilung durch 4.
  8. Bit 0 SPR0 - 0 SPR1, SPR0 => Teilung: 0,0=>4 0,1=>16 1,0=>64 1,1=>128
SPCR = (1<<SPIE) | (1<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);
 

Code 0-2: Konfiguration des SPCR-Registers bei den Slaves.

  • Das zweite am SPI-Bus beteiligte Register ist das Register SPSR (SPI Status Register).
  • Hier werden nur die Bits 7,6 und 0 verwendet:
  • /ul>
  1. Bit 7 SPIF - 1: Trasfer fertig/Masterabbruch; 0: Übertragung läuft noch.
  2. Bit 6 WCOL - 1: Schreibfehler/ Kollision; 0: Datenübertragung in Ordnung.
  3. Bit 0 SPI2X - 1: Verdopplung des Taktes; 0: einfacher Takt.
  • Das dritte am SPI-Bus beteiligte Register ist das Register SPDR (SPI Data Register).
  • Hier wird das aktuell zu sendende Byte hinein geschrieben, bzw. wird das aktuell empfangene Byte gespeichert.
  • Vor dem Empfangen des nächsten Bytes, muß dieses Register ausgelesen werden.
  • Vor dem Ausführen eines Sende/Empfangszyklus' müssen die Datenregister von Master und Slave 1 mit der jeweils zu sendenden Zahl gefüllt sein.
  • Im SPDR-Register des Masters steht nach dem ersten Teil des Sende/Empfangszyklus' dann die von Slave 1 gesendete Zahl.
  • /ul>
  • Aufgrund der obigen Beschreibungen und der eingefügten Kommentare, sollten die folgenden zusammengehörenden Programme für Master, Slave1 und Slave2 zur durchführung des beschriebenen Versuches nun verstehbar sein:
  • /ul>