I2C Slave Adresse im Code einstellen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • I2C Slave Adresse im Code einstellen

      Hallo Forum,
      ich möchte gern die I2C Slave Adresse eines Attiny44 dynamisch im Code, per Konfigurationspins einstellen. Mein Problem ist nur, dass es sich ja um eine Config Geschichte handelt und ich mir nicht sicher bin wie das umsetzen kann. Eine Idee wäre, wie nachfolgend, geht aber nicht. Wie kann ich es richtig umsetzen? Hat hier jemand Erfahrung?


      'Konfigurationspins für I2C Adressen
      '---------------------------------
      Config Pinb.0 = Input
      Config_0 Alias Pinb.0
      Config_0 = 1


      Config Pinb.1 = Input
      Config_1 Alias Pinb.1
      Config_1 = 1

      If Config_0 = 0 And Config_1 = 0 Then
      Config Usi = Twislave , Address = &H13

      Elseif Config_0 = 1 And Config_1 = 0 Then
      Config Usi = Twislave , Address = &H12

      Elseif Config_0 = 0 And Config_1 = 1 Then
      Config Usi = Twislave , Address = &H11

      Else
      Config Usi = Twislave , Address = &H10
      End If



      Grüße
      Andreas
      Mancher Baum hätte wohl sein Wachstum eingestellt, wenn er gewusst hätte was hinterher für ein Mist auf seinem Papier geschrieben wird.
    • Hallo Michael,

      stimmt, da hast du recht. Mein Fehler. Wie ist das mit dem Umschalten der Adressen? Hast du da vielleicht eine Idee?

      Grüße
      Andreas
      Mancher Baum hätte wohl sein Wachstum eingestellt, wenn er gewusst hätte was hinterher für ein Mist auf seinem Papier geschrieben wird.
    • andreas schrieb:

      Wie ist das mit dem Umschalten der Adressen? Hast du da vielleicht eine Idee?
      ja*, aber beschreib doch bitte noch den Fehler.
      Auch sehe ich keinerlei Header.
      Du schreibst von einem Attiny44, aber ich sehe davon nichts in deinem Programm.
      Auch Stackwerte sind nicht vorhanden.

      *Ich vermute den Fehler bei Config, weil dort Konstanten erwartet werden.
      Aber ohne Fehlerbeschreibung ist es halt nur ein Vermuten...
    • Michael schrieb:

      I2C Adressen sind gerade (Master) oder ungerade (Slave)
      Da meinst du eher die Lese- und Schreibadressen :)

      andreas schrieb:

      ich möchte gern die I2C Slave Adresse eines Attiny44 dynamisch im Code, per Konfigurationspins einstellen.
      Das kannst du zum Beispiel so machen.


      BASCOM-Quellcode

      1. $regfile = "attiny44.dat"
      2. $crystal = 1000000
      3. $swstack = 32
      4. $hwstack = 10
      5. $framesize = 40
      6. $lib "i2c_usi_slave.lib"
      7. Config Pina.0 = Input
      8. Config Pina.1 = Input
      9. Porta.0 = 1
      10. Porta.1 = 1
      11. Config Sda = Porta.6
      12. Config Scl = Porta.4
      13. Dim Slave_add As Byte
      14. If Pina.0 = 0 And Pina.1 = 1 Then
      15. Slave_add = &H10
      16. Elseif Pina.0 = 1 And Pina.1 = 0 Then
      17. Slave_add = &H12
      18. Elseif Pina.0 = 0 And Pina.1 = 0 Then
      19. Slave_add = &H14
      20. Else
      21. Slave_add = &H16
      22. End If
      23. Config Usi = Twislave , Address = Slave_add
      24. Do
      25. Loop
      26. End
      27. Twi_stop_rstart_received:
      28. Return
      29. Twi_addressed_goread:
      30. Return
      31. Twi_addressed_gowrite:
      32. Return
      33. Twi_gotdata:
      34. Return
      35. Twi_master_needs_byte:
      36. Return
      37. Twi_master_need_nomore_byte:
      38. Return
      Alles anzeigen
      So geht es zumindestens ohne Fehlermeldung beim Compilieren.
      Du brauchst aber, wie @Michael schon gefragt hat, die I2C/TWI-LIB von MCS dazu.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Schöne Lösung, leider läßt sich das nicht so einfach auf den tinny portieren. Etwas eigenartig die Erkenntniss das die TWI Hardware keinen Perfomence Gewinn ergibt? Ob er das falsch interpretiert hat oder eine supergeniale Softwarelösung gefunden hatte? Oder ob Bascom die Harware "zu aufwändig" unterstützt?
    • Hallo Michael,

      ich habe nur einen Teil aus meinem Projekt dargestellt. Es besteht aus einigen Includes. Ja, ich habe die I2C Slave Lib.

      Denke die passende Antwort war diese, es über eine Variable der Config USI ... die passende I2C Adresse zuzuordnen. Manchmal ist die Lösung so einfach. :)
      Aber dafür gibts ja ein Forum. a_14_3ef964b0
      Danke, Michael!

      1. If Pina.0 = 0 And Pina.1 = 1 Then
      2. Slave_add = &H10
      3. Elseif Pina.0 = 1 And Pina.1 = 0 Then
      4. Slave_add = &H12
      5. Elseif Pina.0 = 0 And Pina.1 = 0 Then
      6. Slave_add = &H14
      7. Else
      8. Slave_add = &H16
      9. End If
      10. Config Usi = Twislave , Address = Slave_add
      Grüße
      Andreas
      Mancher Baum hätte wohl sein Wachstum eingestellt, wenn er gewusst hätte was hinterher für ein Mist auf seinem Papier geschrieben wird.
    • monkye schrieb:

      USI <> TWI

      Falls dieses Thema regelmäßig zur Anforderung wird, dann lohnt vielleicht eine eigene Implementierung in eine HW-Bibliothek...
      Schön wärs aber In dem Fall würden sie ihre slave-lib nicht mehr verkaufen.

      @andreas Wieviel Flash belegt die Slave-lib? Ich hab ohne bisher nur zum Betätigungs-ack schon über 1k weg. Bis es funktioniert wäre der 44er flash bestimmt schon über halb voll.
    • Die Frage ist doch, was möchte ich machen und wieviel Code ist es in Summe. Wenn der ATtiny 44 zu klein wird, dann gibt es ja noch einen ATtiny84 oder andere Controller.
      Die Entscheidung nach dem Controller richtest sich nach meinem Projekt.

      Grüße
      Andreas
      Mancher Baum hätte wohl sein Wachstum eingestellt, wenn er gewusst hätte was hinterher für ein Mist auf seinem Papier geschrieben wird.