-         

Seite 1 von 5 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 49

Thema: TWI-slave ohne lib

  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731

    TWI-slave ohne lib

    Anzeige

    Hallo,
    ich lese hier immer das man für das einsetzen des AVR als TWI-slave eine lib brauchen soll, wenn ich aber ins Datenblatt sehe, schaut das doch relativ einfach aus einen Slave ans laufen zu bekommen.
    Deshalb hab ich mir vor Weihnachten noch schnell ein paar PCF8574 bestellt, und mich in das TWI-Thema eingelesen, da es im Wiki noch keine Seite dazu gab, diese auch noch angelegt und die ersten Infos reingeschrieben. -> TWI

    Testumgebung: RN-Control (Master), PCF8574 (zum testen ob Master auch richtig geht), RN-Mega8 (Slave).

    Jetzt hab ich eine Quick dafür Dirty Version in Bascom gebaut, um zu sehen wie man den M8 als Slave hinbekommen kann, das Ergebnis ist dieses:

    Am Master wird über den PC eine Zahl eingegeben, 0-255, die dann zum Slave gesendet wird und dort an PortD ausgegeben wird. (PortD weil hier alle Bits der Reihe nach an den LEDs zu sehen sind)

    Master:
    Code:
    ' TWI Testprogramm aus der Hilfe (abgespeckt)
    ' mit PCF8574
    
    'The chip will work in TWI/I2C master mode
    'Connected is a PCF8574 8-bits port extender
    
    $regfile = "M32def.dat"                                     ' the used chip
    $crystal = 16000000                                         ' frequency used
    $baud = 9600                                                ' baud rate
    
    $lib "i2c_twi.lbx"                                          ' we do not use software emulated I2C but the TWI
    
    Config Twi = 100000                                         ' wanted I2C clock frequency
    TWCR = &H04                                                   ' TWEN
    
    Dim B As Byte
    Print "TWI master"
    Do
      Input B
      I2csend &H40 , B                                          ' send the value
      Print B ;
      Print " Error : " ;
      Print Err                                                 ' show error status
    Loop
    End
    Slave:
    Code:
    ' TWI-slave test
    ' zum simulieren eines PCF8574
    
    $regfile = "m8def.dat"                                      ' the used chip
    $crystal = 7372800                                          ' frequency used
    
    Config Portd = Output                                       ' kopletter PortD als Ausgang
    
    Dim Twi_status As Byte
    Dim Twi_data As Byte
    
    Declare Sub Twi_init_slave
    Declare Function Twi_wait() As Byte
    
    Twi_data = 0
    Call Twi_init_slave                                         ' TWI aktivieren
    
    ' Hauptschleife
    Do
        Twi_status = Twi_wait()
        If Twi_status = &H80 Then
            Portd = Twi_data                                    ' Daten auf PortD ausgeben
        End If
    Loop
    
    End
    
    ' Unterprogramme
    
    ' TWI als slave aktivieren
    Sub Twi_init_slave
        Twsr = 0                                                ' status und Prescaler auf 0
        Twdr = &HFF                                             ' default
        Twcr = &B00000100                                       ' erstmal nur TWI aktivieren
        Twar = &H40                                             ' Slaveadresse setzen
        Twcr = &B01000100                                       ' dann ACK einschalten
    End Sub
    
    ' schauen ob was gekommen ist, Status zurückgeben, Daten in globale variable
    Function Twi_wait() As Byte
        Local Twcr_local As Byte
        Twi_wait = &HF8
        ' warten bis TWINT gesetzt ist
        Twcr_local = Twcr And &H80
        If Twcr_local = &H80 Then
            Twi_data = Twdr                                     ' Daten sichern
            Twi_wait = Twsr And &HF8                            ' status zurückgeben
            Twcr = Twcr Or &B10000000                           ' TWINT löschen, erzeugt ACK
        End If
    
    End Function
    Das lässt sich natürlich noch ausbauen, da mit diesem Testprogramm der Slave nur empfangen kann. Interupt wird auch nicht benutzt.
    mfG
    HK
    /* Linux user #98697 */

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.02.2005
    Beiträge
    175
    Wie war das:

    "Alle sagten, das geht nicht - bis einer kam, der das nicht wusste und es einfach tat..."

    Mensch, ist ja Klasse!

    Sollte man kaum glauben, dass es so einfach geht, da waren ja selbst die 5,00 Euro für die I2cSlave.lib fast noch zuviel...

    Muß ich unbedingt mal ausprobieren!

    Besten Dank für die Info und viele Grüße

    Torsten

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    30.12.2005
    Ort
    Tann / ZH
    Alter
    61
    Beiträge
    264
    Zutrffendes bitte ausfüllen:

    [ ] ich weiss was $lib "i2c_twi.lbx" bedeutet
    [ ] ich weiss NICHT was $lib "i2c_twi.lbx" bedutet

    MfH
    Ruedi

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.02.2005
    Beiträge
    175
    Nun, Ruedi, soweit mir bekannt, ist die i2c_twi.lbx für den Master, die i2cslave ist für den µC als Slave...

    Worauf möchtest Du hinaus?

    Grüße

    Torsten

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Zum basteln hab ich ja nur die Demo von Bascom, und das hier ist mit der Demo möglich.

    Ich wollte nur den Slave ohne lib verwenden, hier ist die lib beim Master und führt nur dazu, das das Programm kleiner wird (32 Byte), dann wird wohl Software-TWI gemacht, ansonsten Hardware. Hab das aber nicht genauer untersucht, will man die lib nicht einbinden, muss man diese Zeilen dafür einbauen:

    Code:
    Config Scl = Portc.0                                        ' we need to provide the SCL pin name
    Config Sda = Portc.1                                        ' we need to provide the SDA pin name
    Config I2cdelay = 10
    Dann klappts auch mit dem ...

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    @Linux

    Ja,nette Arbeit aber...........


    Zum einen unterstützen die Megas Hardwaremäßig master und Slavemodi so das eh keine Lib nötig ist.(Siehe Datenblatt.Sonderfall M8 der ne Extrawurst braucht weil andersrum aber auch kein Akt).

    Schau mal auf deiner Platte in das Samplesverzeichnis.
    Da findeste die Datei "M8_twi_Slave.bas" die da schon seit einigen Jahren steht.

    Mach mal zb. mit nem Tiny26 nen Slave dann weißte für was die Lib eigentlich gedacht ist.


    Ja und was die einfache Progrsmierung unter Bascom angeht so solltest du nicht vergessen das Mcselec in den letzten 2 Versionen den I2C Support mächtig aufgebohrt hat.



    Also kein Kunststück.(Nicht falsch verstehen.will deine Leistung nicht schlecht machen)

    Aber vieleicht mal was greifbares für die die immer gleich hektisch alarm schreien wennes nicht klappt.
    Gruß
    Ratber

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    @ratber,
    ich kenne dieses Sample, aber ...
    hast Du dieses Sample schon mal versucht zu compilieren, das geht nämlich nicht ohne eine gewisse i2c_twi-slave.lbx und diese habe ich nicht !

    Ich wollte auch nur zeigen das so ein Datenblatt eines AVR recht viel hergibt, es will nur gelesen sein. Und kostet im prinzip nix, ausser man druckt es aus.

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Ich sagte ja ,bis auf den Sonderfall M8 ist es mit den Megas kein Akt einen Slave zu produzieren.

    Du hast es ja auch ohne klimmzüge geschafft die Hardware zu aktivieren




    Ich wollte auch nur zeigen das so ein Datenblatt eines AVR recht viel hergibt, es will nur gelesen sein. Und kostet im prinzip nix, ausser man druckt es aus.
    Ja,mein Reden.
    Leider sind die meisten zu faul.
    Schau dich mal hier um.
    über die hälfte der Fragen sind überflüssig wenn man nur eine ZE aufwendet.
    Gruß
    Ratber

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Zitat Zitat von Ratber
    bis auf den Sonderfall M8 ist es mit den Megas kein Akt einen Slave zu produzieren.
    Was ist beim M8 anders ?
    Ich hab hier ja u.a. einen M8 verwendet, und es ging ganz normal !
    Egal ob Master oder Slave.

    Ich hab hier immer alle möglichen Datenblätter rumliegen M8, M32 usw., hab noch nix besonderes gefunden.

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Ja da hab ich mich falsch ausgedrückt.

    Hardwaremäßig ist da kein Unterschied.

    Es ist nur etwas anders wenn man unbedingt die Lib nutzen will die Mcselec anbietet.

    Für deine Sache ist das nicht relevant.
    Gruß
    Ratber

Seite 1 von 5 123 ... LetzteLetzte

Berechtigungen

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