PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Soft TWI und Kompass CMPS03



Sommer
29.08.2006, 12:47
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.


' 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

Sommer
29.08.2006, 16:01
Noch keiner Erfahrung?

:-(

Sommer
29.08.2006, 17:02
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

PicNick
29.08.2006, 17:34
Naja, da muß der Slave kurz mal Master spielen.

Sommer
29.08.2006, 18:51
Hi,

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

PicNick
29.08.2006, 19:16
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 ?

Sommer
29.08.2006, 19:29
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!

linux_80
29.08.2006, 21:38
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.

Sommer
29.08.2006, 21:43
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.

PicNick
30.08.2006, 09:35
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