PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : trotz I2Cslave Library zeigt Bascom fehler an



Zeroeightfifteen
06.01.2006, 15:32
Hallo
ich habe mir die I2Cslave Library in den Libraryordner kopiert. Doch wenn ich auf Compilieren drücke zeigt er mir den fehler 324 an. "Error : 324 Line : 5 Chip not supported by I2C slave library"


$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600

Config i2cslave = &H40 und bei diesem hier auch.

$regfile = "m32def.dat" ' Benutzter Chip
$crystal = 16000000 ' Quarz Frequenz
$baud = 9600 ' Baud rate

Cls
Cursor Off
Waitms 100
'-------------------------------------------------------------------------------
Config Twislave = &H40
Config Adc = Single , Prescaler = Auto

Dim Command As Byte
Dim Byte_nr As Byte
Dim Channel As Byte
Dim Misc As Byte
Dim Merker As Bit

Dim Value As Word At &H110
Dim Value_low As Byte At &H110 Overlay
Dim Value_high As Byte At &H111 Overlay

Reset Merker


Enable Interrupts
'-------------------------------------------------------------------------------
'Hauptprogramm (in diesem Fall einfach eine leere Schleife).
'Selbstverständlich können hier auch weitere Operationen ausgeführt werden,
'man sollte aber beachten, daß bei häufigem Zugriff des Masters nicht viel
'Zeit für die Abarbeitung der Hauptprogrammschleife bleibt.

Do
nop
Loop

End
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'Die folgenden Labels werden von der Library aufgerufen:

Twi_stop_rstart_received:
'Print "Master hat ein Stop oder repeatet Start gesendet"
Return
'-------------------------------------------------------------------------------

Twi_addressed_goread:
'Print "Wir wurden adressiert und der Master wird Daten senden"
Return
'-------------------------------------------------------------------------------

'Dieses Label wird aufgerufen wenn der Master Daten sendet und der Slave das
'gesendete Byte in der Variable TWI vorhält.

Twi_gotdata:
If Merker = 0 Then 'Der "Merker" entscheidet darüber,
Command = Twi 'ob das empfangene Byte als
Set Merker 'Kommando oder "Universalbyte"
Else 'interpretiert wird.
Misc = Twi
Reset Merker
Locate 2 , 1 'spasseshalber wird hier das
Lcd Misc ; " " 'empfangene Universalbyte auf
End If 'dem LCD ausgegeben.
'Print "received : " ; Twi
Return
'-------------------------------------------------------------------------------
'Dieses Label wird aufgerufen, wenn der Master Daten empfangen will und ein
'Byte braucht. Twi ist die Variable, die gesendet wird.
'
'Die Variable twi_btr ist eine Byte Variable die den Index des benötigten Bytes
'enthält. Im Falle des Sendens mehrerer Bytes eines Arrays kann kann twi_btr
'entsprechend als Index genutzt werden.

Twi_master_needs_byte: 'Der Master braucht ein Byte.

Locate 1 , 1
Lcd "Slave - Modus" 'Nur zur Verdeutlichung.

Channel = Command And &H0F 'Hier wird entschieden, welcher ADC
If Channel = 0 Then Value = Getadc(0) 'Kanal gelesen werden soll. Das
If Channel = 1 Then Value = Getadc(1) 'niederwertige Nibble des Kommando-
If Channel = 2 Then Value = Getadc(2) 'byte enthält diese Information -
If Channel = 3 Then Value = Getadc(3) 'also von 0 bis 3.

'Da wir zwei Byte brauchen, wird im höherwetigen Nibble des Kommandobyte
'festgelegt, ob Low- oder Highbyte des Wandlungsergebnisses an den Master
'übertragen werden.

Byte_nr = Command And &HF0
If Byte_nr = &H10 Then Twi = Value_low
If Byte_nr = &H20 Then Twi = Value_high

Return

'-------------------------------------------------------------------------------
'Wenn der Master alle Bytes empfangen hat, wird dieses Label aufgerufen.
Twi_master_need_nomore_byte:
'Print "Der Master braucht keine Bytes mehr"
Return
an was liegt das? muss ich in Bascom noch etwas einstellen?

Zeroeightfifteen
06.01.2006, 16:01
kann das sein, dass ich den atmega32 gar nicht als Slave programmieren kann? denn wenn ich §regfile = "m8def.dat" einstelle dann zeigt er mir diesen fehler nicht mehr an.

linux_80
06.01.2006, 16:19
Halo,
der M32 kann das auf jeden Fall, ist da ja Hardwaremässig vorgesehen, nur wissen wir nicht was die Lib alles macht,
in der normalen Hilfe werden die Befehle auch nicht erklärt, also kann nur einer weiterhelfen der diese Lib auch hat.

Zeroeightfifteen
06.01.2006, 16:25
ich hab mir die lib mal durchgesehen aber ich kenn mich mit dieser überhaupt nicht aus. könnte mir jemand helfen der diese lib auch hat?
Danke

Zeroeightfifteen
06.01.2006, 16:34
ich habe dein anderen Thread durchgelesen. wie ist das jetzt mit der slave lib brauch ich die jetzt oder brauch ich die jetzt doch nicht mehr? ich versteh jetzt gar nichts mehr.

linux_80
06.01.2006, 16:43
theoretisch kann man auch alles selber programmieren, musst Dir halt das Datenblatt reinziehen,
diese Lib von Bascom ist wohl etwas komfortabler mit Config und fertigen Subs und Funktionen, die man dann nur aufzurufen braucht, auch wird man damit software-I2C-slave machen können. Das wird dann etwas aufwendiger das selberzu machen, was dann die Lib evtl. rentabel macht.

Zeroeightfifteen
06.01.2006, 16:51
wo liegt den der Unterschied ob ich jetzt Config i2cslave = &H40 schreibe oder Config Twislave = &H40 schreibe? beim ersten zeigt er mir den fehler an beim zweiten nicht mehr

uwegw
06.01.2006, 17:01
Wenn du ic2... nimmst, wird der Bus per Software emuliert. Bei twi... wird die Hardwareschnittstelle (von Atmel TWI genannt) verwendet. Dann liegt der Bus auf den mit SCL und SDA bezeichneten Pins. Das ist die bessere Lösung, aber weil nicht alle AVRs Hardware-TWI/i2c haben, besteht halt die Möglichkeit, das ganze softwaremäßig zu machen.

Zeroeightfifteen
06.01.2006, 17:16
hat den keiner ein beispielprogramm mit dem man vom master zum slave und umgekehrt etwas senden kann. Damit ich mir mal anschauen kann wie man das aufbaut. Die Beispielprogramme sind ja immer nur für Master. aber was schreib ich da in den slave rein.

uwegw
06.01.2006, 18:07
Sind keine Beispiele bei der Lib dabei?

Normalerweise sendet bei i2c der Slave nichts von selbst. Alle Übertragungen werden vom Master ausgelöst, der Daten in den Slave schreibt oder dort Daten anfordert.

Da ich nicht mit Bascom arbeite und auch die Lib noch nie gesehen habe, weiß ich nicht, wie die konkrete Umsetzung im Programm aussieht. In der Pascal-Umgebung, die ich nutze, werden jedenfalls zwei Buffer (quasi als nen Array) angelegt, auf die dann Master und Slave zugrefen können...

Zeroeightfifteen
06.01.2006, 19:09
Doch da war ein Beispielprogramm dabei, doch da zeigt bascom mir auch nur fehler an.
'-------------------------------------------------------------------------------
' (c) 2004 MCS Electronics
' This demo shows an example of the TWI in SLAVE mode
' Not all AVR chips have TWI (hardware I2C)
'-------------------------------------------------------------------------------
$regfile = "M32def.dat"
$crystal = 16000000
$baud = 9600

Print "MCS Electronics TWI-slave demo"

#if _build >= 11175
Config Twislave = &H70 , Btr = 1 , Bitrate = 100000
' the code below #else is executed by the compiler when you use version 11175 or higher
#else
'as this is available in 1.11.7.5 some manual work mus tbe done
$lib "i2c_twi-slave.lbx" ' include
$external _twi_slave 'include code from the lib

Const _twisdaport = Portd
Const _twisclport = Portd
Const _twisdaddr = Ddrd
Const _twisclddr = Ddrd
Const _twisda = 1
Const _twiscl = 0

Const Twi_cbtr = 1 'how many bytes we will receive

Dim Twi As Byte , Twi_btr As Byte
rcall _twi_init

Twbr = 12 'bit rate register
Twsr = 0

Twar = &B01110000 ' own slave address
Twcr = &B01000101 'general call not enabled
On Twi _twi_slave_isr Nosave
Enable Twi
#endif


'as you might need other interrupts as well, you need to enable them manual

Enable Interrupts

'this is just an empty loop but you could perform other tasks there
Do
nop
Loop
End

'A master can send or receive bytes.
'A master protocol can also send some bytes, then receive some bytes
'The master and slave must match.

'the following labels are called from the library
Twi_stop_rstart_received:
Print "Master sent stop or repeated start"
Return


Twi_addressed_goread:
Print "We were addressed and master will send data"
Return

'this label is called when the master sends data and the slave has received the byte
'the variable TWI holds the received value
Twi_gotdata:
Print "received : " ; Twi
Return

'this label is called when the master receives data and needs a byte
'the variable twi_btr is a byte variable that holds the index of the needed byte
'so when sending multiple bytes from an array, twi_btr can be used for the index
Twi_master_needs_byte:
Print "Master needs byte : " ; Twi_btr
Twi = 65 ' twi must be filled with a value
Return


'when the mast has all bytes received this label will be called
Twi_master_need_nomore_byte:
Print "Master does not need anymore bytes"
Return

repi64
06.01.2006, 19:13
Hi,
schau mal unter:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=15715&sid=0f0bc718afccb9bc163c667e62a79bba
da steht ja ein Beispiel zum Slave.
Die Slave LIB braucht man für die ganzen Tinys die ja kein hardware TWI haben. Der M8 Ist da irgendwie eine Ausnahme.
Der M8 hat ja Hardware TWI, geht aber auch mit der Slave LIB.
Die größeren Megas gehen wohl dann nur mit dem Hardware TWI als Slave.

Gruß RePi!