Aus RN-Wissen.de
Wechseln zu: Navigation, Suche
Rasenmaehroboter Test

K (Planung)
K (Planung)
Zeile 12: Zeile 12:
 
<pre>// Commands:
 
<pre>// Commands:
 
#define CMD_CONFIGIOS 0
 
#define CMD_CONFIGIOS 0
#define CMD_SETIOS 1
+
#define CMD_SETIOS 1
#define CMD_CONFIG 2
+
#define CMD_CONFIG 2
#define CMD_SETLEDS 3
+
#define CMD_SETLEDS 3
#define CMD_DISCHARGEPEAKDETECTOR 4
+
#define CMD_DISCHARGEPEAKDETECTOR 4
#define CMD_GETMICROPHONEPEAK 5
+
#define CMD_GETMICROPHONEPEAK 5
 
#define CMD_SETMEM_CS2 6
 
#define CMD_SETMEM_CS2 6
 
#define CMD_WRITESPI 7
 
#define CMD_WRITESPI 7
 
#define CMD_WRITEWORDSPI 8
 
#define CMD_WRITEWORDSPI 8
#define CMD_READSPI 9
+
#define CMD_READSPI 9
 
#define CMD_READWORDSPI 10
 
#define CMD_READWORDSPI 10
  
#define CMD_SET_WDT 11
+
#define CMD_SET_WDT 11
 
#define CMD_SET_WDT_RQ 12
 
#define CMD_SET_WDT_RQ 12
 
#define CMD_SET_HEARTBEAT 13
 
#define CMD_SET_HEARTBEAT 13
  
#define CMD_SPI_EEPROM_WRITEBYTE 14
+
#define CMD_SPI_EEPROM_WRITEBYTE 14
#define CMD_SPI_EEPROM_WRITEWORD 15
+
#define CMD_SPI_EEPROM_WRITEWORD 15
#define CMD_SPI_EEPROM_ENABLEWRITE 16
+
#define CMD_SPI_EEPROM_ENABLEWRITE 16
#define CMD_SPI_EEPROM_DISABLEWRITE 17
+
#define CMD_SPI_EEPROM_DISABLEWRITE 17
#define CMD_SPI_EEPROM_READBYTE 18
+
#define CMD_SPI_EEPROM_READBYTE 18
#define CMD_SPI_EEPROM_READWORD 19
+
#define CMD_SPI_EEPROM_READWORD 19
#define CMD_SPI_EEPROM_GETSTATUS 20
+
#define CMD_SPI_EEPROM_GETSTATUS 20
  
#define CMD_INITLCD 21
+
#define CMD_INITLCD 21
 
#define CMD_CLEARLCD 22
 
#define CMD_CLEARLCD 22
 
#define CMD_WRITECHARLCD 23
 
#define CMD_WRITECHARLCD 23
Zeile 41: Zeile 41:
 
#define CMD_SETCURSORPOSLCD 25
 
#define CMD_SETCURSORPOSLCD 25
  
#define CMD_BEEP 26
+
#define CMD_BEEP 26
 
#define CMD_SETBEEPERPITCH 27
 
#define CMD_SETBEEPERPITCH 27
#define CMD_SOUND 28
+
#define CMD_SOUND 28
 
</pre>
 
</pre>
 
  Dabei setzt Befehl 0 die 8 freien I/O-Pins der M32 als Ein- oder Ausgänge.
 
  Dabei setzt Befehl 0 die 8 freien I/O-Pins der M32 als Ein- oder Ausgänge.
Zeile 57: Zeile 57:
 
* 8. Er soll folgende Register zum Lesen durch den Master vorhalten:
 
* 8. Er soll folgende Register zum Lesen durch den Master vorhalten:
 
<pre>
 
<pre>
#define I2C_REG_STATUS1     0
+
#define I2C_REG_STATUS1     0
#define I2C_REG_STATUS2     1
+
#define I2C_REG_STATUS2     1
#define I2C_REG_IO_STATUS     2
+
#define I2C_REG_IO_STATUS     2
#define I2C_REG_MEM_CS2   3
+
#define I2C_REG_MEM_CS2   3
#define I2C_REG_SPIBYTE   4
+
#define I2C_REG_SPIBYTE   4
#define I2C_REG_SPIWORD_L   5
+
#define I2C_REG_SPIWORD_L   5
#define I2C_REG_SPIWORD_H   6
+
#define I2C_REG_SPIWORD_H   6
#define I2C_REG_SPIEEPROMSTATUS 7
+
#define I2C_REG_SPIEEPROMSTATUS 7
#define I2C_REG_SPIEEPROMBYTE 8
+
#define I2C_REG_SPIEEPROMBYTE 8
#define I2C_REG_SPIEEPROMWORD_L 9
+
#define I2C_REG_SPIEEPROMWORD_L 9
#define I2C_REG_SPIEEPROMWORD_H 10
+
#define I2C_REG_SPIEEPROMWORD_H 10
#define I2C_REG_ADC_4_L     11
+
#define I2C_REG_ADC_4_L     11
#define I2C_REG_ADC_4_H     12
+
#define I2C_REG_ADC_4_H     12
#define I2C_REG_ADC_3_L     13
+
#define I2C_REG_ADC_3_L     13
#define I2C_REG_ADC_3_H     14
+
#define I2C_REG_ADC_3_H     14
#define I2C_REG_ADC_2_L     15
+
#define I2C_REG_ADC_2_L     15
#define I2C_REG_ADC_2_H     16
+
#define I2C_REG_ADC_2_H     16
#define I2C_REG_ADC_6_L     17
+
#define I2C_REG_ADC_6_L     17
#define I2C_REG_ADC_6_H     18
+
#define I2C_REG_ADC_6_H     18
#define I2C_REG_ADC_5_L   19
+
#define I2C_REG_ADC_5_L   19
#define I2C_REG_ADC_5_H   20
+
#define I2C_REG_ADC_5_H   20
#define I2C_REG_ADC_7_L     21
+
#define I2C_REG_ADC_7_L     21
#define I2C_REG_ADC_7_H   22
+
#define I2C_REG_ADC_7_H   22
#define I2C_REG_ADC_MIC_L     23
+
#define I2C_REG_ADC_MIC_L     23
#define I2C_REG_ADC_MIC_H     24
+
#define I2C_REG_ADC_MIC_H     24
 
#define I2C_REG_ADC_KEYPAD_L    25
 
#define I2C_REG_ADC_KEYPAD_L    25
#define I2C_REG_ADC_KEYPAD_H   26
+
#define I2C_REG_ADC_KEYPAD_H   26
 
#define I2C_REG_RELEASEDKEYNUMBER 27
 
#define I2C_REG_RELEASEDKEYNUMBER 27
 
#define I2C_REG_PRESSEDKEYNUMBER  28
 
#define I2C_REG_PRESSEDKEYNUMBER  28
#define I2C_REG_LEDS     29
+
#define I2C_REG_LEDS     29
 
</pre>
 
</pre>
 
  Die REGs 0,1 sind die Interrupt- und Status-Register wie beim Base-Slave.
 
  Die REGs 0,1 sind die Interrupt- und Status-Register wie beim Base-Slave.

Version vom 12. September 2012, 18:23 Uhr

Planung

Erst mal die Planung:

  • 1. Der I2C-Slave für die M32 soll genauso arbeiten, wie der RP6Base I2C-Slave (RP6Base_I2CSlave.c) in den Demos.
  • 2. Er soll möglichst (fast) alle Funktionen/Ressourcen der M32 über I2C "fernsteuerbar" bzw. abfragbar machen.
  • 3. Er soll als I2C-Master eine andere M32, die CCPRO M128 oder die M256 WiFi akzeptieren.
  • 4. Er soll die I2C-Adresse 12 bekommen.
  • 5. Er soll über XBUS INT2 mit dem Master verbunden sein.
  • 6. Er soll wie der Base-Slave auch eine Timeout-Funktion haben.
  • 7. Er soll folgende Befehle (commands) über I2C verstehen:
// Commands:
#define CMD_CONFIGIOS				0
#define CMD_SETIOS				1
#define CMD_CONFIG				2
#define CMD_SETLEDS				3
#define CMD_DISCHARGEPEAKDETECTOR		4
#define CMD_GETMICROPHONEPEAK			5
#define CMD_SETMEM_CS2				6
#define CMD_WRITESPI				7
#define CMD_WRITEWORDSPI			8
#define CMD_READSPI				9
#define CMD_READWORDSPI				10

#define CMD_SET_WDT				11
#define CMD_SET_WDT_RQ				12
#define CMD_SET_HEARTBEAT			13

#define CMD_SPI_EEPROM_WRITEBYTE		14
#define CMD_SPI_EEPROM_WRITEWORD		15
#define CMD_SPI_EEPROM_ENABLEWRITE 		16
#define CMD_SPI_EEPROM_DISABLEWRITE 		17
#define CMD_SPI_EEPROM_READBYTE			18
#define CMD_SPI_EEPROM_READWORD			19
#define CMD_SPI_EEPROM_GETSTATUS		20

#define CMD_INITLCD				21
#define CMD_CLEARLCD				22
#define CMD_WRITECHARLCD			23
#define CMD_WRITEINTEGERLCD			24
#define CMD_SETCURSORPOSLCD			25

#define CMD_BEEP				26
#define CMD_SETBEEPERPITCH			27
#define CMD_SOUND				28
Dabei setzt Befehl 0 die 8 freien I/O-Pins der M32 als Ein- oder Ausgänge.
Befehl 1 schaltet die einzelnen I/O-Portpins.
Befehl 2 ist Platzhalter ohne Funktion (z.B. zur Konfiguration des Slave).
Befehl 3 schaltet die LEDs. Befehle 4, 5 gehen mit dem Mikro um.
Befehle 6-10 sind die SPI-Befehle.
Befehle 11,12 gehören zum Watchdog-Timer (wie bei der Base!).
Befehl 13 schaltet die LCD Heartbeat (Herzschlag) Funktion.
Befehle 14-20 lesen und schreiben von/aus dem SPI-EEPROM auf der M32.
Befehle 21-25 steuern das LCD auf der M32 an.
Befehle 26-28 steuern den Sound mit dem Beeper.
  • 8. Er soll folgende Register zum Lesen durch den Master vorhalten:
#define I2C_REG_STATUS1     	0
#define I2C_REG_STATUS2     	1
#define I2C_REG_IO_STATUS     	2
#define I2C_REG_MEM_CS2    	3
#define I2C_REG_SPIBYTE    	4
#define I2C_REG_SPIWORD_L   	5
#define I2C_REG_SPIWORD_H   	6
#define I2C_REG_SPIEEPROMSTATUS 7
#define I2C_REG_SPIEEPROMBYTE  	8
#define I2C_REG_SPIEEPROMWORD_L 9
#define I2C_REG_SPIEEPROMWORD_H 10
#define I2C_REG_ADC_4_L      	11
#define I2C_REG_ADC_4_H      	12
#define I2C_REG_ADC_3_L      	13
#define I2C_REG_ADC_3_H      	14
#define I2C_REG_ADC_2_L      	15
#define I2C_REG_ADC_2_H      	16
#define I2C_REG_ADC_6_L     	17
#define I2C_REG_ADC_6_H     	18
#define I2C_REG_ADC_5_L    	19
#define I2C_REG_ADC_5_H    	20
#define I2C_REG_ADC_7_L      	21
#define I2C_REG_ADC_7_H    	22
#define I2C_REG_ADC_MIC_L     	23
#define I2C_REG_ADC_MIC_H     	24
#define I2C_REG_ADC_KEYPAD_L    25
#define I2C_REG_ADC_KEYPAD_H   	26
#define I2C_REG_RELEASEDKEYNUMBER 27
#define I2C_REG_PRESSEDKEYNUMBER  28
#define I2C_REG_LEDS      	29
Die REGs 0,1 sind die Interrupt- und Status-Register wie beim Base-Slave.
IO-Status (REG 2) sind die 8 freien I/O-Ports (sofern auf Eingänge geschaltet).
REGs 3-10 sind Leseregister der SPI- und SPI-EEPROM-Funktionen.
REGs 11-23 sind die freien ADC-Kanäle der M32.
REGs 23,24 sind der ADC-Wert des Mikro.
REGs 25,26 sind der ADC-Keypad-Wert.
REGs 27,28 sind die Nummern der zuletzt losgelassenen bzw. gedrückten Taste.
Mit REG 29 läßt sich der aktuelle Stand der 4 LEDs auslesen (an/aus).
  • 9. Er soll auf die RP6Control Library V1.32beta aufsetzen. Grund: Die aktuelle Lib V1.32beta ist voll kompatibel zur neuesten Version 1.3 und stellt mit eigenen Tasks schon regelmäßig die ADC-Werte und Werte der I/O-Ports zur Verfügung.
  • 10. Bei Timeout soll die M32 funktionsfähig bleiben (Base-Slave bleibt dann in einer Endlosschleife stehen und muss resettet werden!).

I2C-Slave

I2C-Master (M256 WiFi)

Siehe auch


Weblinks


Autoren

--Dirk 16:31, 12. Sep 2012 (CET)


LiFePO4 Speicher Test