- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 10

Thema: Soft TWI und Kompass CMPS03

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    06.08.2004
    Beiträge
    378

    Soft TWI und Kompass CMPS03

    Anzeige

    Praxistest und DIY Projekte
    Hi Leute,

    hab heute mal die Soft TWI mit Bascom aus Wiki getestet.
    Großes Lob an die Macher! Läuft super!

    Jedoch stelle ich mir die Frage wie ich es lösen kann den
    Kompass CMPS03 mit einzubinden.
    Leider funktioniert die Bascom I2C ansteuerung dann ja nicht mehr.

    Code:
    ' TWI-slave test
    ' zum simulieren eines PCF8574
    
    $regfile = "m32def.dat"                                     ' the used chip
    $crystal = 16000000                                         ' frequency used
    $baud = 9600                                                ' keine baud rate angeben !
    
    
    'LCD-Display Config
    '==================
    Config Lcdpin = Pin , Rs = Portc.3 , E = Portc.2 , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7
    Config Lcd = 16 * 4
    Initlcd
    Cursor Off
    Cls
    
    Dim Twi_control As Byte                                     ' Controlregister lokale kopie
    Dim Twi_status As Byte
    Dim Twi_data As Byte
    
    Dim Neuesbyte As Byte                                       ' Bytemerker
    
    Dim Byte_counter As Byte
    Dim Test As Byte
    
    
    Declare Sub Twi_init_slave
    
    Twi_data = 0
    
    Call Twi_init_slave                                         ' TWI aktivieren
    
    ' Hauptschleife
    Do
        ' hier könnte ihr Code stehen
        Locate 1 , 1
        Lcd "TWI-SLAVE-RX"
        '---------------------------------
    
    
    
        '---------------------------------
        'Merker zurücksetzen
        Neuesbyte = 0
        'schauen ob TWINT gesetzt ist
        Twi_control = Twcr And &H80                             ' Bit7 von Controlregister
        If Twi_control = &H80 Then
            Twi_status = Twsr And &HF8                          ' Status
            'wurde ein Byte geschickt
            If Twi_status = &H80 Or Twi_status = &H88 Then
                Twi_data = Twdr                                 ' neue Daten merken
                Neuesbyte = 1                                   ' merken das ein neues Byte da ist
            End If
            'TWINT muss immer gelöscht werden, damit es auf dem Bus weiter geht
            Twcr = &B11000100                                   ' TWINT löschen, erzeugt ACK
        End If
        'wenn ein neues Byte gekommen ist, dieses an PortD ausgeben
        If Neuesbyte <> 0 Then
            Locate 2 , 1                                        ' Daten auf LCD ausgeben
            Lcd "Data: " ;Twi_data ; "   "
        End If
    Loop
    End
    
    
    '===============================================================================
    ' Unterprogramme
    ' TWI als slave aktivieren
    Sub Twi_init_slave
    
        Twsr = 0                                                ' status und Prescaler auf 0
        Twdr = &HFF                                             ' default
        Twar = &H22                                             ' Slaveadresse setzen
        Twcr = &B01000100                                       ' TWI aktivieren, ACK einschalten
    
    End Sub
    Der obige Code stellt den Slave-Read dar...

    Wie kann ich nun noch den Kompass auslesen ?

    Bye Ulli

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    06.08.2004
    Beiträge
    378
    Noch keiner Erfahrung?


  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    06.08.2004
    Beiträge
    378
    Die Problematik ist die,

    ich will vom Master einen Wert den Slave per I²C übergeben.
    Leider braucht der Slave in seinen Programm den Kompass
    Wie kann ich den Kompass vom Slave aus auslesen?

    Die Soft TWI funktioniert 1A!

    Bye Ulli

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Naja, da muß der Slave kurz mal Master spielen.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    06.08.2004
    Beiträge
    378
    Hi,

    hast du mal nen Beispielcode?
    Ich hab bissl rumgebastelt brings aber nicht hin...

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Es ist auch mit Interrupts (wie ich es mache) einfacher als so.
    Für den von dir genannten Funktionsumfang kann ich dir eine Library für Bascom anbieten, wenn du 2-3 Tage Geduld hast. (Ich muß das vom anderen PC rüberkopieren und zusammenzippen, leider wegen Urlaubs-ende aber etwas Streß)
    Hilft das ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    06.08.2004
    Beiträge
    378
    Hi,

    ja kein Problem würd mich freuen wenn du mich nicht vergisst
    Spiel da jetzt noch bissl rum und sollt ich zu einen Ergebiss kommen Post ich das hier mal...

    Danke schon mal im voraus!

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hallo,
    wenn man unter Bascom einen I2C-Master bauen will, ist es einfacher man nimmt die funktionen, die Bascom schon dabei hat. (In der Hilfe mal nach I2C suchen)
    Wenn man diese Hardware-twi-lib einbindet (mit $lib "i2c_twi.lbx"), wird auch das eingebaute TWI verwendet.

    Man kann aber auch die anderen Beispiele (vom Wiki) von TWI-Master verwenden, ist dann aber für den Anfang etwas komplizierter.

    Dann noch was, Du schreibst immer Soft-TWI, das ist aber genau andersrum, es ist Hardware-TWI, weil das im AVR eingabaute TWI (I2C) verwendet wird, deshalb ist es auch relativ einfach.

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    06.08.2004
    Beiträge
    378
    Hi,

    ja ich schreibe Soft TWI wegen der in Wiki angegeben Soft TWI siehe Code oben. Ich benötige den einen MEGA32 als Slave aber diese muss zudem nich den Kompass auslesen.

    Das heißt er muss vom Master ein Byte empfangen und selber muss der Slave noch den Kompass am gleichen Bus auslesen.

  10. #10
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    However, ich stell' da mal eine Zip rein, schau, ob du zurechtkommst

    m32slave.bas 'demo/testprogramm
    twi_show_state.bas 'Twi-Status printen

    mytwi.bas 'includefile für die library
    mytwi.lib 'Bascom library gehört ins Bascom LIB directory



    Das Demo definiert sich als Slave und sendet oder empfängt was.
    Jede Sekunde sendet er selbst als Master was weg und holt dann gleich auch daten von dort

    Der Hauptschleifen-Aufbau muß schon so ausschauen wie in der Demo, du findest aber leicht die Plätze, wo du was einbauen kannst.


    Das "show-state" braucht viel Platz (wegen der Texte), das kannst du aber auch auslassen und überspringen


    Schau dir's mal an. Wenn was nicht klar ist, gib' Laut
    Angehängte Dateien Angehängte Dateien
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad