none
Raspberry PI Windows IoT 10 - UWP- I2C RRS feed

  • Frage

  • Hallo,

    Ich wollte Sensoren über I2C ansprechen/auslesen. Leider bekomme ich immer wieder den Fehler: "Slave address was not acknowledged". Habe im Internet eine Funktion gefunden, die alle Adressen am I2C -Bus abfragt. Aber bei jeder derselbe Fehler. Komisch ist, dass die SDA und SCL Leitung immer auf 3.3V ist. Auch nach dem Start der Abfrage ist das so. Muss man die Hardware erst aktivieren? Pull-Ups sind softwareseitig schon gesetzt, soweit ich das mitbekommen habe.

    Funktion zum Abfragen ob eine Adresse am Bus vorhanden ist:

    namespace App4
    {
        /// <summary>
        /// Eine leere Seite, die eigenständig verwendet oder zu der innerhalb eines Rahmens navigiert werden kann.
        /// </summary>
        public sealed partial class MainPage : Page
        {
            private I2cDevice i2cPortExpander;
    
            public MainPage()
            {
                this.InitializeComponent();
                // Register for the unloaded event so we can clean up upon exit
               // InitializeSystem();
            }
    
            private async void InitializeSystem()
            {
    
                var i2cSettings = new I2cConnectionSettings(0x40);
                i2cSettings.BusSpeed = I2cBusSpeed.FastMode;
                string deviceSelector = I2cDevice.GetDeviceSelector("I2C1");
                var i2cDeviceControllers = await DeviceInformation.FindAllAsync(deviceSelector);
                i2cPortExpander = await I2cDevice.FromIdAsync(i2cDeviceControllers[0].Id, i2cSettings);
                i2cPortExpander.Write(new byte[] { 0x40, 0x00 });
            }    
               
    
               
    
             
    
            private void Buttonpressed(object sender, RoutedEventArgs e)
            {
    			//i2cPortExpander.Write(new byte[] { 0x40,0xFF });
    			FindDevicesAsync();
    
    		}
    
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                //i2cPortExpander.Write(new byte[] { 0x40,0x00 });
            }
    
    		public async System.Threading.Tasks.Task FindDevicesAsync()
    		{
    			
    
    			// *** 
    			// *** Get a selector string that will return all I2C controllers on the system
    			// *** 
    			string aqs = I2cDevice.GetDeviceSelector();
    
    			// *** 
    			// *** Find the I2C bus controller device with our selector string 
    			// *** 
    			var dis = await DeviceInformation.FindAllAsync(aqs).AsTask();
    
    			if (dis.Count > 0)
    			{
    				const int minimumAddress = 0x08;
    				const int maximumAddress = 0x77;
    
    				for (byte address = minimumAddress; address <= maximumAddress; address++)
    				{
    					var settings = new I2cConnectionSettings(address);
    					settings.BusSpeed = I2cBusSpeed.FastMode;
    					settings.SharingMode = I2cSharingMode.Shared;
    
    					// *** 
    					// *** Create an I2cDevice with our selected bus controller and I2C settings 
    					// *** 
    					using (I2cDevice device = await I2cDevice.FromIdAsync(dis[0].Id, settings))
    					{
    						if (device != null)
    						{
    							try
    							{
    								byte[] writeBuffer = new byte[1] { 0 };
    								device.Write(writeBuffer);
    
    								// *** 
    								// *** If no exception is thrown, there is 
    								// *** a device at this address. 
    								// *** 
    								Debug.Print(address.ToString());
    							}
    							catch
    							{
    								// *** 
    								// *** If the address is invalid, an exception will be thrown. 
    								// *** 
    							}
    						}
    					}
    				}
    			}
    
    	
    		}
    	}
    }

    Sonntag, 4. Oktober 2020 09:43

Alle Antworten

  • Hallo Reiter86,

    Hast Du die Sensoren gelötet, wie in diesem Thread beschrieben, der sich mit einem ähnlichen Problem befasst:
    Issues with I2C devices
    Weitere Informationen über Löten für Raspberry Pi findest Du hier:
    How do you solder your sensors?

    Gruß,

    Ivan Dragov

    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Montag, 5. Oktober 2020 10:54
    Moderator
  • Hallo,

    Nein, habe u.a. einen Port Expander MCP23017 versucht, aber der geht auch nicht. Habe bereits über das direkte Anlöten was gelesen, aber kann mir fast garnicht vorstellen, dass es daran liegt. Da es keine Alternative gibt muss ichs mal mit Direktanlöten versuchen.

    Donnerstag, 8. Oktober 2020 13:39
  • Also hat leider nichts gebracht. Bleibt bei dem Ergebnis.
    Montag, 19. Oktober 2020 15:39