sieh bitte mal nach ob jetzt alles dabei ist
Es gleich mal gestartet und die ersten Zeilen stehen auf dem Display und die LED geht auch. Werde es noch weiter ansehen. Es wurde ohne Fehler übersetzt. Da gibt es wieder viel zu lernen für mich. Danke für deine Arbeit.
packet.address = SLAVE_ADDRESS_2; packet.data_length = 32; //DATA_LENGTH_1; packet.data = i2c_read_buffer; timeout = 0; while (i2c_master_read_packet_wait(&i2c_master_instance, &packet) != STATUS_OK) { if (timeout++ == Timeout) { // Error LED_PB30_ON break; } }
while (1) { // Abfrage Taster //if (port_pin_get_input_level(Button1)) // Taster nicht gedrückt //if (!port_pin_get_input_level(Button1)) // Taster gedrückt if (i2c_read_buffer == ???) // Taster gedrückt { // Schaltet LED write_a_data(); // Aufruf Bus write_c_data(); // Aufruf Bus port_pin_toggle_output_level(LED1); // Toggelt LED1 delay_ms(500); // Zeit 500ms port_pin_toggle_output_level(LED1); // Toggelt LED1 delay_ms(500); // Zeit 500ms } else { write_b_data(); // Aufruf Bus } }
es sollte eigentlich auf einem Atmega1284 genauso funktionieren wie auf einen tinyAVR, SAM ARM, RasperryPi, PC .... Das Datenblatt des Portexpanders ändert sich ja nichtKann ich es genau so machen wie beim Atm 1284, erst senden und dann abfragen?
packet.address = SLAVE_ADDRESS_2; packet.data_length = 1; //DATA_LENGTH_1; packet.data = i2c_read_buffer; timeout = 0; while (i2c_master_read_packet_wait(&i2c_master_instance, &packet) != STATUS_OK)
i2c_init (); i2c_start(adr1_w); // Schreibbefehl i2c_write(0xff); // Alle Pins des PCF auf 0 i2c_stop(); while(1) { // Hauptschleife i2c_start(adr1_r); // Starte Lesezugriff d=i2c_readNak(); // Schreib Leseergebnis in d i2c_stop(); if (~d & 0x02) // Abfrage T2 { // Wenn T2 gedrückt ist... i2c_start(adr2_w); // Schreibbefehl e = 0x5c; // Angabe LED Port0 i2c_write(e); // Schreibe e i2c_stop(); _delay_ms(100); // 100ms warten } else { e = 0xff; // alle LED aus i2c_start(adr2_w); // Schreibbefehl i2c_write(e); // Schreibe e i2c_stop(); } } _delay_ms(100);
Vielleicht hast du ein Hinweise für mich
uint8_t meinbuffer[10]; configure_i2c(); // ... meinbuffer[0] = 0xFF; write_data_i2c(LCD_I2C_DEVICE, meinbuffer, 1); while(1) { read_data_i2c(LCD_I2C_DEVICE, meinbuffer, 1); if (~meinbuffer[0] & 0x02) // Abfrage T2 { // Wenn T2 gedrückt ist... meinbuffer[0] = 0x5C; write_data_i2c(LCD_I2C_DEVICE, meinbuffer, 1); delay_ms(100); // 100ms warten } else { meinbuffer[0] = 0xFF; write_data_i2c(LCD_I2C_DEVICE, meinbuffer, 1); } }
void read_data(void) { uint16_t timeout; timeout = 0; packet.address = SLAVE_ADDRESS_2; packet.data_length = 1; packet.data = i2c_write_buffer_a; i2c_write_buffer_a[0] = 0; while (i2c_master_write_packet_wait(&i2c_master_instance, &packet) != STATUS_OK) { if (timeout++ == Timeout) { // Error LED_PB30_ON break; } } packet.address = SLAVE_ADDRESS_2; packet.data_length = 1; //DATA_LENGTH_1; packet.data = i2c_read_buffer[0]; timeout = 0; while (i2c_master_read_packet_wait(&i2c_master_instance, &packet) != STATUS_OK) { if (timeout++ == Timeout) { // Error LED_PB30_ON break; } } }
while (1) { read_data(); // Abfrage Taster if (i2c_read_buffer[0] & 0xf1) // Taster gedrückt //if (~meinbuffer[0] & 0x02) // Abfrage T2 ****Dirk { // Schaltet LED write_a_data(); // Aufruf Bus write_c_data(); // Aufruf Bus port_pin_toggle_output_level(LED1); // Toggelt LED1 delay_ms(500); // Zeit 500ms port_pin_toggle_output_level(LED1); // Toggelt LED1 delay_ms(500); // Zeit 500ms } else { write_b_data(); // Aufruf Bus }
i2c_init (); i2c_start(adr1_w); // Schreibbefehl i2c_write(0xff); // Alle Pins des PCF auf 0 i2c_stop();
i2c_start(adr1_r); // Starte Lesezugriff d=i2c_readNak(); // Schreib Leseergebnis in d i2c_stop();
#define CONF_I2C_MASTER_MODULE SERCOM1 #define SLAVE_ADDRESS_1 0x21 // Angabe Slave Adresse 0x21 #define SLAVE_ADDRESS_2 0x22 // Angabe Slave Adresse 0x22